net/i40e: fix returned code for RSS hardware failure

The API should return the system error status, but it returned the
hardware error status, this is confuses the caller.
This patch adds check on hardware execution status and returns -EIO
in case of hardware execution failure.

Fixes: 1d4b2b4966 ("net/i40e: fix VF overwrite PF RSS LUT for X722")
Fixes: d0a349409b ("i40e: support AQ based RSS config")
Cc: stable@dpdk.org

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
This commit is contained in:
Alvin Zhang 2021-01-08 13:35:39 +08:00 committed by Ferruh Yigit
parent 742d9f87f6
commit c222d2a1d0

View File

@ -4443,7 +4443,6 @@ i40e_set_rss_lut(struct i40e_vsi *vsi, uint8_t *lut, uint16_t lut_size)
{
struct i40e_pf *pf;
struct i40e_hw *hw;
int ret;
if (!vsi || !lut)
return -EINVAL;
@ -4452,12 +4451,16 @@ i40e_set_rss_lut(struct i40e_vsi *vsi, uint8_t *lut, uint16_t lut_size)
hw = I40E_VSI_TO_HW(vsi);
if (pf->flags & I40E_FLAG_RSS_AQ_CAPABLE) {
ret = i40e_aq_set_rss_lut(hw, vsi->vsi_id,
vsi->type != I40E_VSI_SRIOV,
lut, lut_size);
if (ret) {
PMD_DRV_LOG(ERR, "Failed to set RSS lookup table");
return ret;
enum i40e_status_code status;
status = i40e_aq_set_rss_lut(hw, vsi->vsi_id,
vsi->type != I40E_VSI_SRIOV,
lut, lut_size);
if (status) {
PMD_DRV_LOG(ERR,
"Failed to update RSS lookup table, error status: %d",
status);
return -EIO;
}
} else {
uint32_t *lut_dw = (uint32_t *)lut;
@ -7612,7 +7615,6 @@ i40e_set_rss_key(struct i40e_vsi *vsi, uint8_t *key, uint8_t key_len)
uint16_t key_idx = (vsi->type == I40E_VSI_SRIOV) ?
I40E_VFQF_HKEY_MAX_INDEX :
I40E_PFQF_HKEY_MAX_INDEX;
int ret = 0;
if (!key || key_len == 0) {
PMD_DRV_LOG(DEBUG, "No key to be configured");
@ -7625,11 +7627,16 @@ i40e_set_rss_key(struct i40e_vsi *vsi, uint8_t *key, uint8_t key_len)
if (pf->flags & I40E_FLAG_RSS_AQ_CAPABLE) {
struct i40e_aqc_get_set_rss_key_data *key_dw =
(struct i40e_aqc_get_set_rss_key_data *)key;
(struct i40e_aqc_get_set_rss_key_data *)key;
enum i40e_status_code status =
i40e_aq_set_rss_key(hw, vsi->vsi_id, key_dw);
ret = i40e_aq_set_rss_key(hw, vsi->vsi_id, key_dw);
if (ret)
PMD_INIT_LOG(ERR, "Failed to configure RSS key via AQ");
if (status) {
PMD_DRV_LOG(ERR,
"Failed to configure RSS key via AQ, error status: %d",
status);
return -EIO;
}
} else {
uint32_t *hash_key = (uint32_t *)key;
uint16_t i;
@ -7649,7 +7656,7 @@ i40e_set_rss_key(struct i40e_vsi *vsi, uint8_t *key, uint8_t key_len)
I40E_WRITE_FLUSH(hw);
}
return ret;
return 0;
}
static int