From: Mohammad Shuab Siddique <[email protected]> Fixed VFs attempting global RSS configuration which is not permitted by firmware. VFs (including trusted VFs) must use per-VNIC RSS configuration with actual vnic_id and rss_ctx_idx values.
Cc: [email protected] Signed-off-by: Mohammad Shuab Siddique <[email protected]> --- drivers/net/bnxt/bnxt_hwrm.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 0c82935de9..afc948ac29 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -2970,8 +2970,22 @@ bnxt_hwrm_vnic_rss_cfg_hash_mode_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic req.hash_mode_flags = BNXT_HASH_MODE_INNERMOST; else req.hash_mode_flags = vnic->hash_mode; - req.vnic_id = rte_cpu_to_le_16(BNXT_DFLT_VNIC_ID_INVALID); - req.rss_ctx_idx = rte_cpu_to_le_16(BNXT_RSS_CTX_IDX_INVALID); + + /* VFs must use actual vnic_id for per-VNIC configuration. + * PFs can use INVALID vnic_id for global configuration. + * This is because VFs don't have permission to configure + * global hash mode, even if they're trusted. + */ + if (BNXT_VF(bp)) { + req.vnic_id = rte_cpu_to_le_16(vnic->fw_vnic_id); + req.rss_ctx_idx = rte_cpu_to_le_16(vnic->fw_grp_ids[0]); + PMD_DRV_LOG_LINE(DEBUG, "VF using per-VNIC RSS config (vnic_id=%u)", + vnic->fw_vnic_id); + } else { + req.vnic_id = rte_cpu_to_le_16(BNXT_DFLT_VNIC_ID_INVALID); + req.rss_ctx_idx = rte_cpu_to_le_16(BNXT_RSS_CTX_IDX_INVALID); + PMD_DRV_LOG_LINE(DEBUG, "PF using global RSS config"); + } PMD_DRV_LOG_LINE(DEBUG, "RSS CFG: Hash level %d", req.hash_mode_flags); rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), -- 2.47.3

