Parse priority attribute during flow creation. This information will be used to give a hint to the FW to place the flow rule accordingly in the CFA tables.
Reviewed-by: Rahul Gupta <rahul.gu...@broadcom.com> Reviewed-by: Lance Richardson <lance.richard...@broadcom.com> Signed-off-by: Ajit Khaparde <ajit.khapa...@broadcom.com> --- drivers/net/bnxt/bnxt_filter.h | 1 + drivers/net/bnxt/bnxt_flow.c | 25 +++++++++++-------------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/drivers/net/bnxt/bnxt_filter.h b/drivers/net/bnxt/bnxt_filter.h index 52d3582ba..bcb9d6031 100644 --- a/drivers/net/bnxt/bnxt_filter.h +++ b/drivers/net/bnxt/bnxt_filter.h @@ -66,6 +66,7 @@ struct bnxt_filter_info { uint16_t ip_protocol; uint16_t ip_addr_type; uint16_t ethertype; + uint32_t priority; }; struct bnxt_filter_info *bnxt_alloc_filter(struct bnxt *bp); diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c index 1328f25bc..2d107a892 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c @@ -225,6 +225,9 @@ bnxt_validate_and_parse_flow_type(struct bnxt *bp, valid_flags |= inner ? BNXT_FLOW_L2_INNER_DST_VALID_FLAG : BNXT_FLOW_L2_DST_VALID_FLAG; + filter->priority = attr->priority; + PMD_DRV_LOG(DEBUG, + "Creating a priority flow\n"); } if (rte_is_broadcast_ether_addr(ð_mask->src)) { @@ -710,15 +713,6 @@ bnxt_flow_parse_attr(const struct rte_flow_attr *attr, return -rte_errno; } - /* Not supported */ - if (attr->priority) { - rte_flow_error_set(error, - EINVAL, - RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY, - attr, - "No support for priority."); - return -rte_errno; - } return 0; } @@ -764,13 +758,16 @@ bnxt_get_l2_filter(struct bnxt *bp, struct bnxt_filter_info *nf, memcpy(filter1->l2_addr, nf->dst_macaddr, RTE_ETHER_ADDR_LEN); } - if (nf->valid_flags & BNXT_FLOW_L2_DST_VALID_FLAG || - nf->valid_flags & BNXT_FLOW_L2_INNER_DST_VALID_FLAG) { + if (nf->priority && + (nf->valid_flags & BNXT_FLOW_L2_DST_VALID_FLAG || + nf->valid_flags & BNXT_FLOW_L2_INNER_DST_VALID_FLAG)) { /* Tell the FW where to place the filter in the table. */ - filter1->pri_hint = + if (nf->priority > 65535) { + filter1->pri_hint = HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER; - /* This will place the filter in TCAM */ - filter1->l2_filter_id_hint = (uint64_t)-1; + /* This will place the filter in TCAM */ + filter1->l2_filter_id_hint = (uint64_t)-1; + } } filter1->enables = HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR | -- 2.20.1 (Apple Git-117)