]> git.droids-corp.org - dpdk.git/commitdiff
drivers/net: update Rx RSS hash offload capabilities
authorPavan Nikhilesh <pbhagavatula@marvell.com>
Mon, 11 Nov 2019 13:19:08 +0000 (18:49 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 11 Nov 2019 15:15:37 +0000 (16:15 +0100)
Add DEV_RX_OFFLOAD_RSS_HASH flag for all PMDs that support RSS hash
delivery.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
33 files changed:
drivers/net/bnxt/bnxt_ethdev.c
drivers/net/cxgbe/cxgbe.h
drivers/net/cxgbe/cxgbe_ethdev.c
drivers/net/dpaa/dpaa_ethdev.c
drivers/net/dpaa2/dpaa2_ethdev.c
drivers/net/e1000/igb_ethdev.c
drivers/net/e1000/igb_rxtx.c
drivers/net/enic/enic_ethdev.c
drivers/net/enic/enic_res.c
drivers/net/fm10k/fm10k_ethdev.c
drivers/net/hinic/hinic_pmd_ethdev.c
drivers/net/i40e/i40e_ethdev.c
drivers/net/iavf/iavf_ethdev.c
drivers/net/ice/ice_ethdev.c
drivers/net/ixgbe/ixgbe_ethdev.c
drivers/net/ixgbe/ixgbe_rxtx.c
drivers/net/liquidio/lio_ethdev.c
drivers/net/mlx4/mlx4.c
drivers/net/mlx4/mlx4_rxq.c
drivers/net/mlx5/mlx5_ethdev.c
drivers/net/mlx5/mlx5_rxq.c
drivers/net/netvsc/hn_ethdev.c
drivers/net/netvsc/hn_rndis.c
drivers/net/nfp/nfp_net.c
drivers/net/octeontx2/otx2_ethdev.c
drivers/net/octeontx2/otx2_ethdev.h
drivers/net/qede/qede_ethdev.c
drivers/net/sfc/sfc_ef10_essb_rx.c
drivers/net/sfc/sfc_ef10_rx.c
drivers/net/sfc/sfc_rx.c
drivers/net/thunderx/nicvf_ethdev.c
drivers/net/thunderx/nicvf_ethdev.h
drivers/net/vmxnet3/vmxnet3_ethdev.c

index 74388f2c853bd0ac507385af4e35cd406cfcbc80..e39b87365f176676c3bc8db019749da040ca6a60 100644 (file)
@@ -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);
@@ -673,6 +674,9 @@ 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;
 
+       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 -
index ed1be3559f2c828263592343b3e6fbbd5c0d2cb8..6c1f73ac4baa1d49e113024f40a8427d4461aab9 100644 (file)
@@ -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 */
index 615dda6076e2e832470f017006ad7cd6b293af30..3dc9351a13348552ba5ace4f852ede65154b5b88 100644 (file)
@@ -426,6 +426,8 @@ int cxgbe_dev_configure(struct rte_eth_dev *eth_dev)
 
        CXGBE_FUNC_TRACE();
 
+       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)
index 16b52b5e15f9dc151459128f3036761e3e7ed910..26805f17b78e72fc25bebdc2dc8402183d6c470e 100644 (file)
@@ -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 =
index 03131b903c2dd5718feb607c7aed627ee872ef0c..eea31f254632e3e2314b1cdfaf51b317da602515 100644 (file)
@@ -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 */
index 53e83d5ec282a69bef5bf7794990eac5e9d0b328..369a978adcae6b0e8acdcc77c799f5a849fd8b9f 100644 (file)
@@ -1182,6 +1182,8 @@ eth_igb_configure(struct rte_eth_dev *dev)
 
        PMD_INIT_FUNC_TRACE();
 
+       dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        /* multipe queue mode checking */
        ret  = igb_check_mq_mode(dev);
        if (ret != 0) {
@@ -3257,6 +3259,8 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
                     dev->data->port_id);
 
+       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
index c5606de5d7a040da942466de281fc31d8f60e3e3..684fa4ad892b9a628f172b2f97d24a29338c9b41 100644 (file)
@@ -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;
 }
