[3/6] net/enic: support priorities for TCAM flows

Message ID 20200909140006.23788-4-hyonkim@cisco.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series net/enic: minor updates to flow implementation |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Hyong Youb Kim (hyonkim) Sept. 9, 2020, 2 p.m. UTC
  Group 0 corresponds to TCAM which supports priorities. Accept non-zero
priorities for group 0 flows.

Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
---
 doc/guides/rel_notes/release_20_11.rst |  1 +
 drivers/net/enic/enic_fm_flow.c        | 10 ++++++----
 2 files changed, 7 insertions(+), 4 deletions(-)
  

Patch

diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst
index afe81711a..6a7e7d666 100644
--- a/doc/guides/rel_notes/release_20_11.rst
+++ b/doc/guides/rel_notes/release_20_11.rst
@@ -139,3 +139,4 @@  Tested Platforms
 
   * Added support for VF representors with single-queue Tx/Rx and flow API
   * Added support for egress PORT_ID action
+  * Added support for non-zero priorities for group 0 flows
diff --git a/drivers/net/enic/enic_fm_flow.c b/drivers/net/enic/enic_fm_flow.c
index 296e7e30d..5f22f2a32 100644
--- a/drivers/net/enic/enic_fm_flow.c
+++ b/drivers/net/enic/enic_fm_flow.c
@@ -1711,9 +1711,10 @@  enic_fm_dump_tcam_match(const struct fm_tcam_match_entry *match,
 	memset(buf, 0, sizeof(buf));
 	__enic_fm_dump_tcam_match(&match->ftm_mask.fk_hdrset[0],
 				  buf, sizeof(buf));
-	ENICPMD_LOG(DEBUG, " TCAM %s Outer: %s %scounter",
+	ENICPMD_LOG(DEBUG, " TCAM %s Outer: %s %scounter position %u",
 		    (ingress) ? "IG" : "EG", buf,
-		    (match->ftm_flags & FMEF_COUNTER) ? "" : "no ");
+		    (match->ftm_flags & FMEF_COUNTER) ? "" : "no ",
+		    match->ftm_position);
 	memset(buf, 0, sizeof(buf));
 	__enic_fm_dump_tcam_match(&match->ftm_mask.fk_hdrset[1],
 				  buf, sizeof(buf));
@@ -1760,11 +1761,11 @@  enic_fm_flow_parse(struct enic_flowman *fm,
 	}
 
 	if (attrs) {
-		if (attrs->priority) {
+		if (attrs->group != FM_TCAM_RTE_GROUP && attrs->priority) {
 			rte_flow_error_set(error, ENOTSUP,
 					   RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY,
 					   NULL,
-					   "priorities are not supported");
+					   "priorities are not supported for non-default (0) groups");
 			return -rte_errno;
 		} else if (!fm->owner_enic->switchdev_mode && attrs->transfer) {
 			rte_flow_error_set(error, ENOTSUP,
@@ -2192,6 +2193,7 @@  enic_fm_flow_add_entry(struct enic_flowman *fm,
 	struct rte_flow *flow;
 
 	ENICPMD_FUNC_TRACE();
+	match_in->ftm_position = attrs->priority;
 	enic_fm_dump_tcam_entry(match_in, action_in, attrs->ingress);
 	flow = calloc(1, sizeof(*flow));
 	fm_flow = calloc(1, sizeof(*fm_flow));