提交 66ddcffb 编写于 作者: A Anjali Singhai Jain 提交者: Jeff Kirsher

i40e: Fix RSS size at init since default num queue calculation has changed

With changes to default number of queue pairs that the interface comes up with
from 1 per online CPU to 1 per lan_msix, we need to make sure we recalculate
rss_size. We will now recalculate rss_size based on number of queues enabled in
the VSI.

Without this fix if the max_lan_msix < num_online_cpu we will be coming up
with fewer queues but will be populating rss_size based on num_online_cpus.
This will result in packets getting silently dropped because RSS LUT has queues
that are not enabled.

Change-ID: Ifac8796ce1be1758bb0c34f38dbf4a3a76621e76
Signed-off-by: NAnjali Singhai Jain <anjali.singhai@intel.com>
Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
上级 5db4cb59
...@@ -472,6 +472,7 @@ struct i40e_vsi { ...@@ -472,6 +472,7 @@ struct i40e_vsi {
u16 tx_itr_setting; u16 tx_itr_setting;
u16 rss_table_size; u16 rss_table_size;
u16 rss_size;
u16 max_frame; u16 max_frame;
u16 rx_hdr_len; u16 rx_hdr_len;
......
...@@ -7207,6 +7207,7 @@ static int i40e_setup_misc_vector(struct i40e_pf *pf) ...@@ -7207,6 +7207,7 @@ static int i40e_setup_misc_vector(struct i40e_pf *pf)
static int i40e_config_rss(struct i40e_pf *pf) static int i40e_config_rss(struct i40e_pf *pf)
{ {
u32 rss_key[I40E_PFQF_HKEY_MAX_INDEX + 1]; u32 rss_key[I40E_PFQF_HKEY_MAX_INDEX + 1];
struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
struct i40e_hw *hw = &pf->hw; struct i40e_hw *hw = &pf->hw;
u32 lut = 0; u32 lut = 0;
int i, j; int i, j;
...@@ -7224,6 +7225,8 @@ static int i40e_config_rss(struct i40e_pf *pf) ...@@ -7224,6 +7225,8 @@ static int i40e_config_rss(struct i40e_pf *pf)
wr32(hw, I40E_PFQF_HENA(0), (u32)hena); wr32(hw, I40E_PFQF_HENA(0), (u32)hena);
wr32(hw, I40E_PFQF_HENA(1), (u32)(hena >> 32)); wr32(hw, I40E_PFQF_HENA(1), (u32)(hena >> 32));
vsi->rss_size = min_t(int, pf->rss_size, vsi->num_queue_pairs);
/* Check capability and Set table size and register per hw expectation*/ /* Check capability and Set table size and register per hw expectation*/
reg_val = rd32(hw, I40E_PFQF_CTL_0); reg_val = rd32(hw, I40E_PFQF_CTL_0);
if (hw->func_caps.rss_table_size == 512) { if (hw->func_caps.rss_table_size == 512) {
...@@ -7245,7 +7248,7 @@ static int i40e_config_rss(struct i40e_pf *pf) ...@@ -7245,7 +7248,7 @@ static int i40e_config_rss(struct i40e_pf *pf)
* If LAN VSI is the only consumer for RSS then this requirement * If LAN VSI is the only consumer for RSS then this requirement
* is not necessary. * is not necessary.
*/ */
if (j == pf->rss_size) if (j == vsi->rss_size)
j = 0; j = 0;
/* lut = 4-byte sliding window of 4 lut entries */ /* lut = 4-byte sliding window of 4 lut entries */
lut = (lut << 8) | (j & lut = (lut << 8) | (j &
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册