* [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF @ 2014-07-18 2:45 Helin Zhang 2014-07-18 2:45 ` [dpdk-dev] [PATCH 1/3] i40evf: add " Helin Zhang ` (4 more replies) 0 siblings, 5 replies; 8+ messages in thread From: Helin Zhang @ 2014-07-18 2:45 UTC (permalink / raw) To: dev As RSS in i40e VF is supported by hardware, these patches enable it in i40e PMD, and also enable its testing in testpmd. Helin Zhang (3): i40evf: add RSS support in VF app/testpmd: enable RSS support for i40e ethdev: improvements for some macro definition in head file app/test-pmd/testpmd.c | 13 ++- lib/librte_ether/rte_ethdev.h | 47 ++++---- lib/librte_pmd_i40e/i40e_ethdev.c | 4 +- lib/librte_pmd_i40e/i40e_ethdev.h | 40 ++++++- lib/librte_pmd_i40e/i40e_ethdev_vf.c | 208 +++++++++++++++++++++++++++++++++++ 5 files changed, 284 insertions(+), 28 deletions(-) -- 1.8.1.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH 1/3] i40evf: add RSS support in VF 2014-07-18 2:45 [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Helin Zhang @ 2014-07-18 2:45 ` Helin Zhang 2014-07-18 2:45 ` [dpdk-dev] [PATCH 2/3] app/testpmd: enable RSS support for i40e Helin Zhang ` (3 subsequent siblings) 4 siblings, 0 replies; 8+ messages in thread From: Helin Zhang @ 2014-07-18 2:45 UTC (permalink / raw) To: dev Add VF RSS support in Poll Mode Driver, as it is supported by hardware. Signed-off-by: Helin Zhang <helin.zhang@intel.com> Acked-by: Cunming Liang <cunming.liang@intel.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com> --- lib/librte_pmd_i40e/i40e_ethdev.c | 4 +- lib/librte_pmd_i40e/i40e_ethdev.h | 40 ++++++- lib/librte_pmd_i40e/i40e_ethdev_vf.c | 208 +++++++++++++++++++++++++++++++++++ 3 files changed, 249 insertions(+), 3 deletions(-) diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c index 9ed31b5..85e8b18 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev.c +++ b/lib/librte_pmd_i40e/i40e_ethdev.c @@ -3747,7 +3747,7 @@ DONE: } /* Configure hash enable flags for RSS */ -static uint64_t +uint64_t i40e_config_hena(uint64_t flags) { uint64_t hena = 0; @@ -3782,7 +3782,7 @@ i40e_config_hena(uint64_t flags) } /* Parse the hash enable flags */ -static uint64_t +uint64_t i40e_parse_hena(uint64_t flags) { uint64_t rss_hf = 0; diff --git a/lib/librte_pmd_i40e/i40e_ethdev.h b/lib/librte_pmd_i40e/i40e_ethdev.h index 64deef2..1d42cd2 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev.h +++ b/lib/librte_pmd_i40e/i40e_ethdev.h @@ -68,6 +68,36 @@ I40E_FLAG_HEADER_SPLIT_ENABLED | \ I40E_FLAG_FDIR) +#define I40E_RSS_OFFLOAD_ALL ( \ + ETH_RSS_NONF_IPV4_UDP | \ + ETH_RSS_NONF_IPV4_TCP | \ + ETH_RSS_NONF_IPV4_SCTP | \ + ETH_RSS_NONF_IPV4_OTHER | \ + ETH_RSS_FRAG_IPV4 | \ + ETH_RSS_NONF_IPV6_UDP | \ + ETH_RSS_NONF_IPV6_TCP | \ + ETH_RSS_NONF_IPV6_SCTP | \ + ETH_RSS_NONF_IPV6_OTHER | \ + ETH_RSS_FRAG_IPV6 | \ + ETH_RSS_L2_PAYLOAD) + +/* All bits of RSS hash enable */ +#define I40E_RSS_HENA_ALL ( \ + (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP) | \ + (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP) | \ + (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_SCTP) | \ + (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_OTHER) | \ + (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4) | \ + (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP) | \ + (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP) | \ + (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_SCTP) | \ + (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_OTHER) | \ + (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV6) | \ + (1ULL << I40E_FILTER_PCTYPE_FCOE_OX) | \ + (1ULL << I40E_FILTER_PCTYPE_FCOE_RX) | \ + (1ULL << I40E_FILTER_PCTYPE_FCOE_OTHER) | \ + (1ULL << I40E_FILTER_PCTYPE_L2_PAYLOAD)) + struct i40e_adapter; TAILQ_HEAD(i40e_mac_filter_list, i40e_mac_filter); @@ -253,6 +283,8 @@ struct i40e_vf_tx_queues { * Structure to store private data specific for VF instance. */ struct i40e_vf { + struct i40e_adapter *adapter; /* The adapter this VF associate to */ + struct rte_eth_dev_data *dev_data; /* Pointer to the device data */ uint16_t num_queue_pairs; uint16_t max_pkt_len; /* Maximum packet length */ bool promisc_unicast_enabled; @@ -310,8 +342,10 @@ int i40e_dev_link_update(struct rte_eth_dev *dev, void i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi); void i40e_vsi_queues_unbind_intr(struct i40e_vsi *vsi); int i40e_vsi_vlan_pvid_set(struct i40e_vsi *vsi, - struct i40e_vsi_vlan_pvid_info *info); + struct i40e_vsi_vlan_pvid_info *info); int i40e_vsi_config_vlan_stripping(struct i40e_vsi *vsi, bool on); +uint64_t i40e_config_hena(uint64_t flags); +uint64_t i40e_parse_hena(uint64_t flags); /* I40E_DEV_PRIVATE_TO */ #define I40E_DEV_PRIVATE_TO_PF(adapter) \ @@ -361,6 +395,10 @@ i40e_get_vsi_from_adapter(struct i40e_adapter *adapter) #define I40E_PF_TO_ADAPTER(pf) \ ((struct i40e_adapter *)pf->adapter) +/* I40E_VF_TO */ +#define I40E_VF_TO_HW(vf) \ + (&(((struct i40e_vf *)vf)->adapter->hw)) + static inline void i40e_init_adminq_parameter(struct i40e_hw *hw) { diff --git a/lib/librte_pmd_i40e/i40e_ethdev_vf.c b/lib/librte_pmd_i40e/i40e_ethdev_vf.c index 2726bfb..bef34cb 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev_vf.c +++ b/lib/librte_pmd_i40e/i40e_ethdev_vf.c @@ -125,6 +125,19 @@ static void i40evf_dev_allmulticast_disable(struct rte_eth_dev *dev); static int i40evf_get_link_status(struct rte_eth_dev *dev, struct rte_eth_link *link); static int i40evf_init_vlan(struct rte_eth_dev *dev); +static int i40evf_config_rss(struct i40e_vf *vf); +static int i40evf_dev_rss_reta_update(struct rte_eth_dev *dev, + struct rte_eth_rss_reta *reta_conf); +static int i40evf_dev_rss_reta_query(struct rte_eth_dev *dev, + struct rte_eth_rss_reta *reta_conf); +static int i40evf_dev_rss_hash_update(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf); +static int i40evf_dev_rss_hash_conf_get(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf); + +/* Default hash key buffer for RSS */ +static uint32_t rss_key_default[I40E_VFQF_HKEY_MAX_INDEX + 1]; + static struct eth_dev_ops i40evf_eth_dev_ops = { .dev_configure = i40evf_dev_configure, .dev_start = i40evf_dev_start, @@ -144,6 +157,10 @@ static struct eth_dev_ops i40evf_eth_dev_ops = { .rx_queue_release = i40e_dev_rx_queue_release, .tx_queue_setup = i40e_dev_tx_queue_setup, .tx_queue_release = i40e_dev_tx_queue_release, + .reta_update = i40evf_dev_rss_reta_update, + .reta_query = i40evf_dev_rss_reta_query, + .rss_hash_update = i40evf_dev_rss_hash_update, + .rss_hash_conf_get = i40evf_dev_rss_hash_conf_get, }; static int @@ -941,6 +958,8 @@ i40evf_init_vf(struct rte_eth_dev *dev) struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); + vf->adapter = I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); + vf->dev_data = dev->data; err = i40evf_set_mac_type(hw); if (err) { PMD_INIT_LOG(ERR, "set_mac_type failed: %d\n", err); @@ -1194,11 +1213,13 @@ i40evf_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) static int i40evf_rx_init(struct rte_eth_dev *dev) { + struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); uint16_t i, j; struct i40e_rx_queue **rxq = (struct i40e_rx_queue **)dev->data->rx_queues; struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); + i40evf_config_rss(vf); for (i = 0; i < dev->data->nb_rx_queues; i++) { if (i40e_alloc_rx_queue_mbufs(rxq[i]) != 0) { PMD_DRV_LOG(ERR, "alloc rx queues mbufs failed\n"); @@ -1445,3 +1466,190 @@ i40evf_dev_close(struct rte_eth_dev *dev) i40evf_reset_vf(hw); i40e_shutdown_adminq(hw); } + +static int +i40evf_hw_rss_hash_set(struct i40e_hw *hw, struct rte_eth_rss_conf *rss_conf) +{ + uint32_t *hash_key; + uint8_t hash_key_len; + uint64_t rss_hf, hena; + + hash_key = (uint32_t *)(rss_conf->rss_key); + hash_key_len = rss_conf->rss_key_len; + if (hash_key != NULL && hash_key_len >= + (I40E_VFQF_HKEY_MAX_INDEX + 1) * sizeof(uint32_t)) { + uint16_t i; + + for (i = 0; i <= I40E_VFQF_HKEY_MAX_INDEX; i++) + I40E_WRITE_REG(hw, I40E_VFQF_HKEY(i), hash_key[i]); + } + + rss_hf = rss_conf->rss_hf; + hena = (uint64_t)I40E_READ_REG(hw, I40E_VFQF_HENA(0)); + hena |= ((uint64_t)I40E_READ_REG(hw, I40E_VFQF_HENA(1))) << 32; + hena &= ~I40E_RSS_HENA_ALL; + hena |= i40e_config_hena(rss_hf); + I40E_WRITE_REG(hw, I40E_VFQF_HENA(0), (uint32_t)hena); + I40E_WRITE_REG(hw, I40E_VFQF_HENA(1), (uint32_t)(hena >> 32)); + I40EVF_WRITE_FLUSH(hw); + + return 0; +} + +static void +i40evf_disable_rss(struct i40e_vf *vf) +{ + struct i40e_hw *hw = I40E_VF_TO_HW(vf); + uint64_t hena; + + hena = (uint64_t)I40E_READ_REG(hw, I40E_VFQF_HENA(0)); + hena |= ((uint64_t)I40E_READ_REG(hw, I40E_VFQF_HENA(1))) << 32; + hena &= ~I40E_RSS_HENA_ALL; + I40E_WRITE_REG(hw, I40E_VFQF_HENA(0), (uint32_t)hena); + I40E_WRITE_REG(hw, I40E_VFQF_HENA(1), (uint32_t)(hena >> 32)); + I40EVF_WRITE_FLUSH(hw); +} + +static int +i40evf_config_rss(struct i40e_vf *vf) +{ + struct i40e_hw *hw = I40E_VF_TO_HW(vf); + struct rte_eth_rss_conf rss_conf; + uint32_t i, j, lut = 0, nb_q = (I40E_VFQF_HLUT_MAX_INDEX + 1) * 4; + + if (vf->dev_data->dev_conf.rxmode.mq_mode != ETH_MQ_RX_RSS) { + i40evf_disable_rss(vf); + PMD_DRV_LOG(DEBUG, "RSS not configured\n"); + return 0; + } + + /* Fill out the look up table */ + for (i = 0, j = 0; i < nb_q; i++, j++) { + if (j >= vf->num_queue_pairs) + j = 0; + lut = (lut << 8) | j; + if ((i & 3) == 3) + I40E_WRITE_REG(hw, I40E_VFQF_HLUT(i >> 2), lut); + } + + rss_conf = vf->dev_data->dev_conf.rx_adv_conf.rss_conf; + if ((rss_conf.rss_hf & I40E_RSS_OFFLOAD_ALL) == 0) { + i40evf_disable_rss(vf); + PMD_DRV_LOG(DEBUG, "No hash flag is set\n"); + return 0; + } + + if (rss_conf.rss_key == NULL || rss_conf.rss_key_len < nb_q) { + /* Calculate the default hash key */ + for (i = 0; i <= I40E_VFQF_HKEY_MAX_INDEX; i++) + rss_key_default[i] = (uint32_t)rte_rand(); + rss_conf.rss_key = (uint8_t *)rss_key_default; + rss_conf.rss_key_len = nb_q; + } + + return i40evf_hw_rss_hash_set(hw, &rss_conf); +} + +static int +i40evf_dev_rss_reta_update(struct rte_eth_dev *dev, + struct rte_eth_rss_reta *reta_conf) +{ + struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); + uint8_t i, j, mask, max = ETH_RSS_RETA_NUM_ENTRIES / 2; + uint32_t lut, l; + + for (i = 0; i < ETH_RSS_RETA_NUM_ENTRIES; i += 4) { + if (i < max) + mask = (uint8_t)((reta_conf->mask_lo >> i) & 0xF); + else + mask = (uint8_t)((reta_conf->mask_hi >> + (i - max)) & 0xF); + if (!mask) + continue; + if (mask == 0xf) + l = 0; + else + l = I40E_READ_REG(hw, I40E_VFQF_HLUT(i >> 2)); + + for (j = 0, lut = 0; j < 4; j++) { + if (mask & (0x1 << j)) + lut |= reta_conf->reta[i + j] << (8 * j); + else + lut |= l & (0xff << (8 * j)); + } + I40E_WRITE_REG(hw, I40E_VFQF_HLUT(i >> 2), lut); + } + + return 0; +} + +static int +i40evf_dev_rss_reta_query(struct rte_eth_dev *dev, + struct rte_eth_rss_reta *reta_conf) +{ + struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); + uint8_t i, j, mask, max = ETH_RSS_RETA_NUM_ENTRIES / 2; + uint32_t lut; + + for (i = 0; i < ETH_RSS_RETA_NUM_ENTRIES; i += 4) { + if (i < max) + mask = (uint8_t)((reta_conf->mask_lo >> i) & 0xF); + else + mask = (uint8_t)((reta_conf->mask_hi >> + (i - max)) & 0xF); + if (!mask) + continue; + lut = I40E_READ_REG(hw, I40E_VFQF_HLUT(i >> 2)); + for (j = 0; j < 4; j++) { + if (mask & (0x1 << j)) + reta_conf->reta[i + j] = + (uint8_t)((lut >> (8 * j)) & 0xFF); + } + } + + return 0; +} + +static int +i40evf_dev_rss_hash_update(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf) +{ + struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); + uint64_t rss_hf = rss_conf->rss_hf & I40E_RSS_OFFLOAD_ALL; + uint64_t hena; + + hena = (uint64_t)I40E_READ_REG(hw, I40E_VFQF_HENA(0)); + hena |= ((uint64_t)I40E_READ_REG(hw, I40E_VFQF_HENA(1))) << 32; + if (!(hena & I40E_RSS_HENA_ALL)) { /* RSS disabled */ + if (rss_hf != 0) /* Enable RSS */ + return -EINVAL; + return 0; + } + + /* RSS enabled */ + if (rss_hf == 0) /* Disable RSS */ + return -EINVAL; + + return i40evf_hw_rss_hash_set(hw, rss_conf); +} + +static int +i40evf_dev_rss_hash_conf_get(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf) +{ + struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); + uint32_t *hash_key = (uint32_t *)(rss_conf->rss_key); + uint64_t hena; + uint16_t i; + + if (hash_key) { + for (i = 0; i <= I40E_VFQF_HKEY_MAX_INDEX; i++) + hash_key[i] = I40E_READ_REG(hw, I40E_VFQF_HKEY(i)); + rss_conf->rss_key_len = i * sizeof(uint32_t); + } + hena = (uint64_t)I40E_READ_REG(hw, I40E_VFQF_HENA(0)); + hena |= ((uint64_t)I40E_READ_REG(hw, I40E_VFQF_HENA(1))) << 32; + rss_conf->rss_hf = i40e_parse_hena(hena); + + return 0; +} -- 1.8.1.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH 2/3] app/testpmd: enable RSS support for i40e 2014-07-18 2:45 [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Helin Zhang 2014-07-18 2:45 ` [dpdk-dev] [PATCH 1/3] i40evf: add " Helin Zhang @ 2014-07-18 2:45 ` Helin Zhang 2014-08-27 15:36 ` Thomas Monjalon 2014-07-18 2:45 ` [dpdk-dev] [PATCH 3/3] ethdev: improvements for some macro definition in head file Helin Zhang ` (2 subsequent siblings) 4 siblings, 1 reply; 8+ messages in thread From: Helin Zhang @ 2014-07-18 2:45 UTC (permalink / raw) To: dev i40e can support RSS no matter if SR-IOV is enabled or not, while ixgbe/igb can not support RSS if it is SR-IOV. Code changes are needed to support i40e RSS if SR-IOV is enabled. Signed-off-by: Helin Zhang <helin.zhang@intel.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com> Acked-by: Cunming Liang <cunming.liang@intel.com> --- app/test-pmd/testpmd.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index e8a4b45..2a2ec76 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1684,8 +1684,17 @@ init_port_config(void) port->dev_conf.rx_adv_conf.rss_conf.rss_hf = 0; } - /* In SR-IOV mode, RSS mode is not available */ - if (port->dcb_flag == 0 && port->dev_info.max_vfs == 0) { + /** + * For i40e, RSS is always available. + * For non-i40e, RSS is available in non-SRIOV mode, + * according to datasheet. + */ + if (port->dcb_flag == 0 && + ((port->dev_info.max_vfs == 0) || + (!strcmp(port->dev_info.driver_name, + "rte_i40e_pmd")) || + (!strcmp(port->dev_info.driver_name, + "rte_i40evf_pmd")))) { if( port->dev_conf.rx_adv_conf.rss_conf.rss_hf != 0) port->dev_conf.rxmode.mq_mode = ETH_MQ_RX_RSS; else -- 1.8.1.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH 2/3] app/testpmd: enable RSS support for i40e 2014-07-18 2:45 ` [dpdk-dev] [PATCH 2/3] app/testpmd: enable RSS support for i40e Helin Zhang @ 2014-08-27 15:36 ` Thomas Monjalon 0 siblings, 0 replies; 8+ messages in thread From: Thomas Monjalon @ 2014-08-27 15:36 UTC (permalink / raw) To: Helin Zhang; +Cc: dev 2014-07-18 10:45, Helin Zhang: > i40e can support RSS no matter if SR-IOV is enabled or not, while > ixgbe/igb can not support RSS if it is SR-IOV. Code changes are > needed to support i40e RSS if SR-IOV is enabled. [...] > - /* In SR-IOV mode, RSS mode is not available */ > - if (port->dcb_flag == 0 && port->dev_info.max_vfs == 0) { > + /** > + * For i40e, RSS is always available. > + * For non-i40e, RSS is available in non-SRIOV mode, > + * according to datasheet. > + */ > + if (port->dcb_flag == 0 && > + ((port->dev_info.max_vfs == 0) || > + (!strcmp(port->dev_info.driver_name, > + "rte_i40e_pmd")) || > + (!strcmp(port->dev_info.driver_name, > + "rte_i40evf_pmd")))) { This kind of knowledge should be coded in the drivers. Application writer doesn't have to read the datasheet to use the drivers. I think returning an error in the driver could be enough to handle it at application level. Thanks -- Thomas ^ permalink raw reply [flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH 3/3] ethdev: improvements for some macro definition in head file 2014-07-18 2:45 [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Helin Zhang 2014-07-18 2:45 ` [dpdk-dev] [PATCH 1/3] i40evf: add " Helin Zhang 2014-07-18 2:45 ` [dpdk-dev] [PATCH 2/3] app/testpmd: enable RSS support for i40e Helin Zhang @ 2014-07-18 2:45 ` Helin Zhang 2014-08-27 15:42 ` Thomas Monjalon 2014-07-31 1:55 ` [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Zhan, Zhaochen 2014-08-20 7:07 ` Zhang, Helin 4 siblings, 1 reply; 8+ messages in thread From: Helin Zhang @ 2014-07-18 2:45 UTC (permalink / raw) To: dev improvements for some macro definition about RSS packet classification types in rte_ethdev.h. Signed-off-by: Helin Zhang <helin.zhang@intel.com> Acked-by: Cunming Liang <cunming.liang@intel.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com> --- lib/librte_ether/rte_ethdev.h | 47 ++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 50df654..3a0b33b 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -362,30 +362,31 @@ struct rte_eth_rss_conf { #define ETH_RSS_L2_PAYLOAD_SHIFT 63 /* for 1G & 10G */ -#define ETH_RSS_IPV4 ((uint16_t)1 << ETH_RSS_IPV4_SHIFT) -#define ETH_RSS_IPV4_TCP ((uint16_t)1 << ETH_RSS_IPV4_TCP_SHIFT) -#define ETH_RSS_IPV6 ((uint16_t)1 << ETH_RSS_IPV6_SHIFT) -#define ETH_RSS_IPV6_EX ((uint16_t)1 << ETH_RSS_IPV6_EX_SHIFT) -#define ETH_RSS_IPV6_TCP ((uint16_t)1 << ETH_RSS_IPV6_TCP_SHIFT) -#define ETH_RSS_IPV6_TCP_EX ((uint16_t)1 << ETH_RSS_IPV6_TCP_EX_SHIFT) -#define ETH_RSS_IPV4_UDP ((uint16_t)1 << ETH_RSS_IPV4_UDP_SHIFT) -#define ETH_RSS_IPV6_UDP ((uint16_t)1 << ETH_RSS_IPV6_UDP_SHIFT) -#define ETH_RSS_IPV6_UDP_EX ((uint16_t)1 << ETH_RSS_IPV6_UDP_EX_SHIFT) +#define ETH_RSS_IPV4 (1 << ETH_RSS_IPV4_SHIFT) +#define ETH_RSS_IPV4_TCP (1 << ETH_RSS_IPV4_TCP_SHIFT) +#define ETH_RSS_IPV6 (1 << ETH_RSS_IPV6_SHIFT) +#define ETH_RSS_IPV6_EX (1 << ETH_RSS_IPV6_EX_SHIFT) +#define ETH_RSS_IPV6_TCP (1 << ETH_RSS_IPV6_TCP_SHIFT) +#define ETH_RSS_IPV6_TCP_EX (1 << ETH_RSS_IPV6_TCP_EX_SHIFT) +#define ETH_RSS_IPV4_UDP (1 << ETH_RSS_IPV4_UDP_SHIFT) +#define ETH_RSS_IPV6_UDP (1 << ETH_RSS_IPV6_UDP_SHIFT) +#define ETH_RSS_IPV6_UDP_EX (1 << ETH_RSS_IPV6_UDP_EX_SHIFT) /* for 40G only */ -#define ETH_RSS_NONF_IPV4_UDP ((uint64_t)1 << ETH_RSS_NONF_IPV4_UDP_SHIFT) -#define ETH_RSS_NONF_IPV4_TCP ((uint64_t)1 << ETH_RSS_NONF_IPV4_TCP_SHIFT) -#define ETH_RSS_NONF_IPV4_SCTP ((uint64_t)1 << ETH_RSS_NONF_IPV4_SCTP_SHIFT) -#define ETH_RSS_NONF_IPV4_OTHER ((uint64_t)1 << ETH_RSS_NONF_IPV4_OTHER_SHIFT) -#define ETH_RSS_FRAG_IPV4 ((uint64_t)1 << ETH_RSS_FRAG_IPV4_SHIFT) -#define ETH_RSS_NONF_IPV6_UDP ((uint64_t)1 << ETH_RSS_NONF_IPV6_UDP_SHIFT) -#define ETH_RSS_NONF_IPV6_TCP ((uint64_t)1 << ETH_RSS_NONF_IPV6_TCP_SHIFT) -#define ETH_RSS_NONF_IPV6_SCTP ((uint64_t)1 << ETH_RSS_NONF_IPV6_SCTP_SHIFT) -#define ETH_RSS_NONF_IPV6_OTHER ((uint64_t)1 << ETH_RSS_NONF_IPV6_OTHER_SHIFT) -#define ETH_RSS_FRAG_IPV6 ((uint64_t)1 << ETH_RSS_FRAG_IPV6_SHIFT) -#define ETH_RSS_FCOE_OX ((uint64_t)1 << ETH_RSS_FCOE_OX_SHIFT) /* not used */ -#define ETH_RSS_FCOE_RX ((uint64_t)1 << ETH_RSS_FCOE_RX_SHIFT) /* not used */ -#define ETH_RSS_FCOE_OTHER ((uint64_t)1 << ETH_RSS_FCOE_OTHER_SHIFT) /* not used */ -#define ETH_RSS_L2_PAYLOAD ((uint64_t)1 << ETH_RSS_L2_PAYLOAD_SHIFT) +#define ETH_RSS_NONF_IPV4_UDP (1ULL << ETH_RSS_NONF_IPV4_UDP_SHIFT) +#define ETH_RSS_NONF_IPV4_TCP (1ULL << ETH_RSS_NONF_IPV4_TCP_SHIFT) +#define ETH_RSS_NONF_IPV4_SCTP (1ULL << ETH_RSS_NONF_IPV4_SCTP_SHIFT) +#define ETH_RSS_NONF_IPV4_OTHER (1ULL << ETH_RSS_NONF_IPV4_OTHER_SHIFT) +#define ETH_RSS_FRAG_IPV4 (1ULL << ETH_RSS_FRAG_IPV4_SHIFT) +#define ETH_RSS_NONF_IPV6_UDP (1ULL << ETH_RSS_NONF_IPV6_UDP_SHIFT) +#define ETH_RSS_NONF_IPV6_TCP (1ULL << ETH_RSS_NONF_IPV6_TCP_SHIFT) +#define ETH_RSS_NONF_IPV6_SCTP (1ULL << ETH_RSS_NONF_IPV6_SCTP_SHIFT) +#define ETH_RSS_NONF_IPV6_OTHER (1ULL << ETH_RSS_NONF_IPV6_OTHER_SHIFT) +#define ETH_RSS_FRAG_IPV6 (1ULL << ETH_RSS_FRAG_IPV6_SHIFT) +/* FCOE relevant should not be used */ +#define ETH_RSS_FCOE_OX (1ULL << ETH_RSS_FCOE_OX_SHIFT) +#define ETH_RSS_FCOE_RX (1ULL << ETH_RSS_FCOE_RX_SHIFT) +#define ETH_RSS_FCOE_OTHER (1ULL << ETH_RSS_FCOE_OTHER_SHIFT) +#define ETH_RSS_L2_PAYLOAD (1ULL << ETH_RSS_L2_PAYLOAD_SHIFT) #define ETH_RSS_IP ( \ ETH_RSS_IPV4 | \ -- 1.8.1.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH 3/3] ethdev: improvements for some macro definition in head file 2014-07-18 2:45 ` [dpdk-dev] [PATCH 3/3] ethdev: improvements for some macro definition in head file Helin Zhang @ 2014-08-27 15:42 ` Thomas Monjalon 0 siblings, 0 replies; 8+ messages in thread From: Thomas Monjalon @ 2014-08-27 15:42 UTC (permalink / raw) To: Helin Zhang; +Cc: dev 2014-07-18 10:45, Helin Zhang: > improvements for some macro definition about RSS packet > classification types in rte_ethdev.h. [...] > -#define ETH_RSS_IPV4 ((uint16_t)1 << ETH_RSS_IPV4_SHIFT) [...] > +#define ETH_RSS_IPV4 (1 << ETH_RSS_IPV4_SHIFT) Please explain your change in the commit log. In general, the log should answer to these questions: what was the problem? when the problem was introduced? why it's better now? Thanks -- Thomas ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF 2014-07-18 2:45 [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Helin Zhang ` (2 preceding siblings ...) 2014-07-18 2:45 ` [dpdk-dev] [PATCH 3/3] ethdev: improvements for some macro definition in head file Helin Zhang @ 2014-07-31 1:55 ` Zhan, Zhaochen 2014-08-20 7:07 ` Zhang, Helin 4 siblings, 0 replies; 8+ messages in thread From: Zhan, Zhaochen @ 2014-07-31 1:55 UTC (permalink / raw) To: Zhang, Helin, dev > As RSS in i40e VF is supported by hardware, these patches enable > it in i40e PMD, and also enable its testing in testpmd. > > Helin Zhang (3): > i40evf: add RSS support in VF > app/testpmd: enable RSS support for i40e > ethdev: improvements for some macro definition in head file Tested-by: Zhaochen Zhan <zhaochen.zhan@intel.com> I have tested this patch on KVM virtual machine with Fortville NIC. Testpmd support RSS works well with rx_queue=4/16, the max_queue can be configured by CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_VF in the config file. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF 2014-07-18 2:45 [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Helin Zhang ` (3 preceding siblings ...) 2014-07-31 1:55 ` [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Zhan, Zhaochen @ 2014-08-20 7:07 ` Zhang, Helin 4 siblings, 0 replies; 8+ messages in thread From: Zhang, Helin @ 2014-08-20 7:07 UTC (permalink / raw) To: dev > -----Original Message----- > From: Zhang, Helin > Sent: Friday, July 18, 2014 10:45 AM > To: dev@dpdk.org > Cc: Zhang, Helin > Subject: [PATCH 0/3] add i40e RSS support in VF > > As RSS in i40e VF is supported by hardware, these patches enable it in i40e > PMD, and also enable its testing in testpmd. > > Helin Zhang (3): > i40evf: add RSS support in VF > app/testpmd: enable RSS support for i40e > ethdev: improvements for some macro definition in head file > > app/test-pmd/testpmd.c | 13 ++- > lib/librte_ether/rte_ethdev.h | 47 ++++---- > lib/librte_pmd_i40e/i40e_ethdev.c | 4 +- > lib/librte_pmd_i40e/i40e_ethdev.h | 40 ++++++- > lib/librte_pmd_i40e/i40e_ethdev_vf.c | 208 > +++++++++++++++++++++++++++++++++++ > 5 files changed, 284 insertions(+), 28 deletions(-) > > -- > 1.8.1.4 Hi guys Any comments for these patches? Any next steps planned for merging these patches? Regards, Helin ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-08-27 15:38 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-07-18 2:45 [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Helin Zhang 2014-07-18 2:45 ` [dpdk-dev] [PATCH 1/3] i40evf: add " Helin Zhang 2014-07-18 2:45 ` [dpdk-dev] [PATCH 2/3] app/testpmd: enable RSS support for i40e Helin Zhang 2014-08-27 15:36 ` Thomas Monjalon 2014-07-18 2:45 ` [dpdk-dev] [PATCH 3/3] ethdev: improvements for some macro definition in head file Helin Zhang 2014-08-27 15:42 ` Thomas Monjalon 2014-07-31 1:55 ` [dpdk-dev] [PATCH 0/3] add i40e RSS support in VF Zhan, Zhaochen 2014-08-20 7:07 ` Zhang, Helin
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).