index 8ad976d3c8bbbf33eba3e9217051cbc333544b68..683fed28b1b86a4f64d9d52fb6caefac07f3ded7 100644 (file)
@@ -405,6 +405,8 @@ static int enicpmd_dev_configure(struct rte_eth_dev *eth_dev)
                return ret;
        }
 
+       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);
index f403a0b661c0f7c3ef7b8bd88d5e299a931b3b0c..7c3c270a25c71d9bbacd8929e653840b2657f725 100644 (file)
@@ -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 |
index 99c4366e4f75cf378c11bdae3b1e2891311a993d..3114825220c85f0fe7d001fca7f55eb505ec3b3f 100644 (file)
@@ -461,6 +461,8 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
 
        PMD_INIT_FUNC_TRACE();
 
+       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 +1807,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
index 9f37a404becaa9fc809148e51aaa7299c5fb8e30..072fec339849f101ff8259888f16053b2f8e235a 100644 (file)
@@ -318,6 +318,8 @@ static int hinic_dev_configure(struct rte_eth_dev *dev)
                return -EINVAL;
        }
 
+       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 +742,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 |
index 5abf60e36a4c90e72f8b049de1f58513fa540539..27d2c0e6cad5098373328e252199f93a039124e1 100644 (file)
@@ -1812,6 +1812,8 @@ i40e_dev_configure(struct rte_eth_dev *dev)
        ad->tx_simple_allowed = true;
        ad->tx_vec_allowed = true;
 
+       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 +3615,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 =
index eebc49adeced0028fdf3c7917dbd8453df871a98..c23a8fc67505cf108b4cad43685b34365dd1d272 100644 (file)
@@ -147,6 +147,8 @@ iavf_dev_configure(struct rte_eth_dev *dev)
        ad->rx_vec_allowed = true;
        ad->tx_vec_allowed = true;
 
+       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 +524,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 |
index febcdfe2afe5a2d8011ff95cfca4c6a4e07786d4..b29cb45073e0c862542d0803ac13f881a0ff5300 100644 (file)
@@ -2439,6 +2439,8 @@ ice_dev_configure(struct rte_eth_dev *dev)
        ad->rx_bulk_alloc_allowed = true;
        ad->tx_simple_allowed = true;
 
+       dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        return 0;
 }
 
@@ -2891,7 +2893,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 |
index 30c0379d4145b93eed2ee86a27104f1ac91d8f9b..8c1caac18cc11cfeb9bd5f2f0b9d5c7064772b2b 100644 (file)
@@ -2402,6 +2402,9 @@ ixgbe_dev_configure(struct rte_eth_dev *dev)
        int ret;
 
        PMD_INIT_FUNC_TRACE();
+
+       dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        /* multipe queue mode checking */
        ret  = ixgbe_check_mq_mode(dev);
        if (ret != 0) {
@@ -5155,6 +5158,8 @@ ixgbevf_dev_configure(struct rte_eth_dev *dev)
        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
                     dev->data->port_id);
 
+       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
index edcfa60cec98500bd26ad630c98c3f0527ebbc05..fa572d184d9c6a8f51198608f08ab17d5350a5fd 100644 (file)
@@ -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;
index ec01343f18f08d2294fa771ac9c3221e021dbe9e..cdf979edbfb65cb4dfdda9f5b5b35cf6bbb82b0e 100644 (file)
@@ -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,8 @@ lio_dev_configure(struct rte_eth_dev *eth_dev)
 
        PMD_INIT_FUNC_TRACE();
 
+       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.
         */
index 931e4f4fec72dee016f3a4306f3f5cac946ac60f..9b5c5477da5c7efbc6c08c80e95072e384f279d0 100644 (file)
@@ -248,6 +248,8 @@ mlx4_dev_configure(struct rte_eth_dev *dev)
        struct rte_flow_error error;
        int ret;
 
