netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] net: mvpp2: classifier flow remove tagged
@ 2023-03-11  7:09 Sven Auhagen
  2023-03-15  6:58 ` Jakub Kicinski
  2023-03-15  7:31 ` Maxime Chevallier
  0 siblings, 2 replies; 8+ messages in thread
From: Sven Auhagen @ 2023-03-11  7:09 UTC (permalink / raw)
  To: netdev; +Cc: mw, linux, kuba, davem, maxime.chevallier

The classifier attribute MVPP22_CLS_HEK_TAGGED
has no effect in the definition and is filtered out by default.

Even if it is applied to the classifier, it would discard double
or tripple tagged vlans.

Also add missing IP Fragmentation Flag.

Signed-off-by: Sven Auhagen <sven.auhagen@voleatech.de>

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
index 41d935d1aaf6..efdf8d30f438 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
@@ -44,17 +44,17 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 
 	/* TCP over IPv4 flows, Not fragmented, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
-		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_5T,
 		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
-		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_5T,
 		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
-		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_5T,
 		       MVPP2_PRS_RI_L3_IP4_OTHER | MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
@@ -62,35 +62,38 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_UNTAG,
 		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4 |
-		       MVPP2_PRS_RI_L4_TCP,
+		       MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_UNTAG,
 		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4_OPT |
-		       MVPP2_PRS_RI_L4_TCP,
+		       MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_UNTAG,
 		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4_OTHER |
-		       MVPP2_PRS_RI_L4_TCP,
+		       MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
 
 	/* TCP over IPv4 flows, fragmented, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
-		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
+		       MVPP22_CLS_HEK_IP4_2T,
+		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_IP_FRAG_TRUE |
+			   MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
-		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_TCP,
+		       MVPP22_CLS_HEK_IP4_2T,
+		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_IP_FRAG_TRUE |
+			   MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
-		       MVPP2_PRS_RI_L3_IP4_OTHER | MVPP2_PRS_RI_L4_TCP,
+		       MVPP22_CLS_HEK_IP4_2T,
+		       MVPP2_PRS_RI_L3_IP4_OTHER | MVPP2_PRS_RI_IP_FRAG_TRUE |
+			   MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
 	/* UDP over IPv4 flows, Not fragmented, no vlan tag */
@@ -114,17 +117,17 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 
 	/* UDP over IPv4 flows, Not fragmented, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
-		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_5T,
 		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
-		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_5T,
 		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
-		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_5T,
 		       MVPP2_PRS_RI_L3_IP4_OTHER | MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
@@ -132,35 +135,38 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_UNTAG,
 		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4 |
-		       MVPP2_PRS_RI_L4_UDP,
+		       MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_UNTAG,
 		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4_OPT |
-		       MVPP2_PRS_RI_L4_UDP,
+		       MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_UNTAG,
 		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4_OTHER |
-		       MVPP2_PRS_RI_L4_UDP,
+		       MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
 
 	/* UDP over IPv4 flows, fragmented, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
-		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
+		       MVPP22_CLS_HEK_IP4_2T,
+		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_IP_FRAG_TRUE |
+			   MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
-		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_UDP,
+		       MVPP22_CLS_HEK_IP4_2T,
+		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_IP_FRAG_TRUE |
+			   MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
-		       MVPP2_PRS_RI_L3_IP4_OTHER | MVPP2_PRS_RI_L4_UDP,
+		       MVPP22_CLS_HEK_IP4_2T,
+		       MVPP2_PRS_RI_L3_IP4_OTHER | MVPP2_PRS_RI_IP_FRAG_TRUE |
+			   MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
 	/* TCP over IPv6 flows, not fragmented, no vlan tag */
@@ -178,12 +184,12 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 
 	/* TCP over IPv6 flows, not fragmented, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
-		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_5T,
 		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
-		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_5T,
 		       MVPP2_PRS_RI_L3_IP6_EXT | MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
@@ -202,13 +208,13 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 
 	/* TCP over IPv6 flows, fragmented, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_2T,
 		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_IP_FRAG_TRUE |
 		       MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_2T,
 		       MVPP2_PRS_RI_L3_IP6_EXT | MVPP2_PRS_RI_IP_FRAG_TRUE |
 		       MVPP2_PRS_RI_L4_TCP,
 		       MVPP2_PRS_IP_MASK),
@@ -228,12 +234,12 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 
 	/* UDP over IPv6 flows, not fragmented, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
-		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_5T,
 		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
-		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_5T,
 		       MVPP2_PRS_RI_L3_IP6_EXT | MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
@@ -252,13 +258,13 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 
 	/* UDP over IPv6 flows, fragmented, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_2T,
 		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_IP_FRAG_TRUE |
 		       MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
 
 	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_FRAG_TAG,
-		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_2T,
 		       MVPP2_PRS_RI_L3_IP6_EXT | MVPP2_PRS_RI_IP_FRAG_TRUE |
 		       MVPP2_PRS_RI_L4_UDP,
 		       MVPP2_PRS_IP_MASK),
@@ -279,15 +285,15 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 
 	/* IPv4 flows, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_L3_IP4,
 		       MVPP2_PRS_RI_L3_PROTO_MASK),
 	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_L3_IP4_OPT,
 		       MVPP2_PRS_RI_L3_PROTO_MASK),
 	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
-		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP4_2T,
 		       MVPP2_PRS_RI_L3_IP4_OTHER,
 		       MVPP2_PRS_RI_L3_PROTO_MASK),
 
@@ -303,11 +309,11 @@ static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = {
 
 	/* IPv6 flows, with vlan tag */
 	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
-		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_2T,
 		       MVPP2_PRS_RI_L3_IP6,
 		       MVPP2_PRS_RI_L3_PROTO_MASK),
 	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
-		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
+		       MVPP22_CLS_HEK_IP6_2T,
 		       MVPP2_PRS_RI_L3_IP6,
 		       MVPP2_PRS_RI_L3_PROTO_MASK),
 
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] net: mvpp2: classifier flow remove tagged
  2023-03-11  7:09 [PATCH 1/3] net: mvpp2: classifier flow remove tagged Sven Auhagen
