net: mvpp2: cls: Only select applicable flows of classification offload
authorMaxime Chevallier <maxime.chevallier@bootlin.com>
Tue, 18 Jun 2019 14:55:17 +0000 (16:55 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 19 Jun 2019 02:26:04 +0000 (22:26 -0400)
The way we currently handle classification offload and RSS is by having
dedicated lookup sequences in the flow table, each being selected
depending on several fields being present in the packet header.

We need to make sure the classification operation we want to perform can
be done in each flow we want to insert it into. As an example,
classifying on VLAN tag can only be done on flows used for tagged
traffic.

This commit makes sure we don't insert rules in flows we aren't
compatible with.

Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c

index 8af13316ecb1c6fda2379d40403ab8a8a1b75a75..7cd9d6da03198ce16f369abcba80cbdaa52ad3d9 100644 (file)
@@ -1201,6 +1201,9 @@ static int mvpp2_port_flt_rfs_rule_insert(struct mvpp2_port *port,
                if (!flow)
                        return 0;
 
+               if ((rule->hek_fields & flow->supported_hash_opts) != rule->hek_fields)
+                       continue;
+
                index = MVPP2_CLS_FLT_C2_RFS(port->id, flow->flow_id, rule->loc);
 
                mvpp2_cls_flow_read(priv, index, &fe);