+       dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        /* Prepare internal flow rules. */
        ret = mlx4_flow_sync(priv, &error);
        if (ret) {
index f45c1ff85c4d40638ae00d88cea65324c981c1aa..4a6fbd922c8515b74f10b551092d7d0c846e9929 100644 (file)
@@ -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;
index 2b7c867e5e59e2c7da0ded80abe025cf8a433583..1c37980a402bf051ccdb5a46469b2f29667529ec 100644 (file)
@@ -404,6 +404,9 @@ mlx5_dev_configure(struct rte_eth_dev *dev)
                rte_errno = ENOMEM;
                return -rte_errno;
        }
+
+       dev->data->dev_conf.rxmode.offloads |= 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 :
index 24d0eaac9ea760535e477b210b1837c4a76fb391..fd1b2d87386b8b60f21f8a1f84951b3520e56674 100644 (file)
@@ -372,7 +372,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;
index eed8dece93f9908d9517b62c51a975e1ceb490ad..6589355090d7dd94fd3ace9bc0b5242e3ce9f132 100644 (file)
@@ -532,6 +532,8 @@ static int hn_dev_configure(struct rte_eth_dev *dev)
 
        PMD_INIT_FUNC_TRACE();
 
+       dev_conf->rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        unsupported = txmode->offloads & ~HN_TX_OFFLOAD_CAPS;
        if (unsupported) {
                PMD_DRV_LOG(NOTICE,
index a67bc7a79074940710008210da84cc4b887c743b..2b4714042e04b5aabe628ccc9544c9114fd3d7e5 100644 (file)
@@ -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;
index 22a8b2d19e8b4f499b9f1505335b0635dbba1853..7941248c0137abc7d1eae42cdd75fcbb1522c3c2 100644 (file)
@@ -407,6 +407,8 @@ nfp_net_configure(struct rte_eth_dev *dev)
        rxmode = &dev_conf->rxmode;
        txmode = &dev_conf->txmode;
 
+       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 +1238,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;
index aab34dbcfbc5ded2565b1fa9214a25d9671e94e4..be6ff71b3de855aa563ace4ef3f76b175766e067 100644 (file)
@@ -599,7 +599,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 |
index b49e309fd04272ad9fdf67cc6e0dd823d5da7ae2..ba66dbb74cb40d7b32624916f827b1d062239155 100644 (file)
        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       | \
        DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM | \
        DEV_RX_OFFLOAD_SCATTER          | \
        DEV_RX_OFFLOAD_JUMBO_FRAME      | \
-       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
index 575982fd08b9ffac12a0b1a211f3b67032c9f580..853748afedce36d4e1ebd795b9e355fbd4fe1a7a 100644 (file)
@@ -1186,6 +1186,8 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
 
        PMD_INIT_FUNC_TRACE(edev);
 
+       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.
         */
@@ -1306,7 +1308,8 @@ qede_dev_info_get(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
index 63da807eaafba80f925dfd8d7692caf8cdb5a5b0..d9d2ce6bd68fc7e398ac740373bf8aa68dff7072 100644 (file)
@@ -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,
index f2fc6e70a18ebe48e08172895a2e23c0e74f7b00..9e527b7fb519ffcdb4bf834d37d7b5ff4ca5142e 100644 (file)
@@ -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,
index e6809bb64e7da94709dbf8ed64e8cab611d5ba7e..10fa1e5ff3163073216af025e818eb9e11e1d80d 100644 (file)
@@ -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;
 }
 
index b93d45712e72990c990e7b50abf84b15b99d7893..062eec3f25ced2a35853b07062cbd27c26414454 100644 (file)
@@ -1920,6 +1920,8 @@ nicvf_dev_configure(struct rte_eth_dev *dev)
 
        PMD_INIT_FUNC_TRACE();
 
+       rxmode->offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        if (!rte_eal_has_hugepages()) {
                PMD_INIT_LOG(INFO, "Huge page is not configured");
                return -EINVAL;
index c0bfbf84890e97dc5afb0a11323b624e9fd98288..39141179970284f423cf9795b197766f6855b212 100644 (file)
@@ -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
index d1faeaa81ba1f6992f254b408f0bc317a2282c70..53fbd2bd036924439bd71f4558f41a9278122cb2 100644 (file)
@@ -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,8 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
 
        PMD_INIT_FUNC_TRACE();
 
+       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");