@ 2023-03-15  6:58 ` Jakub Kicinski
  2023-03-15  7:56   ` Sven Auhagen
  2023-03-15  7:31 ` Maxime Chevallier
  1 sibling, 1 reply; 8+ messages in thread
From: Jakub Kicinski @ 2023-03-15  6:58 UTC (permalink / raw)
  To: Sven Auhagen; +Cc: netdev, mw, linux, davem, maxime.chevallier

On Sat, 11 Mar 2023 08:09:48 +0100 Sven Auhagen wrote:
> The classifier attribute MVPP22_CLS_HEK_TAGGED
> has no effect in the definition and is filtered out by default.

filtered out in the code somewhere? 

> Even if it is applied to the classifier, it would discard double
> or tripple tagged vlans.

So the MVPP22_CLS_HEK_TAGGED change is a nop?

> Also add missing IP Fragmentation Flag.

What's the impact of this change? Seems like it should be a separate
patch.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] net: mvpp2: classifier flow remove tagged
  2023-03-11  7:09 [PATCH 1/3] net: mvpp2: classifier flow remove tagged Sven Auhagen
  2023-03-15  6:58 ` Jakub Kicinski
@ 2023-03-15  7:31 ` Maxime Chevallier
  2023-03-15  7:53   ` Sven Auhagen
  1 sibling, 1 reply; 8+ messages in thread
From: Maxime Chevallier @ 2023-03-15  7:31 UTC (permalink / raw)
  To: Sven Auhagen; +Cc: netdev, mw, linux, kuba, davem

Hello Sven,

On Sat, 11 Mar 2023 08:09:48 +0100
Sven Auhagen <Sven.Auhagen@voleatech.de> wrote:

> The classifier attribute MVPP22_CLS_HEK_TAGGED
> has no effect in the definition and is filtered out by default.

It's been a while since I've worked in this, but it looks like the
non-tagged and tagged flows will start behaving the same way with this
patch, which isn't what we want. Offsets to extract the various fields
change based on the presence or not of a vlan tag, hence why we have
all these flow definitions.

Did you check that for example RSS still behaves correctly when using
tagged and untagged traffic on the same interface ?

I didn't test the QinQ at the time, so it's indeed likely that it
doesn't behave as expected, but removing the MVPP22_CLS_HEK_TAGGED
will cause issues if you start hashing inbound traffic based on the
vlan tag.

the MVPP22_CLS_HEK_TAGGED does have an effect, as it's defined a
(VLAN id | VLAN_PRI) hashing capability. Removing it will also break
the per-vlan-prio rxnfc steering.

Do you have more details on the use-case ? Do you wan to do RSS,
steering ?

I however do think that the missing frag flags are correct, and should
be sent in a separate patch.

Thanks,

Maxime

