DPDK patches and discussions
 help / color / mirror / Atom feed
From: Tomasz Kulasek <tomaszx.kulasek@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH 2/8] ring: dynamic rss configuration
Date: Wed,  3 Jun 2015 12:59:01 +0200	[thread overview]
Message-ID: <1433329147-2840-3-git-send-email-tomaszx.kulasek@intel.com> (raw)
In-Reply-To: <1433329147-2840-1-git-send-email-tomaszx.kulasek@intel.com>

This implementation allows to set and read RSS configuration for ring device,
and is used to validate right values propagation over the slaves, in test units
for dynamic RSS configuration for bonding.

It have no impact on packet processing by ring device.

Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
---
 drivers/net/ring/rte_eth_ring.c |  122 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 118 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
index 6832f01..6d2182f 100644
--- a/drivers/net/ring/rte_eth_ring.c
+++ b/drivers/net/ring/rte_eth_ring.c
@@ -39,6 +39,7 @@
 #include <rte_string_fns.h>
 #include <rte_dev.h>
 #include <rte_kvargs.h>
+#include <rte_spinlock.h>
 
 #define ETH_RING_NUMA_NODE_ACTION_ARG	"nodeaction"
 #define ETH_RING_ACTION_CREATE		"CREATE"
@@ -66,6 +67,17 @@ struct pmd_internals {
 	struct ring_queue tx_ring_queues[RTE_PMD_RING_MAX_TX_RINGS];
 
 	struct ether_addr address;
+
+	/** Bit mask of RSS offloads, the bit offset also means flow type */
+	uint64_t flow_type_rss_offloads;
+
+	rte_spinlock_t rss_lock;
+
+	uint16_t reta_size;
+	struct rte_eth_rss_reta_entry64 reta_conf[ETH_RSS_RETA_SIZE_128 /
+			RTE_RETA_GROUP_SIZE];
+
+	uint8_t rss_key[40];                /**< 40-byte hash key. */
 };
 
 
@@ -173,6 +185,8 @@ eth_dev_info(struct rte_eth_dev *dev,
 	dev_info->max_tx_queues = (uint16_t)internals->nb_tx_queues;
 	dev_info->min_rx_bufsize = 0;
 	dev_info->pci_dev = NULL;
+    dev_info->flow_type_rss_offloads = internals->flow_type_rss_offloads;
+	dev_info->reta_size = ETH_RSS_RETA_SIZE_128;
 }
 
 static void
@@ -234,6 +248,93 @@ static int
 eth_link_update(struct rte_eth_dev *dev __rte_unused,
 		int wait_to_complete __rte_unused) { return 0; }
 
