[dpdk-dev] [PATCH v15 4/7] drivers/net: update Rx RSS hash offload capabilities
Andrew Rybchenko
arybchenko at solarflare.com
Sun Nov 3 13:06:33 CET 2019
On 11/1/19 8:49 PM, Liron Himi wrote:
> Hi,
>
> mvpp2 and mvneta PMDs are also support RSS hash.
> Please add them to the patch.
I've failed to find where mvpp2 and mvneta set PKT_RX_RSS_HASH.
> Regards,
> Liron
>
> -----Original Message-----
> From: dev <dev-bounces at dpdk.org> On Behalf Of pbhagavatula at marvell.com
> Sent: Tuesday, 29 October 2019 17:37
> To: ferruh.yigit at intel.com; arybchenko at solarflare.com; Jerin Jacob Kollanukkaran <jerinj at marvell.com>; Ajit Khaparde <ajit.khaparde at broadcom.com>; Somnath Kotur <somnath.kotur at broadcom.com>; Rahul Lakkireddy <rahul.lakkireddy at chelsio.com>; Hemant Agrawal <hemant.agrawal at nxp.com>; Sachin Saxena <sachin.saxena at nxp.com>; Wenzhuo Lu <wenzhuo.lu at intel.com>; John Daley <johndale at cisco.com>; Hyong Youb Kim <hyonkim at cisco.com>; Qi Zhang <qi.z.zhang at intel.com>; Xiao Wang <xiao.w.wang at intel.com>; Ziyang Xuan <xuanziyang2 at huawei.com>; Xiaoyun Wang <cloud.wangxiaoyun at huawei.com>; Guoyang Zhou <zhouguoyang at huawei.com>; Beilei Xing <beilei.xing at intel.com>; Jingjing Wu <jingjing.wu at intel.com>; Qiming Yang <qiming.yang at intel.com>; Konstantin Ananyev <konstantin.ananyev at intel.com>; Shijith Thotton <sthotton at marvell.com>; Srisivasubramanian Srinivasan <srinivasan at marvell.com>; Matan Azrad <matan at mellanox.com>; Shahaf Shuler <shahafs at mellanox.com>; Viacheslav Ovsiienko <viacheslavo at mellanox.com>; Stephen Hemminger <sthemmin at microsoft.com>; K. Y. Srinivasan <kys at microsoft.com>; Haiyang Zhang <haiyangz at microsoft.com>; Alejandro Lucero <alejandro.lucero at netronome.com>; Nithin Kumar Dabilpuram <ndabilpuram at marvell.com>; Kiran Kumar Kokkilagadda <kirankumark at marvell.com>; Rasesh Mody <rmody at marvell.com>; Shahed Shaikh <shshaikh at marvell.com>; Maciej Czekaj <mczekaj at marvell.com>; Yong Wang <yongwang at vmware.com>
> Cc: dev at dpdk.org; Pavan Nikhilesh Bhagavatula <pbhagavatula at marvell.com>
> Subject: [dpdk-dev] [PATCH v15 4/7] drivers/net: update Rx RSS hash offload capabilities
>
> From: Pavan Nikhilesh <pbhagavatula at marvell.com>
>
> Add DEV_RX_OFFLOAD_RSS_HASH flag for all PMDs that support RSS hash delivery.
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula at marvell.com>
> Reviewed-by: Andrew Rybchenko <arybchenko at solarflare.com>
> Reviewed-by: Hemant Agrawal <hemant.agrawal at nxp.com>
> Acked-by: Jerin Jacob <jerinj at marvell.com>
> Acked-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
> ---
> drivers/net/bnxt/bnxt_ethdev.c | 8 +++++++-
> drivers/net/cxgbe/cxgbe.h | 3 ++-
> drivers/net/cxgbe/cxgbe_ethdev.c | 5 +++++
> drivers/net/dpaa/dpaa_ethdev.c | 3 ++-
> drivers/net/dpaa2/dpaa2_ethdev.c | 1 +
> drivers/net/e1000/igb_ethdev.c | 6 ++++++
> drivers/net/e1000/igb_rxtx.c | 3 ++-
> drivers/net/enic/enic_ethdev.c | 5 +++++
> drivers/net/enic/enic_res.c | 3 ++-
> drivers/net/fm10k/fm10k_ethdev.c | 6 +++++-
> drivers/net/hinic/hinic_pmd_ethdev.c | 6 +++++-
> drivers/net/i40e/i40e_ethdev.c | 6 +++++-
> drivers/net/iavf/iavf_ethdev.c | 6 +++++-
> drivers/net/ice/ice_ethdev.c | 6 +++++-
> drivers/net/ixgbe/ixgbe_ethdev.c | 7 +++++++
> drivers/net/ixgbe/ixgbe_rxtx.c | 3 ++-
> drivers/net/liquidio/lio_ethdev.c | 7 ++++++-
> drivers/net/mlx4/mlx4.c | 3 +++
> drivers/net/mlx4/mlx4_rxq.c | 3 ++-
> drivers/net/mlx5/mlx5_ethdev.c | 4 ++++
> drivers/net/mlx5/mlx5_rxq.c | 3 ++-
> drivers/net/netvsc/hn_ethdev.c | 3 +++
> drivers/net/netvsc/hn_rndis.c | 3 ++-
> drivers/net/nfp/nfp_net.c | 6 +++++-
> drivers/net/octeontx2/otx2_ethdev.c | 3 ++- drivers/net/octeontx2/otx2_ethdev.h | 15 ++++++++-------
> drivers/net/qede/qede_ethdev.c | 6 +++++-
> drivers/net/sfc/sfc_ef10_essb_rx.c | 3 ++-
> drivers/net/sfc/sfc_ef10_rx.c | 3 ++-
> drivers/net/sfc/sfc_rx.c | 7 ++++++-
> drivers/net/thunderx/nicvf_ethdev.c | 3 +++ drivers/net/thunderx/nicvf_ethdev.h | 3 ++- drivers/net/vmxnet3/vmxnet3_ethdev.c | 6 +++++-
> 33 files changed, 128 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 7d9459f0a..01d48f47c 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -123,7 +123,8 @@ static const struct rte_pci_id bnxt_pci_id_map[] = {
> DEV_RX_OFFLOAD_KEEP_CRC | \
> DEV_RX_OFFLOAD_VLAN_EXTEND | \
> DEV_RX_OFFLOAD_TCP_LRO | \
> - DEV_RX_OFFLOAD_SCATTER)
> + DEV_RX_OFFLOAD_SCATTER | \
> + DEV_RX_OFFLOAD_RSS_HASH)
>
> static int bnxt_vlan_offload_set_op(struct rte_eth_dev *dev, int mask); static void bnxt_print_link_info(struct rte_eth_dev *eth_dev); @@ -689,6 +690,11 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
> bp->rx_cp_nr_rings = bp->rx_nr_rings;
> bp->tx_cp_nr_rings = bp->tx_nr_rings;
>
> + if (!(rx_offloads & DEV_RX_OFFLOAD_RSS_HASH)) {
> + rx_offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> + eth_dev->data->dev_conf.rxmode.offloads = rx_offloads;
> + }
> +
> if (rx_offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
> eth_dev->data->mtu =
> eth_dev->data->dev_conf.rxmode.max_rx_pkt_len - diff --git a/drivers/net/cxgbe/cxgbe.h b/drivers/net/cxgbe/cxgbe.h index ed1be3559..6c1f73ac4 100644
> --- a/drivers/net/cxgbe/cxgbe.h
> +++ b/drivers/net/cxgbe/cxgbe.h
> @@ -47,7 +47,8 @@
> DEV_RX_OFFLOAD_UDP_CKSUM | \
> DEV_RX_OFFLOAD_TCP_CKSUM | \
> DEV_RX_OFFLOAD_JUMBO_FRAME | \
> - DEV_RX_OFFLOAD_SCATTER)
> + DEV_RX_OFFLOAD_SCATTER | \
> + DEV_RX_OFFLOAD_RSS_HASH)
>
>
> /* Common PF and VF devargs */
> diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c
> index 615dda607..6df127087 100644
> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
> @@ -426,6 +426,11 @@ int cxgbe_dev_configure(struct rte_eth_dev *eth_dev)
>
> CXGBE_FUNC_TRACE();
>
> + if (!(eth_dev->data->dev_conf.rxmode.offloads &
> + DEV_RX_OFFLOAD_RSS_HASH))
> + eth_dev->data->dev_conf.rxmode.offloads |=
> + DEV_RX_OFFLOAD_RSS_HASH;
> +
> if (!(adapter->flags & FW_QUEUE_BOUND)) {
> err = cxgbe_setup_sge_fwevtq(adapter);
> if (err)
> diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index caf255d67..096da752d 100644
> --- a/drivers/net/dpaa/dpaa_ethdev.c
> +++ b/drivers/net/dpaa/dpaa_ethdev.c
> @@ -56,7 +56,8 @@ static uint64_t dev_rx_offloads_nodis =
> DEV_RX_OFFLOAD_IPV4_CKSUM |
> DEV_RX_OFFLOAD_UDP_CKSUM |
> DEV_RX_OFFLOAD_TCP_CKSUM |
> - DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM;
> + DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
> + DEV_RX_OFFLOAD_RSS_HASH;
>
> /* Supported Tx offloads */
> static uint64_t dev_tx_offloads_sup =
> diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
> index 03131b903..eea31f254 100644
> --- a/drivers/net/dpaa2/dpaa2_ethdev.c
> +++ b/drivers/net/dpaa2/dpaa2_ethdev.c
> @@ -45,6 +45,7 @@ static uint64_t dev_rx_offloads_sup =
>
> /* Rx offloads which cannot be disabled */ static uint64_t dev_rx_offloads_nodis =
> + DEV_RX_OFFLOAD_RSS_HASH |
> DEV_RX_OFFLOAD_SCATTER;
>
> /* Supported Tx offloads */
> diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index ce7c9e664..22665b51c 100644
> --- a/drivers/net/e1000/igb_ethdev.c
> +++ b/drivers/net/e1000/igb_ethdev.c
> @@ -1182,6 +1182,9 @@ eth_igb_configure(struct rte_eth_dev *dev)
>
> PMD_INIT_FUNC_TRACE();
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* multipe queue mode checking */
> ret = igb_check_mq_mode(dev);
> if (ret != 0) {
> @@ -3255,6 +3258,9 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
> PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
> dev->data->port_id);
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /*
> * VF has no ability to enable/disable HW CRC
> * Keep the persistent behavior the same as Host PF diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c index c5606de5d..684fa4ad8 100644
> --- a/drivers/net/e1000/igb_rxtx.c
> +++ b/drivers/net/e1000/igb_rxtx.c
> @@ -1646,7 +1646,8 @@ igb_get_rx_port_offloads_capa(struct rte_eth_dev *dev)
> DEV_RX_OFFLOAD_TCP_CKSUM |
> DEV_RX_OFFLOAD_JUMBO_FRAME |
> DEV_RX_OFFLOAD_KEEP_CRC |
> - DEV_RX_OFFLOAD_SCATTER;
> + DEV_RX_OFFLOAD_SCATTER |
> + DEV_RX_OFFLOAD_RSS_HASH;
>
> return rx_offload_capa;
> }
> diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 12c59a3c5..d2d1488d9 100644
> --- a/drivers/net/enic/enic_ethdev.c
> +++ b/drivers/net/enic/enic_ethdev.c
> @@ -405,6 +405,11 @@ static int enicpmd_dev_configure(struct rte_eth_dev *eth_dev)
> return ret;
> }
>
> + if (!(eth_dev->data->dev_conf.rxmode.offloads &
> + DEV_RX_OFFLOAD_RSS_HASH))
> + eth_dev->data->dev_conf.rxmode.offloads |=
> + DEV_RX_OFFLOAD_RSS_HASH;
> +
> enic->mc_count = 0;
> enic->hw_ip_checksum = !!(eth_dev->data->dev_conf.rxmode.offloads &
> DEV_RX_OFFLOAD_CHECKSUM);
> diff --git a/drivers/net/enic/enic_res.c b/drivers/net/enic/enic_res.c index f403a0b66..7c3c270a2 100644
> --- a/drivers/net/enic/enic_res.c
> +++ b/drivers/net/enic/enic_res.c
> @@ -205,7 +205,8 @@ int enic_get_vnic_config(struct enic *enic)
> DEV_RX_OFFLOAD_VLAN_STRIP |
> DEV_RX_OFFLOAD_IPV4_CKSUM |
> DEV_RX_OFFLOAD_UDP_CKSUM |
> - DEV_RX_OFFLOAD_TCP_CKSUM;
> + DEV_RX_OFFLOAD_TCP_CKSUM |
> + DEV_RX_OFFLOAD_RSS_HASH;
> enic->tx_offload_mask =
> PKT_TX_IPV6 |
> PKT_TX_IPV4 |
> diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
> index 99c4366e4..2e834130d 100644
> --- a/drivers/net/fm10k/fm10k_ethdev.c
> +++ b/drivers/net/fm10k/fm10k_ethdev.c
> @@ -461,6 +461,9 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
>
> PMD_INIT_FUNC_TRACE();
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* multipe queue mode checking */
> ret = fm10k_check_mq_mode(dev);
> if (ret != 0) {
> @@ -1805,7 +1808,8 @@ static uint64_t fm10k_get_rx_port_offloads_capa(struct rte_eth_dev *dev)
> DEV_RX_OFFLOAD_UDP_CKSUM |
> DEV_RX_OFFLOAD_TCP_CKSUM |
> DEV_RX_OFFLOAD_JUMBO_FRAME |
> - DEV_RX_OFFLOAD_HEADER_SPLIT);
> + DEV_RX_OFFLOAD_HEADER_SPLIT |
> + DEV_RX_OFFLOAD_RSS_HASH);
> }
>
> static int
> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
> index 9f37a404b..6673777e9 100644
> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
> @@ -318,6 +318,9 @@ static int hinic_dev_configure(struct rte_eth_dev *dev)
> return -EINVAL;
> }
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* mtu size is 256~9600 */
> if (dev->data->dev_conf.rxmode.max_rx_pkt_len < HINIC_MIN_FRAME_SIZE ||
> dev->data->dev_conf.rxmode.max_rx_pkt_len > @@ -740,7 +743,8 @@ hinic_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
> DEV_RX_OFFLOAD_VLAN_FILTER |
> DEV_RX_OFFLOAD_SCATTER |
> DEV_RX_OFFLOAD_JUMBO_FRAME |
> - DEV_RX_OFFLOAD_TCP_LRO;
> + DEV_RX_OFFLOAD_TCP_LRO |
> + DEV_RX_OFFLOAD_RSS_HASH;
>
> info->tx_queue_offload_capa = 0;
> info->tx_offload_capa = DEV_TX_OFFLOAD_VLAN_INSERT | diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 77a46832c..78fea04f8 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -1812,6 +1812,9 @@ i40e_dev_configure(struct rte_eth_dev *dev)
> ad->tx_simple_allowed = true;
> ad->tx_vec_allowed = true;
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* Only legacy filter API needs the following fdir config. So when the
> * legacy filter API is deprecated, the following codes should also be
> * removed.
> @@ -3613,7 +3616,8 @@ i40e_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
> DEV_RX_OFFLOAD_SCATTER |
> DEV_RX_OFFLOAD_VLAN_EXTEND |
> DEV_RX_OFFLOAD_VLAN_FILTER |
> - DEV_RX_OFFLOAD_JUMBO_FRAME;
> + DEV_RX_OFFLOAD_JUMBO_FRAME |
> + DEV_RX_OFFLOAD_RSS_HASH;
>
> dev_info->tx_queue_offload_capa = DEV_TX_OFFLOAD_MBUF_FAST_FREE;
> dev_info->tx_offload_capa =
> diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index eebc49ade..172c3f6ac 100644
> --- a/drivers/net/iavf/iavf_ethdev.c
> +++ b/drivers/net/iavf/iavf_ethdev.c
> @@ -147,6 +147,9 @@ iavf_dev_configure(struct rte_eth_dev *dev)
> ad->rx_vec_allowed = true;
> ad->tx_vec_allowed = true;
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* Vlan stripping setting */
> if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN) {
> if (dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_VLAN_STRIP) @@ -522,7 +525,8 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
> DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
> DEV_RX_OFFLOAD_SCATTER |
> DEV_RX_OFFLOAD_JUMBO_FRAME |
> - DEV_RX_OFFLOAD_VLAN_FILTER;
> + DEV_RX_OFFLOAD_VLAN_FILTER |
> + DEV_RX_OFFLOAD_RSS_HASH;
> dev_info->tx_offload_capa =
> DEV_TX_OFFLOAD_VLAN_INSERT |
> DEV_TX_OFFLOAD_QINQ_INSERT |
> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index d74675842..8ff96a96e 100644
> --- a/drivers/net/ice/ice_ethdev.c
> +++ b/drivers/net/ice/ice_ethdev.c
> @@ -2357,6 +2357,9 @@ ice_dev_configure(struct rte_eth_dev *dev)
> ad->rx_bulk_alloc_allowed = true;
> ad->tx_simple_allowed = true;
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> return 0;
> }
>
> @@ -2800,7 +2803,8 @@ ice_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
> DEV_RX_OFFLOAD_TCP_CKSUM |
> DEV_RX_OFFLOAD_QINQ_STRIP |
> DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
> - DEV_RX_OFFLOAD_VLAN_EXTEND;
> + DEV_RX_OFFLOAD_VLAN_EXTEND |
> + DEV_RX_OFFLOAD_RSS_HASH;
> dev_info->tx_offload_capa |=
> DEV_TX_OFFLOAD_QINQ_INSERT |
> DEV_TX_OFFLOAD_IPV4_CKSUM |
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> index dbce7a80e..a299c1c74 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -2402,6 +2402,10 @@ ixgbe_dev_configure(struct rte_eth_dev *dev)
> int ret;
>
> PMD_INIT_FUNC_TRACE();
> +
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* multipe queue mode checking */
> ret = ixgbe_check_mq_mode(dev);
> if (ret != 0) {
> @@ -5140,6 +5144,9 @@ ixgbevf_dev_configure(struct rte_eth_dev *dev)
> PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
> dev->data->port_id);
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /*
> * VF has no ability to enable/disable HW CRC
> * Keep the persistent behavior the same as Host PF diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c index edcfa60ce..fa572d184 100644
> --- a/drivers/net/ixgbe/ixgbe_rxtx.c
> +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
> @@ -2872,7 +2872,8 @@ ixgbe_get_rx_port_offloads(struct rte_eth_dev *dev)
> DEV_RX_OFFLOAD_KEEP_CRC |
> DEV_RX_OFFLOAD_JUMBO_FRAME |
> DEV_RX_OFFLOAD_VLAN_FILTER |
> - DEV_RX_OFFLOAD_SCATTER;
> + DEV_RX_OFFLOAD_SCATTER |
> + DEV_RX_OFFLOAD_RSS_HASH;
>
> if (hw->mac.type == ixgbe_mac_82598EB)
> offloads |= DEV_RX_OFFLOAD_VLAN_STRIP; diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c
> index ec01343f1..d873b6ff4 100644
> --- a/drivers/net/liquidio/lio_ethdev.c
> +++ b/drivers/net/liquidio/lio_ethdev.c
> @@ -412,7 +412,8 @@ lio_dev_info_get(struct rte_eth_dev *eth_dev,
> devinfo->rx_offload_capa = (DEV_RX_OFFLOAD_IPV4_CKSUM |
> DEV_RX_OFFLOAD_UDP_CKSUM |
> DEV_RX_OFFLOAD_TCP_CKSUM |
> - DEV_RX_OFFLOAD_VLAN_STRIP);
> + DEV_RX_OFFLOAD_VLAN_STRIP |
> + DEV_RX_OFFLOAD_RSS_HASH);
> devinfo->tx_offload_capa = (DEV_TX_OFFLOAD_IPV4_CKSUM |
> DEV_TX_OFFLOAD_UDP_CKSUM |
> DEV_TX_OFFLOAD_TCP_CKSUM |
> @@ -1735,6 +1736,10 @@ lio_dev_configure(struct rte_eth_dev *eth_dev)
>
> PMD_INIT_FUNC_TRACE();
>
> + if (!(eth_dev->data->dev_conf.rxmode.offloads &
> + DEV_RX_OFFLOAD_RSS_HASH))
> + eth_dev->data->dev_conf.rxmode.offloads |=
> + DEV_RX_OFFLOAD_RSS_HASH;
> /* Inform firmware about change in number of queues to use.
> * Disable IO queues and reset registers for re-configuration.
> */
> diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 931e4f4fe..6df2f6f90 100644
> --- a/drivers/net/mlx4/mlx4.c
> +++ b/drivers/net/mlx4/mlx4.c
> @@ -248,6 +248,9 @@ mlx4_dev_configure(struct rte_eth_dev *dev)
> struct rte_flow_error error;
> int ret;
>
> + if (!(dev->data->dev_conf.rxmode.offload & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offload |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* Prepare internal flow rules. */
> ret = mlx4_flow_sync(priv, &error);
> if (ret) {
> diff --git a/drivers/net/mlx4/mlx4_rxq.c b/drivers/net/mlx4/mlx4_rxq.c index f45c1ff85..4a6fbd922 100644
> --- a/drivers/net/mlx4/mlx4_rxq.c
> +++ b/drivers/net/mlx4/mlx4_rxq.c
> @@ -685,7 +685,8 @@ mlx4_get_rx_queue_offloads(struct mlx4_priv *priv) {
> uint64_t offloads = DEV_RX_OFFLOAD_SCATTER |
> DEV_RX_OFFLOAD_KEEP_CRC |
> - DEV_RX_OFFLOAD_JUMBO_FRAME;
> + DEV_RX_OFFLOAD_JUMBO_FRAME |
> + DEV_RX_OFFLOAD_RSS_HASH;
>
> if (priv->hw_csum)
> offloads |= DEV_RX_OFFLOAD_CHECKSUM;
> diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index 2278b24c0..e87d52ea1 100644
> --- a/drivers/net/mlx5/mlx5_ethdev.c
> +++ b/drivers/net/mlx5/mlx5_ethdev.c
> @@ -407,6 +407,10 @@ mlx5_dev_configure(struct rte_eth_dev *dev)
> rte_errno = ENOMEM;
> return -rte_errno;
> }
> +
> + if (!(dev->data->dev_conf.rxmode.offload & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offload |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> memcpy(priv->rss_conf.rss_key,
> use_app_rss_key ?
> dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key :
> diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index f0ab8438d..c8e1fc4b6 100644
> --- a/drivers/net/mlx5/mlx5_rxq.c
> +++ b/drivers/net/mlx5/mlx5_rxq.c
> @@ -368,7 +368,8 @@ mlx5_get_rx_queue_offloads(struct rte_eth_dev *dev)
> struct mlx5_dev_config *config = &priv->config;
> uint64_t offloads = (DEV_RX_OFFLOAD_SCATTER |
> DEV_RX_OFFLOAD_TIMESTAMP |
> - DEV_RX_OFFLOAD_JUMBO_FRAME);
> + DEV_RX_OFFLOAD_JUMBO_FRAME |
> + DEV_RX_OFFLOAD_RSS_HASH);
>
> if (config->hw_fcs_strip)
> offloads |= DEV_RX_OFFLOAD_KEEP_CRC;
> diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index eed8dece9..5c027e1a4 100644
> --- a/drivers/net/netvsc/hn_ethdev.c
> +++ b/drivers/net/netvsc/hn_ethdev.c
> @@ -532,6 +532,9 @@ static int hn_dev_configure(struct rte_eth_dev *dev)
>
> PMD_INIT_FUNC_TRACE();
>
> + if (!(rxmode->offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev_conf->rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> unsupported = txmode->offloads & ~HN_TX_OFFLOAD_CAPS;
> if (unsupported) {
> PMD_DRV_LOG(NOTICE,
> diff --git a/drivers/net/netvsc/hn_rndis.c b/drivers/net/netvsc/hn_rndis.c index a67bc7a79..2b4714042 100644
> --- a/drivers/net/netvsc/hn_rndis.c
> +++ b/drivers/net/netvsc/hn_rndis.c
> @@ -897,7 +897,8 @@ int hn_rndis_get_offload(struct hn_data *hv,
> == HN_NDIS_LSOV2_CAP_IP6)
> dev_info->tx_offload_capa |= DEV_TX_OFFLOAD_TCP_TSO;
>
> - dev_info->rx_offload_capa = DEV_RX_OFFLOAD_VLAN_STRIP;
> + dev_info->rx_offload_capa = DEV_RX_OFFLOAD_VLAN_STRIP |
> + DEV_RX_OFFLOAD_RSS_HASH;
>
> if (hwcaps.ndis_csum.ndis_ip4_rxcsum & NDIS_RXCSUM_CAP_IP4)
> dev_info->rx_offload_capa |= DEV_RX_OFFLOAD_IPV4_CKSUM; diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index 22a8b2d19..e288a7f7e 100644
> --- a/drivers/net/nfp/nfp_net.c
> +++ b/drivers/net/nfp/nfp_net.c
> @@ -407,6 +407,9 @@ nfp_net_configure(struct rte_eth_dev *dev)
> rxmode = &dev_conf->rxmode;
> txmode = &dev_conf->txmode;
>
> + if (!(rxmode->offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + rxmode->offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* Checking TX mode */
> if (txmode->mq_mode) {
> PMD_INIT_LOG(INFO, "TX mq_mode DCB and VMDq not supported"); @@ -1236,7 +1239,8 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
> DEV_RX_OFFLOAD_UDP_CKSUM |
> DEV_RX_OFFLOAD_TCP_CKSUM;
>
> - dev_info->rx_offload_capa |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> + dev_info->rx_offload_capa |= DEV_RX_OFFLOAD_JUMBO_FRAME |
> + DEV_RX_OFFLOAD_RSS_HASH;
>
> if (hw->cap & NFP_NET_CFG_CTRL_TXVLAN)
> dev_info->tx_offload_capa = DEV_TX_OFFLOAD_VLAN_INSERT; diff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c
> index 62291c698..d6e8ae745 100644
> --- a/drivers/net/octeontx2/otx2_ethdev.c
> +++ b/drivers/net/octeontx2/otx2_ethdev.c
> @@ -575,7 +575,8 @@ nix_rx_offload_flags(struct rte_eth_dev *eth_dev)
> struct rte_eth_rxmode *rxmode = &conf->rxmode;
> uint16_t flags = 0;
>
> - if (rxmode->mq_mode == ETH_MQ_RX_RSS)
> + if (rxmode->mq_mode == ETH_MQ_RX_RSS &&
> + (dev->rx_offloads & DEV_RX_OFFLOAD_RSS_HASH))
> flags |= NIX_RX_OFFLOAD_RSS_F;
>
> if (dev->rx_offloads & (DEV_RX_OFFLOAD_TCP_CKSUM | diff --git a/drivers/net/octeontx2/otx2_ethdev.h b/drivers/net/octeontx2/otx2_ethdev.h
> index 4d9ed4870..d581240fe 100644
> --- a/drivers/net/octeontx2/otx2_ethdev.h
> +++ b/drivers/net/octeontx2/otx2_ethdev.h
> @@ -122,8 +122,8 @@
> DEV_TX_OFFLOAD_MT_LOCKFREE | \
> DEV_TX_OFFLOAD_VLAN_INSERT | \
> DEV_TX_OFFLOAD_QINQ_INSERT | \
> - DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | \
> - DEV_TX_OFFLOAD_OUTER_UDP_CKSUM | \
> + DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | \
> + DEV_TX_OFFLOAD_OUTER_UDP_CKSUM | \
> DEV_TX_OFFLOAD_TCP_CKSUM | \
> DEV_TX_OFFLOAD_UDP_CKSUM | \
> DEV_TX_OFFLOAD_SCTP_CKSUM | \
> @@ -140,11 +140,12 @@
> DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM | \
> DEV_RX_OFFLOAD_SCATTER | \
> DEV_RX_OFFLOAD_JUMBO_FRAME PKT_RX_RSS_HASH| \
> - DEV_RX_OFFLOAD_OUTER_UDP_CKSUM | \
> - DEV_RX_OFFLOAD_VLAN_STRIP | \
> - DEV_RX_OFFLOAD_VLAN_FILTER | \
> - DEV_RX_OFFLOAD_QINQ_STRIP | \
> - DEV_RX_OFFLOAD_TIMESTAMP)
> + DEV_RX_OFFLOAD_OUTER_UDP_CKSUM | \
> + DEV_RX_OFFLOAD_VLAN_STRIP | \
> + DEV_RX_OFFLOAD_VLAN_FILTER | \
> + DEV_RX_OFFLOAD_QINQ_STRIP | \
> + DEV_RX_OFFLOAD_TIMESTAMP | \
> + DEV_RX_OFFLOAD_RSS_HASH)
>
> #define NIX_DEFAULT_RSS_CTX_GROUP 0
> #define NIX_DEFAULT_RSS_MCAM_IDX -1
> diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 53fdfde9a..8cdf04eaf 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
> @@ -1182,6 +1182,9 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
>
> PMD_INIT_FUNC_TRACE(edev);
>
> + if (!(rxmode->offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + rxmode->offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> /* We need to have min 1 RX queue.There is no min check in
> * rte_eth_dev_configure(), so we are checking it here.
> */
> @@ -1302,7 +1305,8 @@ qede_dev_info_getPKT_RX_RSS_HASH(struct rte_eth_dev *eth_dev,
> DEV_RX_OFFLOAD_SCATTER |
> DEV_RX_OFFLOAD_JUMBO_FRAME |
> DEV_RX_OFFLOAD_VLAN_FILTER |
> - DEV_RX_OFFLOAD_VLAN_STRIP);
> + DEV_RX_OFFLOAD_VLAN_STRIP |
> + DEV_RX_OFFLOAD_RSS_HASH);
> dev_info->rx_queue_offload_capa = 0;
>
> /* TX offloads are on a per-packet basis, so it is applicable diff --git a/drivers/net/sfc/sfc_ef10_essb_rx.c b/drivers/net/sfc/sfc_ef10_essb_rx.c
> index 63da807ea..d9d2ce6bd 100644
> --- a/drivers/net/sfc/sfc_ef10_essb_rx.c
> +++ b/drivers/net/sfc/sfc_ef10_essb_rx.c
> @@ -715,7 +715,8 @@ struct sfc_dp_rx sfc_ef10_essb_rx = {
> },
> .features = SFC_DP_RX_FEAT_FLOW_FLAG |
> SFC_DP_RX_FEAT_FLOW_MARK,
> - .dev_offload_capa = DEV_RX_OFFLOAD_CHECKSUM,
> + .dev_offload_capa = DEV_RX_OFFLOAD_CHECKSUM |
> + DEV_RX_OFFLOAD_RSS_HASH,
> .queue_offload_capa = 0,
> .get_dev_info = sfc_ef10_essb_rx_get_dev_info,
> .pool_ops_supported = sfc_ef10_essb_rx_pool_ops_supported,
> diff --git a/drivers/net/sfc/sfc_ef10_rx.c b/drivers/net/sfc/sfc_ef10_rx.c index f2fc6e70a..9e527b7fb 100644
> --- a/drivers/net/sfc/sfc_ef10_rx.c
> +++ b/drivers/net/sfc/sfc_ef10_rx.c
> @@ -796,7 +796,8 @@ struct sfc_dp_rx sfc_ef10_rx = {
> .features = SFC_DP_RX_FEAT_MULTI_PROCESS |
> SFC_DP_RX_FEAT_INTR,
> .dev_offload_capa = DEV_RX_OFFLOAD_CHECKSUM |
> - DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM,
> + DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
> + DEV_RX_OFFLOAD_RSS_HASH,
> .queue_offload_capa = DEV_RX_OFFLOAD_SCATTER,
> .get_dev_info = sfc_ef10_rx_get_dev_info,
> .qsize_up_rings = sfc_ef10_rx_qsize_up_rings,
> diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index e6809bb64..10fa1e5ff 100644
> --- a/drivers/net/sfc/sfc_rx.c
> +++ b/drivers/net/sfc/sfc_rx.c
> @@ -617,7 +617,8 @@ struct sfc_dp_rx sfc_efx_rx = {
> .hw_fw_caps = 0,
> },
> .features = SFC_DP_RX_FEAT_INTR,
> - .dev_offload_capa = DEV_RX_OFFLOAD_CHECKSUM,
> + .dev_offload_capa = DEV_RX_OFFLOAD_CHECKSUM |
> + DEV_RX_OFFLOAD_RSS_HASH,
> .queue_offload_capa = DEV_RX_OFFLOAD_SCATTER,
> .qsize_up_rings = sfc_efx_rx_qsize_up_rings,
> .qcreate = sfc_efx_rx_qcreate,
> @@ -1556,6 +1557,10 @@ sfc_rx_check_mode(struct sfc_adapter *sa, struct rte_eth_rxmode *rxmode)
> rxmode->offloads |= DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM;
> }
>
> + if ((offloads_supported & DEV_RX_OFFLOAD_RSS_HASH) &&
> + (~rxmode->offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + rxmode->offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> return rc;
> }
>
> diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c
> index b93d45712..28ee3e46d 100644
> --- a/drivers/net/thunderx/nicvf_ethdev.c
> +++ b/drivers/net/thunderx/nicvf_ethdev.c
> @@ -1920,6 +1920,9 @@ nicvf_dev_configure(struct rte_eth_dev *dev)
>
> PMD_INIT_FUNC_TRACE();
>
> + if (!(rxmode->offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + rxmode->offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> if (!rte_eal_has_hugepages()) {
> PMD_INIT_LOG(INFO, "Huge page is not configured");
> return -EINVAL;
> diff --git a/drivers/net/thunderx/nicvf_ethdev.h b/drivers/net/thunderx/nicvf_ethdev.h
> index c0bfbf848..391411799 100644
> --- a/drivers/net/thunderx/nicvf_ethdev.h
> +++ b/drivers/net/thunderx/nicvf_ethdev.h
> @@ -41,7 +41,8 @@
> DEV_RX_OFFLOAD_CHECKSUM | \
> DEV_RX_OFFLOAD_VLAN_STRIP | \
> DEV_RX_OFFLOAD_JUMBO_FRAME | \
> - DEV_RX_OFFLOAD_SCATTER)
> + DEV_RX_OFFLOAD_SCATTER | \
> + DEV_RX_OFFLOAD_RSS_HASH)
>
> #define NICVF_DEFAULT_RX_FREE_THRESH 224
> #define NICVF_DEFAULT_TX_FREE_THRESH 224
> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> index d1faeaa81..5ef6ad43c 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> @@ -56,7 +56,8 @@
> DEV_RX_OFFLOAD_UDP_CKSUM | \
> DEV_RX_OFFLOAD_TCP_CKSUM | \
> DEV_RX_OFFLOAD_TCP_LRO | \
> - DEV_RX_OFFLOAD_JUMBO_FRAME)
> + DEV_RX_OFFLOAD_JUMBO_FRAME | \
> + DEV_RX_OFFLOAD_RSS_HASH)
>
> static int eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev); static int eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev); @@ -407,6 +408,9 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
>
> PMD_INIT_FUNC_TRACE();
>
> + if (!(dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH))
> + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
> +
> if (dev->data->nb_tx_queues > VMXNET3_MAX_TX_QUEUES ||
> dev->data->nb_rx_queues > VMXNET3_MAX_RX_QUEUES) {
> PMD_INIT_LOG(ERR, "ERROR: Number of queues not supported");
> --
> 2.17.1
>
More information about the dev
mailing list