> Even if it is applied to the classifier, it would discard double
> or tripple tagged vlans.
> 
> Also add missing IP Fragmentation Flag.
> 
> Signed-off-by: Sven Auhagen <sven.auhagen@voleatech.de>
> 
> diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
> b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c index
> 41d935d1aaf6..efdf8d30f438 100644 ---
> a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +++
> b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c @@ -44,17 +44,17 @@
> static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = { 
>  	/* TCP over IPv4 flows, Not fragmented, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_5T,
>  		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_5T,
>  		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_5T,
>  		       MVPP2_PRS_RI_L3_IP4_OTHER |
> MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK),
>  
> @@ -62,35 +62,38 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> MVPP2_FL_IP4_TCP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4 |
> -		       MVPP2_PRS_RI_L4_TCP,
> +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_UNTAG,
>  		       MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_VLAN_NONE |
> MVPP2_PRS_RI_L3_IP4_OPT |
> -		       MVPP2_PRS_RI_L4_TCP,
> +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_UNTAG,
>  		       MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_VLAN_NONE |
> MVPP2_PRS_RI_L3_IP4_OTHER |
> -		       MVPP2_PRS_RI_L4_TCP,
> +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
>  
>  	/* TCP over IPv4 flows, fragmented, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> -		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
> +		       MVPP22_CLS_HEK_IP4_2T,
> +		       MVPP2_PRS_RI_L3_IP4 |
> MVPP2_PRS_RI_IP_FRAG_TRUE |
> +			   MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> -		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_TCP,
> +		       MVPP22_CLS_HEK_IP4_2T,
> +		       MVPP2_PRS_RI_L3_IP4_OPT |
> MVPP2_PRS_RI_IP_FRAG_TRUE |
> +			   MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> -		       MVPP2_PRS_RI_L3_IP4_OTHER |
> MVPP2_PRS_RI_L4_TCP,
> +		       MVPP22_CLS_HEK_IP4_2T,
> +		       MVPP2_PRS_RI_L3_IP4_OTHER |
> MVPP2_PRS_RI_IP_FRAG_TRUE |
> +			   MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	/* UDP over IPv4 flows, Not fragmented, no vlan tag */
> @@ -114,17 +117,17 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { 
>  	/* UDP over IPv4 flows, Not fragmented, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_5T,
>  		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_5T,
>  		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_5T,
>  		       MVPP2_PRS_RI_L3_IP4_OTHER |
> MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK),
>  
> @@ -132,35 +135,38 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> MVPP2_FL_IP4_UDP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4 |
> -		       MVPP2_PRS_RI_L4_UDP,
> +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_UNTAG,
>  		       MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_VLAN_NONE |
> MVPP2_PRS_RI_L3_IP4_OPT |
> -		       MVPP2_PRS_RI_L4_UDP,
> +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_UNTAG,
>  		       MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_VLAN_NONE |
> MVPP2_PRS_RI_L3_IP4_OTHER |
> -		       MVPP2_PRS_RI_L4_UDP,
> +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
>  
>  	/* UDP over IPv4 flows, fragmented, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> -		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
> +		       MVPP22_CLS_HEK_IP4_2T,
> +		       MVPP2_PRS_RI_L3_IP4 |
> MVPP2_PRS_RI_IP_FRAG_TRUE |
> +			   MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> -		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_UDP,
> +		       MVPP22_CLS_HEK_IP4_2T,
> +		       MVPP2_PRS_RI_L3_IP4_OPT |
> MVPP2_PRS_RI_IP_FRAG_TRUE |
> +			   MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> -		       MVPP2_PRS_RI_L3_IP4_OTHER |
> MVPP2_PRS_RI_L4_UDP,
> +		       MVPP22_CLS_HEK_IP4_2T,
> +		       MVPP2_PRS_RI_L3_IP4_OTHER |
> MVPP2_PRS_RI_IP_FRAG_TRUE |
> +			   MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	/* TCP over IPv6 flows, not fragmented, no vlan tag */
> @@ -178,12 +184,12 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { 
>  	/* TCP over IPv6 flows, not fragmented, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_5T,
>  		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_5T,
>  		       MVPP2_PRS_RI_L3_IP6_EXT | MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
>  
> @@ -202,13 +208,13 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { 
>  	/* TCP over IPv6 flows, fragmented, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_2T,
>  		       MVPP2_PRS_RI_L3_IP6 |
> MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_2T,
>  		       MVPP2_PRS_RI_L3_IP6_EXT |
> MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
>  		       MVPP2_PRS_IP_MASK),
> @@ -228,12 +234,12 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { 
>  	/* UDP over IPv6 flows, not fragmented, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_5T,
>  		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
> -		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_5T,
>  		       MVPP2_PRS_RI_L3_IP6_EXT | MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
>  
> @@ -252,13 +258,13 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { 
>  	/* UDP over IPv6 flows, fragmented, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_2T,
>  		       MVPP2_PRS_RI_L3_IP6 |
> MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
>  
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_FRAG_TAG,
> -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_2T,
>  		       MVPP2_PRS_RI_L3_IP6_EXT |
> MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
>  		       MVPP2_PRS_IP_MASK),
> @@ -279,15 +285,15 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { 
>  	/* IPv4 flows, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_L3_IP4,
>  		       MVPP2_PRS_RI_L3_PROTO_MASK),
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_L3_IP4_OPT,
>  		       MVPP2_PRS_RI_L3_PROTO_MASK),
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP4_2T,
>  		       MVPP2_PRS_RI_L3_IP4_OTHER,
>  		       MVPP2_PRS_RI_L3_PROTO_MASK),
>  
> @@ -303,11 +309,11 @@ static const struct mvpp2_cls_flow
> cls_flows[MVPP2_N_PRS_FLOWS] = { 
>  	/* IPv6 flows, with vlan tag */
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
> -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_2T,
>  		       MVPP2_PRS_RI_L3_IP6,
>  		       MVPP2_PRS_RI_L3_PROTO_MASK),
>  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
> -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> +		       MVPP22_CLS_HEK_IP6_2T,
>  		       MVPP2_PRS_RI_L3_IP6,
>  		       MVPP2_PRS_RI_L3_PROTO_MASK),
>  


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] net: mvpp2: classifier flow remove tagged
  2023-03-15  7:31 ` Maxime Chevallier
@ 2023-03-15  7:53   ` Sven Auhagen
  2023-03-15 10:19     ` Maxime Chevallier
  0 siblings, 1 reply; 8+ messages in thread
From: Sven Auhagen @ 2023-03-15  7:53 UTC (permalink / raw)
  To: Maxime Chevallier; +Cc: netdev, mw, linux, kuba, davem

On Wed, Mar 15, 2023 at 08:31:48AM +0100, Maxime Chevallier wrote:
> Hello Sven,

Hello Maxime,

> 
> On Sat, 11 Mar 2023 08:09:48 +0100
> Sven Auhagen <Sven.Auhagen@voleatech.de> wrote:
> 
> > The classifier attribute MVPP22_CLS_HEK_TAGGED
> > has no effect in the definition and is filtered out by default.
> 
> It's been a while since I've worked in this, but it looks like the
> non-tagged and tagged flows will start behaving the same way with this
> patch, which isn't what we want. Offsets to extract the various fields
> change based on the presence or not of a vlan tag, hence why we have
> all these flow definitions.
> 

In the sense of a match kind of.
There is one classifier match for no VLAN and one for any number of VLANs.
So no VLAN will match twice, correct.

This is the case right now anyway though since mvpp2_port_rss_hash_opts_set
is filtering out MVPP22_CLS_HEK_TAGGED for all rss hash options that
are set in the driver at the moment.

MVPP22_CLS_HEK_TAGGED is also not compatible with MVPP22_CLS_HEK_IP4_5T
which is probably the reason it is filtered out.

The HEK can only have a match on up to 4 fields.
MVPP22_CLS_HEK_IP4_5T already covers 4 fields.
I disabled the hash_opts line which removes the HEK_TAGGED and the entire
rule will fail out and is not added because of that.

So I am simply removing what is not working in the first place.

> Did you check that for example RSS still behaves correctly when using
> tagged and untagged traffic on the same interface ?
> 

Yes all RSS work fine, I tested no VLAN, VLAN, QinQ, PPPoE and VLAN + PPPoE.

> I didn't test the QinQ at the time, so it's indeed likely that it
> doesn't behave as expected, but removing the MVPP22_CLS_HEK_TAGGED
> will cause issues if you start hashing inbound traffic based on the
> vlan tag.

Please see my comment above.

> 
> the MVPP22_CLS_HEK_TAGGED does have an effect, as it's defined a
> (VLAN id | VLAN_PRI) hashing capability. Removing it will also break
> the per-vlan-prio rxnfc steering.
> 
> Do you have more details on the use-case ? Do you wan to do RSS,
> steering ?

I want to have RSS steering for all cases I tested above.
Do you have a different place that I do not know of where
MVPP22_CLS_HEK_TAGGED is actually loaded?

> 
> I however do think that the missing frag flags are correct, and should
> be sent in a separate patch.
> 

Will do that in v2.

> Thanks,
> 
> Maxime
> 
> > Even if it is applied to the classifier, it would discard double
> > or tripple tagged vlans.
> > 
> > Also add missing IP Fragmentation Flag.
> > 
> > Signed-off-by: Sven Auhagen <sven.auhagen@voleatech.de>
> > 
> > diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
> > b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c index
> > 41d935d1aaf6..efdf8d30f438 100644 ---
> > a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +++
> > b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c @@ -44,17 +44,17 @@
> > static const struct mvpp2_cls_flow cls_flows[MVPP2_N_PRS_FLOWS] = { 
> >  	/* TCP over IPv4 flows, Not fragmented, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_5T,
> >  		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_5T,
> >  		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_5T,
> >  		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK),
> >  
> > @@ -62,35 +62,38 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > MVPP2_FL_IP4_TCP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4 |
> > -		       MVPP2_PRS_RI_L4_TCP,
> > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_UNTAG,
> >  		       MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_VLAN_NONE |
> > MVPP2_PRS_RI_L3_IP4_OPT |
> > -		       MVPP2_PRS_RI_L4_TCP,
> > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_UNTAG,
> >  		       MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_VLAN_NONE |
> > MVPP2_PRS_RI_L3_IP4_OTHER |
> > -		       MVPP2_PRS_RI_L4_TCP,
> > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> >  
> >  	/* TCP over IPv4 flows, fragmented, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > -		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> > +		       MVPP2_PRS_RI_L3_IP4 |
> > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > +			   MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > -		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_TCP,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> > +		       MVPP2_PRS_RI_L3_IP4_OPT |
> > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > +			   MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > -		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > MVPP2_PRS_RI_L4_TCP,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> > +		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > +			   MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	/* UDP over IPv4 flows, Not fragmented, no vlan tag */
> > @@ -114,17 +117,17 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> >  	/* UDP over IPv4 flows, Not fragmented, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_5T,
> >  		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_5T,
> >  		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP4_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_5T,
> >  		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK),
> >  
> > @@ -132,35 +135,38 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > MVPP2_FL_IP4_UDP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_VLAN_NONE | MVPP2_PRS_RI_L3_IP4 |
> > -		       MVPP2_PRS_RI_L4_UDP,
> > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_UNTAG,
> >  		       MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_VLAN_NONE |
> > MVPP2_PRS_RI_L3_IP4_OPT |
> > -		       MVPP2_PRS_RI_L4_UDP,
> > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_UNTAG,
> >  		       MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_VLAN_NONE |
> > MVPP2_PRS_RI_L3_IP4_OTHER |
> > -		       MVPP2_PRS_RI_L4_UDP,
> > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> >  
> >  	/* UDP over IPv4 flows, fragmented, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > -		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> > +		       MVPP2_PRS_RI_L3_IP4 |
> > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > +			   MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > -		       MVPP2_PRS_RI_L3_IP4_OPT | MVPP2_PRS_RI_L4_UDP,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> > +		       MVPP2_PRS_RI_L3_IP4_OPT |
> > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > +			   MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > -		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > MVPP2_PRS_RI_L4_UDP,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> > +		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > +			   MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	/* TCP over IPv6 flows, not fragmented, no vlan tag */
> > @@ -178,12 +184,12 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> >  	/* TCP over IPv6 flows, not fragmented, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_5T,
> >  		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_5T,
> >  		       MVPP2_PRS_RI_L3_IP6_EXT | MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> > @@ -202,13 +208,13 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> >  	/* TCP over IPv6 flows, fragmented, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_2T,
> >  		       MVPP2_PRS_RI_L3_IP6 |
> > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_2T,
> >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
> >  		       MVPP2_PRS_IP_MASK),
> > @@ -228,12 +234,12 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> >  	/* UDP over IPv6 flows, not fragmented, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_5T,
> >  		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
> > -		       MVPP22_CLS_HEK_IP6_5T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_5T,
> >  		       MVPP2_PRS_RI_L3_IP6_EXT | MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> > @@ -252,13 +258,13 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> >  	/* UDP over IPv6 flows, fragmented, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_2T,
> >  		       MVPP2_PRS_RI_L3_IP6 |
> > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> >  
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_FRAG_TAG,
> > -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_2T,
> >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
> >  		       MVPP2_PRS_IP_MASK),
> > @@ -279,15 +285,15 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> >  	/* IPv4 flows, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_L3_IP4,
> >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_L3_IP4_OPT,
> >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > -		       MVPP22_CLS_HEK_IP4_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP4_2T,
> >  		       MVPP2_PRS_RI_L3_IP4_OTHER,
> >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> >  
> > @@ -303,11 +309,11 @@ static const struct mvpp2_cls_flow
> > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> >  	/* IPv6 flows, with vlan tag */
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
> > -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_2T,
> >  		       MVPP2_PRS_RI_L3_IP6,
> >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
> > -		       MVPP22_CLS_HEK_IP6_2T | MVPP22_CLS_HEK_TAGGED,
> > +		       MVPP22_CLS_HEK_IP6_2T,
> >  		       MVPP2_PRS_RI_L3_IP6,
> >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> >  
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] net: mvpp2: classifier flow remove tagged
  2023-03-15  6:58 ` Jakub Kicinski
