|
@@ -7985,45 +7985,34 @@ static int i40e_setup_misc_vector(struct i40e_pf *pf)
|
|
|
static int i40e_config_rss_aq(struct i40e_vsi *vsi, const u8 *seed,
|
|
|
u8 *lut, u16 lut_size)
|
|
|
{
|
|
|
- struct i40e_aqc_get_set_rss_key_data rss_key;
|
|
|
struct i40e_pf *pf = vsi->back;
|
|
|
struct i40e_hw *hw = &pf->hw;
|
|
|
- bool pf_lut = false;
|
|
|
- u8 *rss_lut;
|
|
|
- int ret, i;
|
|
|
-
|
|
|
- memcpy(&rss_key, seed, sizeof(rss_key));
|
|
|
-
|
|
|
- rss_lut = kzalloc(pf->rss_table_size, GFP_KERNEL);
|
|
|
- if (!rss_lut)
|
|
|
- return -ENOMEM;
|
|
|
-
|
|
|
- /* Populate the LUT with max no. of queues in round robin fashion */
|
|
|
- for (i = 0; i < vsi->rss_table_size; i++)
|
|
|
- rss_lut[i] = i % vsi->rss_size;
|
|
|
+ int ret = 0;
|
|
|
|
|
|
- ret = i40e_aq_set_rss_key(hw, vsi->id, &rss_key);
|
|
|
- if (ret) {
|
|
|
- dev_info(&pf->pdev->dev,
|
|
|
- "Cannot set RSS key, err %s aq_err %s\n",
|
|
|
- i40e_stat_str(&pf->hw, ret),
|
|
|
- i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status));
|
|
|
- goto config_rss_aq_out;
|
|
|
+ if (seed) {
|
|
|
+ struct i40e_aqc_get_set_rss_key_data *seed_dw =
|
|
|
+ (struct i40e_aqc_get_set_rss_key_data *)seed;
|
|
|
+ ret = i40e_aq_set_rss_key(hw, vsi->id, seed_dw);
|
|
|
+ if (ret) {
|
|
|
+ dev_info(&pf->pdev->dev,
|
|
|
+ "Cannot set RSS key, err %s aq_err %s\n",
|
|
|
+ i40e_stat_str(hw, ret),
|
|
|
+ i40e_aq_str(hw, hw->aq.asq_last_status));
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
}
|
|
|
+ if (lut) {
|
|
|
+ bool pf_lut = vsi->type == I40E_VSI_MAIN ? true : false;
|
|
|
|
|
|
- if (vsi->type == I40E_VSI_MAIN)
|
|
|
- pf_lut = true;
|
|
|
-
|
|
|
- ret = i40e_aq_set_rss_lut(hw, vsi->id, pf_lut, rss_lut,
|
|
|
- vsi->rss_table_size);
|
|
|
- if (ret)
|
|
|
- dev_info(&pf->pdev->dev,
|
|
|
- "Cannot set RSS lut, err %s aq_err %s\n",
|
|
|
- i40e_stat_str(&pf->hw, ret),
|
|
|
- i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status));
|
|
|
-
|
|
|
-config_rss_aq_out:
|
|
|
- kfree(rss_lut);
|
|
|
+ ret = i40e_aq_set_rss_lut(hw, vsi->id, pf_lut, lut, lut_size);
|
|
|
+ if (ret) {
|
|
|
+ dev_info(&pf->pdev->dev,
|
|
|
+ "Cannot set RSS lut, err %s aq_err %s\n",
|
|
|
+ i40e_stat_str(hw, ret),
|
|
|
+ i40e_aq_str(hw, hw->aq.asq_last_status));
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ }
|
|
|
return ret;
|
|
|
}
|
|
|
|