+static int
+eth_rss_reta_update(struct rte_eth_dev *dev,
+			  struct rte_eth_rss_reta_entry64 *reta_conf,
+			  uint16_t reta_size)
+{
+	int i, j;
+	struct pmd_internals *internal = dev->data->dev_private;
+
+	if (reta_size != internal->reta_size)
+		return -EINVAL;
+
+	rte_spinlock_lock(&internal->rss_lock);
+
+	/* Copy RETA table */
+	for (i = 0; i < (internal->reta_size / RTE_RETA_GROUP_SIZE); i++) {
+		internal->reta_conf[i].mask = reta_conf[i].mask;
+		for (j = 0; j < RTE_RETA_GROUP_SIZE; j++)
+			if ((reta_conf[i].mask >> j) & 0x01)
+				internal->reta_conf[i].reta[j] = reta_conf[i].reta[j];
+	}
+
+	rte_spinlock_unlock(&internal->rss_lock);
+
+	return 0;
+}
+
+static int
+eth_rss_reta_query(struct rte_eth_dev *dev,
+		struct rte_eth_rss_reta_entry64 *reta_conf,
+		uint16_t reta_size)
+{
+	int i, j;
+	struct pmd_internals *internal = dev->data->dev_private;
+
+	if (reta_size != internal->reta_size) return -EINVAL;
+
+	rte_spinlock_lock(&internal->rss_lock);
+
+	/* Copy RETA table */
+	for (i = 0; i < (internal->reta_size / RTE_RETA_GROUP_SIZE); i++) {
+		for (j = 0; j < RTE_RETA_GROUP_SIZE; j++)
+			if ((reta_conf[i].mask >> j) & 0x01)
+				reta_conf[i].reta[j] = internal->reta_conf[i].reta[j];
+	}
+
+	rte_spinlock_unlock(&internal->rss_lock);
+
+	return 0;
+}
+
+static int
+eth_rss_hash_update(struct rte_eth_dev *dev,
+			  struct rte_eth_rss_conf *rss_conf)
+{
+	struct pmd_internals *internal = dev->data->dev_private;
+
+	rte_spinlock_lock(&internal->rss_lock);
+
+	if ((rss_conf->rss_hf & internal->flow_type_rss_offloads) != 0)
+		dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf =
+				rss_conf->rss_hf & internal->flow_type_rss_offloads;
+
+	if (rss_conf->rss_key != NULL)
+		memcpy(internal->rss_key, rss_conf->rss_key, 40);
+
+	rte_spinlock_unlock(&internal->rss_lock);
+
+	return 0;
+}
+
+static int
+eth_rss_hash_conf_get(struct rte_eth_dev *dev,
+		struct rte_eth_rss_conf *rss_conf)
+{
+	struct pmd_internals *internal = dev->data->dev_private;
+
+	rte_spinlock_lock(&internal->rss_lock);
+
+	rss_conf->rss_hf = dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf;
+	if (rss_conf->rss_key != NULL)
+		memcpy(rss_conf->rss_key, internal->rss_key, 40);
+
+	rte_spinlock_unlock(&internal->rss_lock);
+
+	return 0;
+}
+
 static const struct eth_dev_ops ops = {
 	.dev_start = eth_dev_start,
 	.dev_stop = eth_dev_stop,
@@ -250,6 +351,10 @@ static const struct eth_dev_ops ops = {
 	.stats_reset = eth_stats_reset,
 	.mac_addr_remove = eth_mac_addr_remove,
 	.mac_addr_add = eth_mac_addr_add,
+	.reta_update = eth_rss_reta_update,
+	.reta_query = eth_rss_reta_query,
+	.rss_hash_update = eth_rss_hash_update,
+	.rss_hash_conf_get = eth_rss_hash_conf_get
 };
 
 int
@@ -268,6 +373,13 @@ rte_eth_from_rings(const char *name, struct rte_ring *const rx_queues[],
 
 	unsigned i;
 
+	static const uint8_t default_rss_key[40] = {
+		0x6D, 0x5A, 0x56, 0xDA, 0x25, 0x5B, 0x0E, 0xC2, 0x41, 0x67, 0x25, 0x3D,
+		0x43, 0xA3, 0x8F, 0xB0, 0xD0, 0xCA, 0x2B, 0xCB, 0xAE, 0x7B, 0x30, 0xB4,
+		0x77, 0xCB, 0x2D, 0xA3, 0x80, 0x30, 0xF2, 0x0C, 0x6A, 0x42, 0xB7, 0x3B,
+		0xBE, 0xAC, 0x01, 0xFA
+	};
+
 	/* do some parameter checking */
 	if (rx_queues == NULL && nb_rx_queues > 0)
 		goto error;
@@ -316,12 +428,14 @@ rte_eth_from_rings(const char *name, struct rte_ring *const rx_queues[],
 
 	internals->nb_rx_queues = nb_rx_queues;
 	internals->nb_tx_queues = nb_tx_queues;
-	for (i = 0; i < nb_rx_queues; i++) {
+	for (i = 0; i < nb_rx_queues; i++)
 		internals->rx_ring_queues[i].rng = rx_queues[i];
-	}
-	for (i = 0; i < nb_tx_queues; i++) {
+	for (i = 0; i < nb_tx_queues; i++)
 		internals->tx_ring_queues[i].rng = tx_queues[i];
-	}
+	internals->flow_type_rss_offloads =  ETH_RSS_PROTO_MASK;
+	internals->reta_size = ETH_RSS_RETA_SIZE_128;
+
+	memcpy(internals->rss_key, default_rss_key, 40);
 
 	eth_drv->pci_drv.name = ring_ethdev_driver_name;
 	eth_drv->pci_drv.id_table = id_table;
-- 
1.7.9.5

  parent reply	other threads:[~2015-06-03 11:03 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-03 10:58 [dpdk-dev] [PATCH 0/8] Dynamic RSS Configuration for Bonding Tomasz Kulasek
2015-06-03 10:59 ` [dpdk-dev] [PATCH 1/8] bond: dynamic rss configuration Tomasz Kulasek
2015-06-03 10:59 ` Tomasz Kulasek [this message]
2015-06-03 10:59 ` [dpdk-dev] [PATCH 3/8] test: " Tomasz Kulasek
2015-06-03 10:59 ` [dpdk-dev] [PATCH 4/8] bond: queue stats mapping Tomasz Kulasek
2015-06-03 10:59 ` [dpdk-dev] [PATCH 5/8] ring: queue stats mapping set dummy implementation Tomasz Kulasek
2015-06-03 10:59 ` [dpdk-dev] [PATCH 6/8] examples: dynamic rss configuration for bonding Tomasz Kulasek
2015-06-03 10:59 ` [dpdk-dev] [PATCH 7/8] doc: fixed spellings and typos Tomasz Kulasek
2015-06-03 10:59 ` [dpdk-dev] [PATCH 8/8] doc: dynamic rss configuration for bonding Tomasz Kulasek
2015-06-12  5:36 ` [dpdk-dev] [PATCH 0/8] Dynamic RSS Configuration for Bonding Xu, HuilongX
2015-06-25  9:20   ` Kulasek, TomaszX
2015-06-19 14:13 ` [dpdk-dev] [PATCH v2 " Tomasz Kulasek
2015-06-19 14:13   ` [dpdk-dev] [PATCH v2 1/8] bond: rss dynamic configuration Tomasz Kulasek
2015-06-19 14:13   ` [dpdk-dev] [PATCH v2 2/8] ring: dynamic rss configuration Tomasz Kulasek
2015-06-19 14:13   ` [dpdk-dev] [PATCH v2 3/8] test: " Tomasz Kulasek
2015-06-19 14:13   ` [dpdk-dev] [PATCH v2 4/8] bond: queue stats mapping Tomasz Kulasek
2015-06-19 14:13   ` [dpdk-dev] [PATCH v2 5/8] ring: queue stats mapping set dummy implementation Tomasz Kulasek
2015-06-19 14:13   ` [dpdk-dev] [PATCH v2 6/8] examples: dynamic rss configuration for bonding Tomasz Kulasek
2015-06-19 14:13   ` [dpdk-dev] [PATCH v2 7/8] doc: fixed spellings and typos Tomasz Kulasek
2015-06-19 14:13   ` [dpdk-dev] [PATCH v2 8/8] doc: dynamic rss configuration for bonding Tomasz Kulasek
2015-06-26  7:33   ` [dpdk-dev] [PATCH v2 0/8] Dynamic RSS Configuration for Bonding Doherty, Declan
2015-06-28 21:54     ` Thomas Monjalon
2015-06-29 14:50   ` [dpdk-dev] [PATCH v3 " Tomasz Kulasek
2015-06-29 14:50     ` [dpdk-dev] [PATCH v3 1/8] bonding: rss dynamic configuration Tomasz Kulasek
2015-06-29 14:50     ` [dpdk-dev] [PATCH v3 2/8] ring: dynamic rss configuration Tomasz Kulasek
2015-07-13 12:36       ` Thomas Monjalon
2015-07-13 14:43         ` Kulasek, TomaszX
2015-07-13 15:11           ` Thomas Monjalon
2015-07-16 13:02             ` Kulasek, TomaszX
2015-06-29 14:50     ` [dpdk-dev] [PATCH v3 3/8] test: " Tomasz Kulasek
2015-06-29 14:50     ` [dpdk-dev] [PATCH v3 4/8] bonding: queue stats mapping Tomasz Kulasek
2015-07-13 11:18       ` Thomas Monjalon
2015-07-13 12:00         ` Kulasek, TomaszX
2015-06-29 14:50     ` [dpdk-dev] [PATCH v3 5/8] ring: queue stats mapping set dummy implementation Tomasz Kulasek
2015-07-09  1:58       ` Thomas Monjalon
2015-07-09  9:55         ` Kulasek, TomaszX
2015-07-09 10:13           ` Thomas Monjalon
2015-06-29 14:50     ` [dpdk-dev] [PATCH v3 6/8] examples: dynamic rss configuration for bonding Tomasz Kulasek
2015-07-13 11:20       ` Thomas Monjalon
2015-06-29 14:50     ` [dpdk-dev] [PATCH v3 7/8] doc: fixed spellings and typos Tomasz Kulasek
2015-06-29 14:50     ` [dpdk-dev] [PATCH v3 8/8] doc: dynamic rss configuration for bonding Tomasz Kulasek
2015-07-01 10:05     ` [dpdk-dev] [PATCH v3 0/8] Dynamic RSS Configuration for Bonding Declan Doherty
2015-07-13 11:03       ` Thomas Monjalon
2015-07-13 11:18         ` Thomas Monjalon
2015-07-13 12:14           ` Kulasek, TomaszX
2015-07-15 17:26     ` [dpdk-dev] [PATCHv4 0/9] " Tomasz Kulasek
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 1/9] bonding: rss dynamic configuration Tomasz Kulasek
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 2/9] null: fix segfault when null_pmd added to bonding Tomasz Kulasek
2015-09-29  2:24         ` Tetsuya Mukawa
2015-09-29  9:39           ` Kulasek, TomaszX
2015-09-29 10:32             ` Tetsuya Mukawa
2015-09-29 11:29               ` Kulasek, TomaszX
2015-09-29 15:10               ` Kulasek, TomaszX
2015-09-30  1:24                 ` Tetsuya Mukawa
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 3/9] null: extend number of virtual queues Tomasz Kulasek
2015-09-29  2:24         ` Tetsuya Mukawa
2015-09-29  9:46           ` Kulasek, TomaszX
2015-09-29 10:34             ` Tetsuya Mukawa
2015-09-29 11:56               ` Kulasek, TomaszX
2015-09-29 15:06                 ` Kulasek, TomaszX
2015-09-30  1:24                   ` Tetsuya Mukawa
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 4/9] null: virtual dynamic rss configuration Tomasz Kulasek
2015-09-29  2:24         ` Tetsuya Mukawa
2015-09-29 10:04           ` Kulasek, TomaszX
2015-10-12  9:05           ` Jastrzebski, MichalX K
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 5/9] null: export eth_dev_null_create Tomasz Kulasek
2015-09-25 10:11         ` Thomas Monjalon
2015-09-25 13:24           ` Kulasek, TomaszX
2015-09-25 13:43             ` Thomas Monjalon
2015-09-29  2:28         ` Tetsuya Mukawa
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 6/9] test: dynamic rss configuration Tomasz Kulasek
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 7/9] bonding: queue stats mapping Tomasz Kulasek
2015-09-25 10:14         ` Thomas Monjalon
2015-09-25 13:26           ` Kulasek, TomaszX
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 8/9] doc: fixed spellings and typos Tomasz Kulasek
2015-07-15 17:26       ` [dpdk-dev] [PATCHv4 9/9] doc: dynamic rss configuration for bonding Tomasz Kulasek
2015-09-25 10:16       ` [dpdk-dev] [PATCHv4 0/9] Dynamic RSS Configuration for Bonding Thomas Monjalon
2015-09-25 13:28         ` Kulasek, TomaszX
2015-09-25 13:44           ` Thomas Monjalon
2015-09-30 14:04       ` [dpdk-dev] [PATCH v5 " Tomasz Kulasek
2015-09-30 14:04         ` [dpdk-dev] [PATCH v5 1/9] bonding: rss dynamic configuration Tomasz Kulasek
2015-09-30 14:04         ` [dpdk-dev] [PATCH v5 2/9] null: fix segfault when null_pmd added to bonding Tomasz Kulasek
2015-09-30 14:04         ` [dpdk-dev] [PATCH v5 3/9] null: extend number of virtual queues Tomasz Kulasek
2015-10-14  1:34           ` Tetsuya Mukawa
2015-09-30 14:05         ` [dpdk-dev] [PATCH v5 4/9] null: virtual dynamic rss configuration Tomasz Kulasek
2015-10-14  1:34           ` Tetsuya Mukawa
2015-10-15  7:46           ` Tetsuya Mukawa
2015-10-15  8:42             ` Kulasek, TomaszX
2015-10-15  9:21               ` Tetsuya Mukawa
2015-09-30 14:05         ` [dpdk-dev] [PATCH v5 5/9] null: export eth_dev_null_create Tomasz Kulasek
2015-10-14  1:35           ` Tetsuya Mukawa
2015-10-14 12:42             ` Jastrzebski, MichalX K
2015-10-15  8:16               ` Tetsuya Mukawa
2015-10-15 10:35                 ` Jastrzebski, MichalX K
2015-09-30 14:05         ` [dpdk-dev] [PATCH v5 6/9] test: dynamic rss configuration Tomasz Kulasek
2015-09-30 14:05         ` [dpdk-dev] [PATCH v5 7/9] bonding: per queue stats Tomasz Kulasek
2015-09-30 14:05         ` [dpdk-dev] [PATCH v5 8/9] doc: fixed spellings and typos Tomasz Kulasek
2015-09-30 14:05         ` [dpdk-dev] [PATCH v5 9/9] doc: dynamic rss configuration for bonding Tomasz Kulasek
2015-10-16 10:00         ` [dpdk-dev] [PATCH v6 0/9] Dynamic RSS Configuration for Bonding Tomasz Kulasek
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 1/9] bonding: rss dynamic configuration Tomasz Kulasek
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 2/9] null: fix segfault when null_pmd added to bonding Tomasz Kulasek
2015-10-27 16:58             ` Thomas Monjalon
2015-10-28 13:43               ` Kulasek, TomaszX
2015-10-29  7:19                 ` Tetsuya Mukawa
2015-10-30 13:50                   ` Kulasek, TomaszX
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 3/9] null: extend number of virtual queues Tomasz Kulasek
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 4/9] null: export eth_dev_null_create Tomasz Kulasek
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 5/9] null: virtual dynamic rss configuration Tomasz Kulasek
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 6/9] test: " Tomasz Kulasek
2015-10-27 17:34             ` Thomas Monjalon
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 7/9] bonding: per queue stats Tomasz Kulasek
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 8/9] doc: fixed spellings and typos Tomasz Kulasek
2015-10-16 10:00           ` [dpdk-dev] [PATCH v6 9/9] doc: dynamic rss configuration for bonding Tomasz Kulasek
2015-10-19 13:22           ` [dpdk-dev] [PATCH v6 0/9] Dynamic RSS Configuration for Bonding Declan Doherty
2015-10-30 14:25           ` [dpdk-dev] [PATCH v7 " Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 1/9] bonding: rss dynamic configuration Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 2/9] null: fix segfault when null_pmd added to bonding Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 3/9] null: extend number of virtual queues Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 4/9] null: export eth_dev_null_create Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 5/9] null: virtual dynamic rss configuration Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 6/9] test: " Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 7/9] bonding: per queue stats Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 8/9] doc: fixed spellings and typos Tomasz Kulasek
2015-10-30 14:25             ` [dpdk-dev] [PATCH v7 9/9] doc: dynamic rss configuration for bonding Tomasz Kulasek
2015-11-01 17:29             ` [dpdk-dev] [PATCH v7 0/9] Dynamic RSS Configuration for Bonding Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1433329147-2840-3-git-send-email-tomaszx.kulasek@intel.com \
    --to=tomaszx.kulasek@intel.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).