diff options
author | Edward Cree <ecree@solarflare.com> | 2020-05-20 19:18:10 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-05-22 15:52:08 -0700 |
commit | 060b6381efe58478e1d7dfff7a1e76a73a6377db (patch) | |
tree | 2ddae67686976fea72d805cd55e3627f0be77391 /net | |
parent | df0651f8c0cc29603598f1de99426fd862365fc2 (diff) | |
download | linux-riscv-060b6381efe58478e1d7dfff7a1e76a73a6377db.tar.gz linux-riscv-060b6381efe58478e1d7dfff7a1e76a73a6377db.tar.bz2 linux-riscv-060b6381efe58478e1d7dfff7a1e76a73a6377db.zip |
net: flow_offload: simplify hw stats check handling
Make FLOW_ACTION_HW_STATS_DONT_CARE be all bits, rather than none, so that
drivers and __flow_action_hw_stats_check can use simple bitwise checks.
Pre-fill all actions with DONT_CARE in flow_rule_alloc(), rather than
relying on implicit semantics of zero from kzalloc, so that callers which
don't configure action stats themselves (i.e. netfilter) get the correct
behaviour by default.
Only the kernel's internal API semantics change; the TC uAPI is unaffected.
v4: move DONT_CARE setting to flow_rule_alloc() for robustness and simplicity.
v3: set DONT_CARE in nft and ct offload.
v2: rebased on net-next, removed RFC tags.
Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/flow_offload.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/core/flow_offload.c b/net/core/flow_offload.c index e951b743bed3..e64941c526b1 100644 --- a/net/core/flow_offload.c +++ b/net/core/flow_offload.c @@ -8,6 +8,7 @@ struct flow_rule *flow_rule_alloc(unsigned int num_actions) { struct flow_rule *rule; + int i; rule = kzalloc(struct_size(rule, action.entries, num_actions), GFP_KERNEL); @@ -15,6 +16,11 @@ struct flow_rule *flow_rule_alloc(unsigned int num_actions) return NULL; rule->action.num_entries = num_actions; + /* Pre-fill each action hw_stats with DONT_CARE. + * Caller can override this if it wants stats for a given action. + */ + for (i = 0; i < num_actions; i++) + rule->action.entries[i].hw_stats = FLOW_ACTION_HW_STATS_DONT_CARE; return rule; } |