Skip to content

Commit

Permalink
net/hns3: separate setting redirection table
Browse files Browse the repository at this point in the history
[ upstream commit a421cb93462932717f23c5d8342381726e547ba6 ]

The settings of redirection table comes from the ethdev ops (like,
dev_configure and rss_hash_update) and rte_flow API. For the ethdev
ops, driver has to save it to rss_info::rss_indirection_tbl in hns3_hw
structure so as to it can be restored when reset is triggered.
While rte_flow API no need to use this field to save, they has a global
RSS flow list to maintain all rules which can be used to restore the
table during the reset phase.

Signed-off-by: Huisong Li <lihuisong@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
  • Loading branch information
LiHuiSong1 authored and bluca committed Mar 15, 2023
1 parent 9e3cfd9 commit ff26a87
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 10 deletions.
2 changes: 0 additions & 2 deletions drivers/net/hns3/hns3_flow.c
Original file line number Diff line number Diff line change
Expand Up @@ -1487,8 +1487,6 @@ hns3_update_indir_table(struct hns3_hw *hw,
uint32_t i;

/* Fill in redirection table */
memcpy(indir_tbl, hw->rss_info.rss_indirection_tbl,
sizeof(hw->rss_info.rss_indirection_tbl));
for (i = 0, j = 0; i < hw->rss_ind_tbl_size; i++, j++) {
j %= num;
if (conf->queue[j] >= hw->alloc_rss_size) {
Expand Down
21 changes: 13 additions & 8 deletions drivers/net/hns3/hns3_rss.c
Original file line number Diff line number Diff line change
Expand Up @@ -473,10 +473,6 @@ hns3_set_rss_indir_table(struct hns3_hw *hw, uint16_t *indir, uint16_t size)
}
}

/* Update redirection table of hw */
memcpy(hw->rss_info.rss_indirection_tbl, indir,
sizeof(uint16_t) * size);

return 0;
}

Expand Down Expand Up @@ -542,8 +538,11 @@ hns3_rss_reset_indir_table(struct hns3_hw *hw)
}

ret = hns3_set_rss_indir_table(hw, lut, hw->rss_ind_tbl_size);
if (ret)
hns3_err(hw, "RSS uninit indir table failed: %d", ret);
if (ret != 0)
hns3_err(hw, "RSS uninit indir table failed, ret = %d.", ret);
else
memcpy(hw->rss_info.rss_indirection_tbl, lut,
sizeof(uint16_t) * hw->rss_ind_tbl_size);
rte_free(lut);

return ret;
Expand Down Expand Up @@ -855,12 +854,12 @@ hns3_dev_rss_reta_update(struct rte_eth_dev *dev,
idx = i / RTE_RETA_GROUP_SIZE;
shift = i % RTE_RETA_GROUP_SIZE;
if (reta_conf[idx].reta[shift] >= hw->alloc_rss_size) {
rte_spinlock_unlock(&hw->lock);
hns3_err(hw, "queue id(%u) set to redirection table "
"exceeds queue number(%u) allocated to a TC",
reta_conf[idx].reta[shift],
hw->alloc_rss_size);
return -EINVAL;
ret = -EINVAL;
goto out;
}

if (reta_conf[idx].mask & (1ULL << shift))
Expand All @@ -869,7 +868,13 @@ hns3_dev_rss_reta_update(struct rte_eth_dev *dev,

ret = hns3_set_rss_indir_table(hw, indirection_tbl,
hw->rss_ind_tbl_size);
if (ret != 0)
goto out;

memcpy(rss_cfg->rss_indirection_tbl, indirection_tbl,
sizeof(uint16_t) * hw->rss_ind_tbl_size);

out:
rte_spinlock_unlock(&hw->lock);
return ret;
}
Expand Down

0 comments on commit ff26a87

Please sign in to comment.