@ 2023-03-15  7:56   ` Sven Auhagen
  0 siblings, 0 replies; 8+ messages in thread
From: Sven Auhagen @ 2023-03-15  7:56 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: netdev@vger.kernel.org, mw@semihalf.com, linux@armlinux.org.uk,
	davem@davemloft.net, maxime.chevallier@bootlin.com

On Wed, Mar 15, 2023 at 07:58:53AM +0100, Jakub Kicinski wrote:
> On Sat, 11 Mar 2023 08:09:48 +0100 Sven Auhagen wrote:
> > The classifier attribute MVPP22_CLS_HEK_TAGGED
> > has no effect in the definition and is filtered out by default.
> 
> filtered out in the code somewhere? 

It is filtered out in mvpp2_port_rss_hash_opts_set in this line:

	hash_opts = flow->supported_hash_opts & requested_opts;

Please see my email to Maxime which explains why the HEK can not use it
in case of a 5 Tuple.

> 
> > Even if it is applied to the classifier, it would discard double
> > or tripple tagged vlans.
> 
> So the MVPP22_CLS_HEK_TAGGED change is a nop?
> 

Yes, it is currently not applied to the classifier.

> > Also add missing IP Fragmentation Flag.
> 
> What's the impact of this change? Seems like it should be a separate
> patch.

I will seperate it out in a new patch.
The classifier should distinguish between fragmented and unfragmented packets.
At the moment this is not correct and all matches are only for unfragmented packets.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] net: mvpp2: classifier flow remove tagged
  2023-03-15  7:53   ` Sven Auhagen
