|
@@ -8076,13 +8076,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);
|
|
|
|