diff options
author | Volodymyr Mytnyk <vmytnyk@marvell.com> | 2021-12-15 13:07:30 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-12-16 13:52:53 +0300 |
commit | 604ba230902d23c6e85c7dba9cfcb6a37661cb12 (patch) | |
tree | 502615009b513064045b88055796a71a5a3a5d6e /drivers/net/ethernet/marvell/prestera/prestera_flow.c | |
parent | a5dba0f207e59dfe7a985e52ca4ce2ca9a33750a (diff) | |
download | linux-604ba230902d23c6e85c7dba9cfcb6a37661cb12.tar.xz |
net: prestera: flower template support
Add user template explicit support. At this moment, max
TCAM rule size is utilized for all rules, doesn't matter
which and how much flower matches are provided by user. It
means that some of TCAM space is wasted, which impacts
the number of filters that can be offloaded.
Introducing the template, allows to have more HW offloaded
filters by specifying the template explicitly.
Example:
tc qd add dev PORT clsact
tc chain add dev PORT ingress protocol ip \
flower dst_ip 0.0.0.0/16
tc filter add dev PORT ingress protocol ip \
flower skip_sw dst_ip 1.2.3.4/16 action drop
NOTE: chain 0 is the default chain id for "tc chain" & "tc filter"
command, so it is omitted in the example above.
This patch adds only template support for default chain 0 suppoerted
by prestera driver at this moment. Chains are not supported yet,
and will be added later.
Signed-off-by: Volodymyr Mytnyk <vmytnyk@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/marvell/prestera/prestera_flow.c')
-rw-r--r-- | drivers/net/ethernet/marvell/prestera/prestera_flow.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_flow.c b/drivers/net/ethernet/marvell/prestera/prestera_flow.c index 94a1feb3d9e1..d849f046ece7 100644 --- a/drivers/net/ethernet/marvell/prestera/prestera_flow.c +++ b/drivers/net/ethernet/marvell/prestera/prestera_flow.c @@ -40,6 +40,11 @@ static int prestera_flow_block_flower_cb(struct prestera_flow_block *block, return 0; case FLOW_CLS_STATS: return prestera_flower_stats(block, f); + case FLOW_CLS_TMPLT_CREATE: + return prestera_flower_tmplt_create(block, f); + case FLOW_CLS_TMPLT_DESTROY: + prestera_flower_tmplt_destroy(block, f); + return 0; default: return -EOPNOTSUPP; } @@ -64,6 +69,8 @@ static void prestera_flow_block_destroy(void *cb_priv) { struct prestera_flow_block *block = cb_priv; + prestera_flower_template_cleanup(block); + WARN_ON(!list_empty(&block->binding_list)); kfree(block); |