@ 2023-03-15 10:19     ` Maxime Chevallier
  2023-03-15 10:29       ` Sven Auhagen
  2023-03-15 17:39       ` Sven Auhagen
  0 siblings, 2 replies; 8+ messages in thread
From: Maxime Chevallier @ 2023-03-15 10:19 UTC (permalink / raw)
  To: Sven Auhagen; +Cc: netdev, mw, linux, kuba, davem

On Wed, 15 Mar 2023 08:53:30 +0100
Sven Auhagen <sven.auhagen@voleatech.de> wrote:

> On Wed, Mar 15, 2023 at 08:31:48AM +0100, Maxime Chevallier wrote:
> > Hello Sven,  
> 
> Hello Maxime,
> 
> > 
> > On Sat, 11 Mar 2023 08:09:48 +0100
> > Sven Auhagen <Sven.Auhagen@voleatech.de> wrote:
> >   
> > > The classifier attribute MVPP22_CLS_HEK_TAGGED
> > > has no effect in the definition and is filtered out by default.  
> > 
> > It's been a while since I've worked in this, but it looks like the
> > non-tagged and tagged flows will start behaving the same way with
> > this patch, which isn't what we want. Offsets to extract the
> > various fields change based on the presence or not of a vlan tag,
> > hence why we have all these flow definitions.
> >   
> 
> In the sense of a match kind of.
> There is one classifier match for no VLAN and one for any number of
> VLANs. So no VLAN will match twice, correct.
> 
> This is the case right now anyway though since
> mvpp2_port_rss_hash_opts_set is filtering out MVPP22_CLS_HEK_TAGGED
> for all rss hash options that are set in the driver at the moment.
> 
> MVPP22_CLS_HEK_TAGGED is also not compatible with
> MVPP22_CLS_HEK_IP4_5T which is probably the reason it is filtered out.
> 
> The HEK can only have a match on up to 4 fields.
> MVPP22_CLS_HEK_IP4_5T already covers 4 fields.

That's not exactly how it works, the HEK comes in play after we have
identified each flow during the parsing step, see my example below.

> I disabled the hash_opts line which removes the HEK_TAGGED and the
> entire rule will fail out and is not added because of that.
> 
> So I am simply removing what is not working in the first place.
> 
> > Did you check that for example RSS still behaves correctly when
> > using tagged and untagged traffic on the same interface ?
> >   
> 
> Yes all RSS work fine, I tested no VLAN, VLAN, QinQ, PPPoE and VLAN +
> PPPoE.
> 
> > I didn't test the QinQ at the time, so it's indeed likely that it
> > doesn't behave as expected, but removing the MVPP22_CLS_HEK_TAGGED
> > will cause issues if you start hashing inbound traffic based on the
> > vlan tag.  
> 
> Please see my comment above.
> 
> > 
> > the MVPP22_CLS_HEK_TAGGED does have an effect, as it's defined a
> > (VLAN id | VLAN_PRI) hashing capability. Removing it will also break
> > the per-vlan-prio rxnfc steering.
> > 
> > Do you have more details on the use-case ? Do you wan to do RSS,
> > steering ?  
> 
> I want to have RSS steering for all cases I tested above.

Can you provide example commands you would use to configure that, so
that we are on the same page ?

> Do you have a different place that I do not know of where
> MVPP22_CLS_HEK_TAGGED is actually loaded?

https://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c#L1647

Here the MVPP22_CLS_HEK_OPT_VLAN is loaded, and by removing
MVPP22_CLS_HEK_TAGGED, this option will get filtered out.

In the flow definitions, the MVPP22_CLS_HEK_TAGGED field indicates the
possible HEK fields we can extract in this flow, not the ones that will
actually be extracted.

It is possible for example to use :
ethtool -N eth0 flow-type tcp4 vlan 0xa000 m 0x1fff action 3 loc 1

This makes any TCP over IPv4 traffic coming on VLAN with a priority of
6 to go in queue 3. In this case, we'll only have the vlan pri in the
HEK. This will therefore apply regardless of the src/dst IP and src/dst
port.

The various flows defined here come from the parser, so when we hit a
particular flow we know that we are dealing with "tagged TCP over IPv4"
traffic, it's then up to the user to decide what to do with it, with
the limitation of 4 HEK fields.

> > 
> > I however do think that the missing frag flags are correct, and
> > should be sent in a separate patch.
> >   
> 
> Will do that in v2.
> 
> > Thanks,
> > 
> > Maxime
> >   
> > > Even if it is applied to the classifier, it would discard double
> > > or tripple tagged vlans.
> > > 
> > > Also add missing IP Fragmentation Flag.
> > > 
> > > Signed-off-by: Sven Auhagen <sven.auhagen@voleatech.de>
> > > 
> > > diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
> > > b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c index
> > > 41d935d1aaf6..efdf8d30f438 100644 ---
> > > a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +++
> > > b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c @@ -44,17 +44,17
> > > @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { /* TCP over IPv4 flows, Not
> > > fragmented, with vlan tag */ MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > MVPP2_FL_IP4_TCP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_5T,
> > >  		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_5T,
> > >  		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_5T,
> > >  		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK),
> > >  
> > > @@ -62,35 +62,38 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > MVPP2_FL_IP4_TCP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > MVPP2_PRS_RI_L3_IP4 |
> > > -		       MVPP2_PRS_RI_L4_TCP,
> > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > MVPP2_FL_IP4_TCP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > MVPP2_PRS_RI_L3_IP4_OPT |
> > > -		       MVPP2_PRS_RI_L4_TCP,
> > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > MVPP2_FL_IP4_TCP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > MVPP2_PRS_RI_L3_IP4_OTHER |
> > > -		       MVPP2_PRS_RI_L4_TCP,
> > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > >  
> > >  	/* TCP over IPv4 flows, fragmented, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > MVPP2_FL_IP4_TCP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > -		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > +		       MVPP2_PRS_RI_L3_IP4 |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > +			   MVPP2_PRS_RI_L4_TCP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > MVPP2_FL_IP4_TCP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > -		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > MVPP2_PRS_RI_L4_TCP,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > +		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > +			   MVPP2_PRS_RI_L4_TCP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > MVPP2_FL_IP4_TCP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > -		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > MVPP2_PRS_RI_L4_TCP,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > +		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > +			   MVPP2_PRS_RI_L4_TCP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	/* UDP over IPv4 flows, Not fragmented, no vlan tag */
> > > @@ -114,17 +117,17 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > >  	/* UDP over IPv4 flows, Not fragmented, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_5T,
> > >  		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_5T,
> > >  		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_5T,
> > >  		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK),
> > >  
> > > @@ -132,35 +135,38 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > MVPP2_FL_IP4_UDP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > MVPP2_PRS_RI_L3_IP4 |
> > > -		       MVPP2_PRS_RI_L4_UDP,
> > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > MVPP2_FL_IP4_UDP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > MVPP2_PRS_RI_L3_IP4_OPT |
> > > -		       MVPP2_PRS_RI_L4_UDP,
> > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > MVPP2_FL_IP4_UDP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > MVPP2_PRS_RI_L3_IP4_OTHER |
> > > -		       MVPP2_PRS_RI_L4_UDP,
> > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > >  
> > >  	/* UDP over IPv4 flows, fragmented, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > MVPP2_FL_IP4_UDP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > -		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > +		       MVPP2_PRS_RI_L3_IP4 |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > +			   MVPP2_PRS_RI_L4_UDP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > MVPP2_FL_IP4_UDP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > -		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > MVPP2_PRS_RI_L4_UDP,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > +		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > +			   MVPP2_PRS_RI_L4_UDP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > MVPP2_FL_IP4_UDP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > -		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > MVPP2_PRS_RI_L4_UDP,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > +		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > +			   MVPP2_PRS_RI_L4_UDP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	/* TCP over IPv6 flows, not fragmented, no vlan tag */
> > > @@ -178,12 +184,12 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > >  	/* TCP over IPv6 flows, not fragmented, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_5T,
> > >  		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_TCP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_5T,
> > >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK),
> > >  
> > > @@ -202,13 +208,13 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > >  	/* TCP over IPv6 flows, fragmented, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6,
> > > MVPP2_FL_IP6_TCP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_2T,
> > >  		       MVPP2_PRS_RI_L3_IP6 |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6,
> > > MVPP2_FL_IP6_TCP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_2T,
> > >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
> > >  		       MVPP2_PRS_IP_MASK),
> > > @@ -228,12 +234,12 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > >  	/* UDP over IPv6 flows, not fragmented, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_5T,
> > >  		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_UDP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_5T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_5T,
> > >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK),
> > >  
> > > @@ -252,13 +258,13 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > >  	/* UDP over IPv6 flows, fragmented, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6,
> > > MVPP2_FL_IP6_UDP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_2T,
> > >  		       MVPP2_PRS_RI_L3_IP6 |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
> > >  		       MVPP2_PRS_IP_MASK),
> > >  
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6,
> > > MVPP2_FL_IP6_UDP_FRAG_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_2T,
> > >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
> > >  		       MVPP2_PRS_IP_MASK),
> > > @@ -279,15 +285,15 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > >  	/* IPv4 flows, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_L3_IP4,
> > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_L3_IP4_OPT,
> > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP4_2T,
> > >  		       MVPP2_PRS_RI_L3_IP4_OTHER,
> > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > >  
> > > @@ -303,11 +309,11 @@ static const struct mvpp2_cls_flow
> > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > >  	/* IPv6 flows, with vlan tag */
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_2T,
> > >  		       MVPP2_PRS_RI_L3_IP6,
> > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
> > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > MVPP22_CLS_HEK_TAGGED,
> > > +		       MVPP22_CLS_HEK_IP6_2T,
> > >  		       MVPP2_PRS_RI_L3_IP6,
> > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > >    
> >   


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] net: mvpp2: classifier flow remove tagged
  2023-03-15 10:19     ` Maxime Chevallier
