net/i40e: fix overwriting RSS RETA

When starting the device, the RSS table is initialized. So the RSS
update before dev_start would be overwritten. This patch allows users
to update the RSS reta table before dev_start and adjusts the order
to set entries sequentially.

Fixes: 4861cde461 ("i40e: new poll mode driver")
Cc: stable@dpdk.org

Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
This commit is contained in:
Xiaoyun Li 2018-12-03 16:26:32 +08:00 committed by Ferruh Yigit
parent 81b531cfc2
commit 36c5dc8e5d
2 changed files with 17 additions and 7 deletions

View File

@ -2453,6 +2453,8 @@ i40e_dev_stop(struct rte_eth_dev *dev)
pf->tm_conf.committed = false;
hw->adapter_stopped = 1;
pf->adapter->rss_reta_updated = 0;
}
static void
@ -4264,6 +4266,8 @@ i40e_dev_rss_reta_update(struct rte_eth_dev *dev,
}
ret = i40e_set_rss_lut(pf->main_vsi, lut, reta_size);
pf->adapter->rss_reta_updated = 1;
out:
rte_free(lut);
@ -8501,13 +8505,16 @@ i40e_pf_config_rss(struct i40e_pf *pf)
return -ENOTSUP;
}
for (i = 0, j = 0; i < hw->func_caps.rss_table_size; i++, j++) {
if (j == num)
j = 0;
lut = (lut << 8) | (j & ((0x1 <<
hw->func_caps.rss_table_entry_width) - 1));
if ((i & 3) == 3)
I40E_WRITE_REG(hw, I40E_PFQF_HLUT(i >> 2), lut);
if (pf->adapter->rss_reta_updated == 0) {
for (i = 0, j = 0; i < hw->func_caps.rss_table_size; i++, j++) {
if (j == num)
j = 0;
lut = (lut << 8) | (j & ((0x1 <<
hw->func_caps.rss_table_entry_width) - 1));
if ((i & 3) == 3)
I40E_WRITE_REG(hw, I40E_PFQF_HLUT(i >> 2),
rte_bswap32(lut));
}
}
rss_conf = pf->dev_data->dev_conf.rx_adv_conf.rss_conf;

View File

@ -1081,6 +1081,9 @@ struct i40e_adapter {
/* For devargs */
uint8_t use_latest_vec;
/* For RSS reta table update */
uint8_t rss_reta_updated;
};
/**