]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
i40e: use configured RSS key and lookup table in i40e_vsi_config_rss
authorJacob Keller <jacob.e.keller@intel.com>
Tue, 19 Jul 2016 23:23:31 +0000 (16:23 -0700)
committerDhaval Giani <dhaval.giani@oracle.com>
Wed, 8 Mar 2017 00:31:37 +0000 (19:31 -0500)
Orabug: 24568124

A previous refactor added support to store user configuration for VSIs,
so that extra VSIs such as for VMDq can use this information when
configuring. Unfortunately the i40e_vsi_config_rss function was missed
in this refactor, and the values were being ignored. Fix this by
checking for the fields and using those instead of always using the
default values.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
(cherry picked from commit 552b996256241198a08005a91a206b402ac234f6)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Signed-off-by: Dhaval Giani <dhaval.giani@oracle.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index 0d6939762b542f050ab78b3ec247e46f69781622..2944995815f01e37f5d816a161119b1de5a7d6d3 100644 (file)
@@ -7981,13 +7981,26 @@ static int i40e_vsi_config_rss(struct i40e_vsi *vsi)
        if (!(pf->flags & I40E_FLAG_RSS_AQ_CAPABLE))
                return 0;
 
+       if (!vsi->rss_size)
+               vsi->rss_size = min_t(int, pf->alloc_rss_size,
+                                     vsi->num_queue_pairs);
+       if (!vsi->rss_size)
+               return -EINVAL;
+
        lut = kzalloc(vsi->rss_table_size, GFP_KERNEL);
        if (!lut)
                return -ENOMEM;
-
-       i40e_fill_rss_lut(pf, lut, vsi->rss_table_size, vsi->rss_size);
-       netdev_rss_key_fill((void *)seed, I40E_HKEY_ARRAY_SIZE);
-       vsi->rss_size = min_t(int, pf->alloc_rss_size, vsi->num_queue_pairs);
+       /* Use the user configured hash keys and lookup table if there is one,
+        * otherwise use default
+        */
+       if (vsi->rss_lut_user)
+               memcpy(lut, vsi->rss_lut_user, vsi->rss_table_size);
+       else
+               i40e_fill_rss_lut(pf, lut, vsi->rss_table_size, vsi->rss_size);
+       if (vsi->rss_hkey_user)
+               memcpy(seed, vsi->rss_hkey_user, I40E_HKEY_ARRAY_SIZE);
+       else
+               netdev_rss_key_fill((void *)seed, I40E_HKEY_ARRAY_SIZE);
        ret = i40e_config_rss_aq(vsi, seed, lut, vsi->rss_table_size);
        kfree(lut);