@ 2023-03-15 10:29       ` Sven Auhagen
  2023-03-15 17:39       ` Sven Auhagen
  1 sibling, 0 replies; 8+ messages in thread
From: Sven Auhagen @ 2023-03-15 10:29 UTC (permalink / raw)
  To: Maxime Chevallier; +Cc: netdev, mw, linux, kuba, davem

On Wed, Mar 15, 2023 at 11:19:50AM +0100, Maxime Chevallier wrote:

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] net: mvpp2: classifier flow remove tagged
  2023-03-15 10:19     ` Maxime Chevallier
  2023-03-15 10:29       ` Sven Auhagen
@ 2023-03-15 17:39       ` Sven Auhagen
  1 sibling, 0 replies; 8+ messages in thread
From: Sven Auhagen @ 2023-03-15 17:39 UTC (permalink / raw)
  To: Maxime Chevallier; +Cc: netdev, mw, linux, kuba, davem

On Wed, Mar 15, 2023 at 11:19:50AM +0100, Maxime Chevallier wrote:
> On Wed, 15 Mar 2023 08:53:30 +0100
> Sven Auhagen <sven.auhagen@voleatech.de> wrote:
> 
> > On Wed, Mar 15, 2023 at 08:31:48AM +0100, Maxime Chevallier wrote:
> > > Hello Sven,  
> > 
> > Hello Maxime,
> > 
> > > 
> > > On Sat, 11 Mar 2023 08:09:48 +0100
> > > Sven Auhagen <Sven.Auhagen@voleatech.de> wrote:
> > >   
> > > > The classifier attribute MVPP22_CLS_HEK_TAGGED
> > > > has no effect in the definition and is filtered out by default.  
> > > 
> > > It's been a while since I've worked in this, but it looks like the
> > > non-tagged and tagged flows will start behaving the same way with
> > > this patch, which isn't what we want. Offsets to extract the
> > > various fields change based on the presence or not of a vlan tag,
> > > hence why we have all these flow definitions.
> > >   
> > 
> > In the sense of a match kind of.
> > There is one classifier match for no VLAN and one for any number of
> > VLANs. So no VLAN will match twice, correct.
> > 
> > This is the case right now anyway though since
> > mvpp2_port_rss_hash_opts_set is filtering out MVPP22_CLS_HEK_TAGGED
> > for all rss hash options that are set in the driver at the moment.
> > 
> > MVPP22_CLS_HEK_TAGGED is also not compatible with
> > MVPP22_CLS_HEK_IP4_5T which is probably the reason it is filtered out.
> > 
> > The HEK can only have a match on up to 4 fields.
> > MVPP22_CLS_HEK_IP4_5T already covers 4 fields.
> 
> That's not exactly how it works, the HEK comes in play after we have
> identified each flow during the parsing step, see my example below.

Sorry there was something off with my last email.
Yes, understood.

> 
> > I disabled the hash_opts line which removes the HEK_TAGGED and the
> > entire rule will fail out and is not added because of that.
> > 
> > So I am simply removing what is not working in the first place.
> > 
> > > Did you check that for example RSS still behaves correctly when
> > > using tagged and untagged traffic on the same interface ?
> > >   
> > 
> > Yes all RSS work fine, I tested no VLAN, VLAN, QinQ, PPPoE and VLAN +
> > PPPoE.
> > 
> > > I didn't test the QinQ at the time, so it's indeed likely that it
> > > doesn't behave as expected, but removing the MVPP22_CLS_HEK_TAGGED
> > > will cause issues if you start hashing inbound traffic based on the
> > > vlan tag.  
> > 
> > Please see my comment above.
> > 
> > > 
> > > the MVPP22_CLS_HEK_TAGGED does have an effect, as it's defined a
> > > (VLAN id | VLAN_PRI) hashing capability. Removing it will also break
> > > the per-vlan-prio rxnfc steering.
> > > 
> > > Do you have more details on the use-case ? Do you wan to do RSS,
> > > steering ?  
> > 
> > I want to have RSS steering for all cases I tested above.
> 
> Can you provide example commands you would use to configure that, so
> that we are on the same page ?

I did not use any custom rss rules.
I just enabled rxhash ethtool -K eno4 rxhash on
and otherwise the default rss opts are all I need:

https://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c#L1734

I am trying to make them work with all the different cases I mentioned.
There was a problem with fragmented packets, QinQ and PPPoE.

> 
> > Do you have a different place that I do not know of where
> > MVPP22_CLS_HEK_TAGGED is actually loaded?
> 
> https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Felixir.bootlin.com%2Flinux%2Flatest%2Fsource%2Fdrivers%2Fnet%2Fethernet%2Fmarvell%2Fmvpp2%2Fmvpp2_cls.c%23L1647&data=05%7C01%7Csven.auhagen%40voleatech.de%7C55114657d9d54ea1d71408db253ed26b%7Cb82a99f679814a7295344d35298f847b%7C0%7C0%7C638144723979910055%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=u78kzZ3oo%2BIxbhgGR1VGp48GbhQRvEokCIhiynwwDMo%3D&reserved=0
> 
> Here the MVPP22_CLS_HEK_OPT_VLAN is loaded, and by removing
> MVPP22_CLS_HEK_TAGGED, this option will get filtered out.
> 
> In the flow definitions, the MVPP22_CLS_HEK_TAGGED field indicates the
> possible HEK fields we can extract in this flow, not the ones that will
> actually be extracted.
> 
> It is possible for example to use :
> ethtool -N eth0 flow-type tcp4 vlan 0xa000 m 0x1fff action 3 loc 1
> 
> This makes any TCP over IPv4 traffic coming on VLAN with a priority of
> 6 to go in queue 3. In this case, we'll only have the vlan pri in the
> HEK. This will therefore apply regardless of the src/dst IP and src/dst
> port.
> 
> The various flows defined here come from the parser, so when we hit a
> particular flow we know that we are dealing with "tagged TCP over IPv4"
> traffic, it's then up to the user to decide what to do with it, with
> the limitation of 4 HEK fields.

I understand your case now when using ethtool.
I will keep the MVPP22_CLS_HEK_TAGGED in and just fix the fragmented
problem in the first patch.

It does not matter much for my use case since I am using the default RSS
hash opts and not a custom one.
In the default RSS the HEK_TAGGED is filtered out and removed.

https://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c#L752

> 
> > > 
> > > I however do think that the missing frag flags are correct, and
> > > should be sent in a separate patch.
> > >   
> > 
> > Will do that in v2.
> > 
> > > Thanks,
> > > 
> > > Maxime
> > >   
> > > > Even if it is applied to the classifier, it would discard double
> > > > or tripple tagged vlans.
> > > > 
> > > > Also add missing IP Fragmentation Flag.
> > > > 
> > > > Signed-off-by: Sven Auhagen <sven.auhagen@voleatech.de>
> > > > 
> > > > diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
> > > > b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c index
> > > > 41d935d1aaf6..efdf8d30f438 100644 ---
> > > > a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +++
> > > > b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c @@ -44,17 +44,17
> > > > @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { /* TCP over IPv4 flows, Not
> > > > fragmented, with vlan tag */ MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > > MVPP2_FL_IP4_TCP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4, MVPP2_FL_IP4_TCP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK),
> > > >  
> > > > @@ -62,35 +62,38 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > > MVPP2_FL_IP4_TCP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > > MVPP2_PRS_RI_L3_IP4 |
> > > > -		       MVPP2_PRS_RI_L4_TCP,
> > > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > > MVPP2_FL_IP4_TCP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > > MVPP2_PRS_RI_L3_IP4_OPT |
> > > > -		       MVPP2_PRS_RI_L4_TCP,
> > > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > > MVPP2_FL_IP4_TCP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > > MVPP2_PRS_RI_L3_IP4_OTHER |
> > > > -		       MVPP2_PRS_RI_L4_TCP,
> > > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > > >  
> > > >  	/* TCP over IPv4 flows, fragmented, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > > MVPP2_FL_IP4_TCP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > -		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_TCP,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > > +		       MVPP2_PRS_RI_L3_IP4 |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > +			   MVPP2_PRS_RI_L4_TCP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > > MVPP2_FL_IP4_TCP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > -		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > > MVPP2_PRS_RI_L4_TCP,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > > +		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > +			   MVPP2_PRS_RI_L4_TCP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP4,
> > > > MVPP2_FL_IP4_TCP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > -		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > > MVPP2_PRS_RI_L4_TCP,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > > +		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > +			   MVPP2_PRS_RI_L4_TCP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	/* UDP over IPv4 flows, Not fragmented, no vlan tag */
> > > > @@ -114,17 +117,17 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > > >  	/* UDP over IPv4 flows, Not fragmented, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4, MVPP2_FL_IP4_UDP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK),
> > > >  
> > > > @@ -132,35 +135,38 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > > MVPP2_FL_IP4_UDP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > > MVPP2_PRS_RI_L3_IP4 |
> > > > -		       MVPP2_PRS_RI_L4_UDP,
> > > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > > MVPP2_FL_IP4_UDP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > > MVPP2_PRS_RI_L3_IP4_OPT |
> > > > -		       MVPP2_PRS_RI_L4_UDP,
> > > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > > MVPP2_FL_IP4_UDP_FRAG_UNTAG, MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_VLAN_NONE |
> > > > MVPP2_PRS_RI_L3_IP4_OTHER |
> > > > -		       MVPP2_PRS_RI_L4_UDP,
> > > > +		       MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK | MVPP2_PRS_RI_VLAN_MASK),
> > > >  
> > > >  	/* UDP over IPv4 flows, fragmented, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > > MVPP2_FL_IP4_UDP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > -		       MVPP2_PRS_RI_L3_IP4 | MVPP2_PRS_RI_L4_UDP,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > > +		       MVPP2_PRS_RI_L3_IP4 |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > +			   MVPP2_PRS_RI_L4_UDP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > > MVPP2_FL_IP4_UDP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > -		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > > MVPP2_PRS_RI_L4_UDP,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > > +		       MVPP2_PRS_RI_L3_IP4_OPT |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > +			   MVPP2_PRS_RI_L4_UDP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP4,
> > > > MVPP2_FL_IP4_UDP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > -		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > > MVPP2_PRS_RI_L4_UDP,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > > +		       MVPP2_PRS_RI_L3_IP4_OTHER |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE |
> > > > +			   MVPP2_PRS_RI_L4_UDP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	/* TCP over IPv6 flows, not fragmented, no vlan tag */
> > > > @@ -178,12 +184,12 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > > >  	/* TCP over IPv6 flows, not fragmented, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_TCP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6, MVPP2_FL_IP6_TCP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > > > MVPP2_PRS_RI_L4_TCP, MVPP2_PRS_IP_MASK),
> > > >  
> > > > @@ -202,13 +208,13 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > > >  	/* TCP over IPv6 flows, fragmented, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6,
> > > > MVPP2_FL_IP6_TCP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP6 |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_TCP6,
> > > > MVPP2_FL_IP6_TCP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_TCP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > > @@ -228,12 +234,12 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > > >  	/* UDP over IPv6 flows, not fragmented, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP6 | MVPP2_PRS_RI_L4_UDP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6, MVPP2_FL_IP6_UDP_NF_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_5T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_5T,
> > > >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > > > MVPP2_PRS_RI_L4_UDP, MVPP2_PRS_IP_MASK),
> > > >  
> > > > @@ -252,13 +258,13 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > > >  	/* UDP over IPv6 flows, fragmented, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6,
> > > > MVPP2_FL_IP6_UDP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP6 |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > >  
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_UDP6,
> > > > MVPP2_FL_IP6_UDP_FRAG_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP6_EXT |
> > > > MVPP2_PRS_RI_IP_FRAG_TRUE | MVPP2_PRS_RI_L4_UDP,
> > > >  		       MVPP2_PRS_IP_MASK),
> > > > @@ -279,15 +285,15 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > > >  	/* IPv4 flows, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP4,
> > > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP4_OPT,
> > > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP4, MVPP2_FL_IP4_TAG,
> > > > -		       MVPP22_CLS_HEK_IP4_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP4_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP4_OTHER,
> > > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > > >  
> > > > @@ -303,11 +309,11 @@ static const struct mvpp2_cls_flow
> > > > cls_flows[MVPP2_N_PRS_FLOWS] = { 
> > > >  	/* IPv6 flows, with vlan tag */
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP6,
> > > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > > >  	MVPP2_DEF_FLOW(MVPP22_FLOW_IP6, MVPP2_FL_IP6_TAG,
> > > > -		       MVPP22_CLS_HEK_IP6_2T |
> > > > MVPP22_CLS_HEK_TAGGED,
> > > > +		       MVPP22_CLS_HEK_IP6_2T,
> > > >  		       MVPP2_PRS_RI_L3_IP6,
> > > >  		       MVPP2_PRS_RI_L3_PROTO_MASK),
> > > >    
> > >   
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-03-15 17:40 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-11  7:09 [PATCH 1/3] net: mvpp2: classifier flow remove tagged Sven Auhagen
2023-03-15  6:58 ` Jakub Kicinski
2023-03-15  7:56   ` Sven Auhagen
2023-03-15  7:31 ` Maxime Chevallier
2023-03-15  7:53   ` Sven Auhagen
2023-03-15 10:19     ` Maxime Chevallier
2023-03-15 10:29       ` Sven Auhagen
2023-03-15 17:39       ` Sven Auhagen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).