Include checks for error status returned for specific opcodes and display error messages accordingly.
Fixes: db042ef09d26 ("net/cpfl: implement FXP rule creation and destroying") Cc: sta...@dpdk.org Signed-off-by: Soumyadeep Hore <soumyadeep.h...@intel.com> --- drivers/net/cpfl/cpfl_fxp_rule.c | 8 ++++++++ drivers/net/cpfl/cpfl_rules.h | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/drivers/net/cpfl/cpfl_fxp_rule.c b/drivers/net/cpfl/cpfl_fxp_rule.c index 0e710a007b..f48ecd5656 100644 --- a/drivers/net/cpfl/cpfl_fxp_rule.c +++ b/drivers/net/cpfl/cpfl_fxp_rule.c @@ -92,6 +92,14 @@ cpfl_receive_ctlq_msg(struct idpf_hw *hw, struct idpf_ctlq_info *cq, u16 num_q_m /* TODO - process rx controlq message */ for (i = 0; i < num_q_msg; i++) { + ret = q_msg[i].status; + if (ret && + q_msg[i].opcode != cpfl_ctlq_sem_query_del_rule_hash_addr) { + PMD_INIT_LOG(ERR, "Failed to process rx_ctrlq msg: %s", + cpfl_cfg_pkt_errormsg[ret]); + return ret; + } + if (q_msg[i].data_len > 0) dma = q_msg[i].ctx.indirect.payload; else diff --git a/drivers/net/cpfl/cpfl_rules.h b/drivers/net/cpfl/cpfl_rules.h index d23eae8e91..10569b1fdc 100644 --- a/drivers/net/cpfl/cpfl_rules.h +++ b/drivers/net/cpfl/cpfl_rules.h @@ -62,6 +62,17 @@ enum cpfl_cfg_pkt_error_code { CPFL_CFG_PKT_ERR_EMAXCOL = 9 /* Max Hash Collision */ }; +static const char * const cpfl_cfg_pkt_errormsg[] = { + [CPFL_CFG_PKT_ERR_ESRCH] = "Bad opcode", + [CPFL_CFG_PKT_ERR_EEXIST] = "The rule conflicts with already existed one", + [CPFL_CFG_PKT_ERR_ENOSPC] = "No space left in the table", + [CPFL_CFG_PKT_ERR_ERANGE] = "Parameter out of range", + [CPFL_CFG_PKT_ERR_ESBCOMP] = "Completion error", + [CPFL_CFG_PKT_ERR_ENOPIN] = "Entry cannot be pinned in cache", + [CPFL_CFG_PKT_ERR_ENOTFND] = "Entry does not exist", + [CPFL_CFG_PKT_ERR_EMAXCOL] = "Maximum Hash Collisions reached", +}; + /* macros for creating context for rule descriptor */ #define MEV_RULE_VSI_ID_S 0 #define MEV_RULE_VSI_ID_M \ -- 2.43.0