|
Thomas Bogendoerfer |
235ca1 |
From: Jakub Kicinski <jakub.kicinski@netronome.com>
|
|
Thomas Bogendoerfer |
235ca1 |
Date: Wed, 31 May 2017 08:06:43 -0700
|
|
Thomas Bogendoerfer |
235ca1 |
Subject: sched: add helper for updating statistics on all actions
|
|
Thomas Bogendoerfer |
235ca1 |
Patch-mainline: v4.13-rc1
|
|
Thomas Bogendoerfer |
235ca1 |
Git-commit: d897a638e98c476c56118d0dcc1bc55450504866
|
|
Thomas Bogendoerfer |
235ca1 |
References: bsc#1055968
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
Forgetting to disable preemption around tcf_action_stats_update()
|
|
Thomas Bogendoerfer |
235ca1 |
seems to be a common mistake. Add a helper function for updating
|
|
Thomas Bogendoerfer |
235ca1 |
stats on all actions of a filter.
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
|
Thomas Bogendoerfer |
235ca1 |
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Thomas Bogendoerfer |
235ca1 |
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
|
|
Thomas Bogendoerfer |
235ca1 |
---
|
|
Thomas Bogendoerfer |
235ca1 |
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 10 ---------
|
|
Thomas Bogendoerfer |
235ca1 |
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c | 10 ---------
|
|
Thomas Bogendoerfer |
235ca1 |
drivers/net/ethernet/netronome/nfp/nfp_net_offload.c | 11 +---------
|
|
Thomas Bogendoerfer |
235ca1 |
include/net/pkt_cls.h | 19 ++++++++++++++++++
|
|
Thomas Bogendoerfer |
235ca1 |
4 files changed, 23 insertions(+), 27 deletions(-)
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
|
|
Thomas Bogendoerfer |
235ca1 |
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
|
|
Thomas Bogendoerfer |
235ca1 |
@@ -1862,9 +1862,7 @@ int mlx5e_stats_flower(struct mlx5e_priv
|
|
Thomas Bogendoerfer |
235ca1 |
{
|
|
Thomas Bogendoerfer |
235ca1 |
struct mlx5e_tc_table *tc = &priv->fs.tc;
|
|
Thomas Bogendoerfer |
235ca1 |
struct mlx5e_tc_flow *flow;
|
|
Thomas Bogendoerfer |
235ca1 |
- struct tc_action *a;
|
|
Thomas Bogendoerfer |
235ca1 |
struct mlx5_fc *counter;
|
|
Thomas Bogendoerfer |
235ca1 |
- LIST_HEAD(actions);
|
|
Thomas Bogendoerfer |
235ca1 |
u64 bytes;
|
|
Thomas Bogendoerfer |
235ca1 |
u64 packets;
|
|
Thomas Bogendoerfer |
235ca1 |
u64 lastuse;
|
|
Thomas Bogendoerfer |
235ca1 |
@@ -1883,13 +1881,7 @@ int mlx5e_stats_flower(struct mlx5e_priv
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
mlx5_fc_query_cached(counter, &bytes, &packets, &lastuse);
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
- preempt_disable();
|
|
Thomas Bogendoerfer |
235ca1 |
-
|
|
Thomas Bogendoerfer |
235ca1 |
- tcf_exts_to_list(f->exts, &actions);
|
|
Thomas Bogendoerfer |
235ca1 |
- list_for_each_entry(a, &actions, list)
|
|
Thomas Bogendoerfer |
235ca1 |
- tcf_action_stats_update(a, bytes, packets, lastuse);
|
|
Thomas Bogendoerfer |
235ca1 |
-
|
|
Thomas Bogendoerfer |
235ca1 |
- preempt_enable();
|
|
Thomas Bogendoerfer |
235ca1 |
+ tcf_exts_stats_update(f->exts, bytes, packets, lastuse);
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
return 0;
|
|
Thomas Bogendoerfer |
235ca1 |
}
|
|
Thomas Bogendoerfer |
235ca1 |
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
|
|
Thomas Bogendoerfer |
235ca1 |
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
|
|
Thomas Bogendoerfer |
235ca1 |
@@ -363,8 +363,6 @@ int mlxsw_sp_flower_stats(struct mlxsw_s
|
|
Thomas Bogendoerfer |
235ca1 |
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
|
|
Thomas Bogendoerfer |
235ca1 |
struct mlxsw_sp_acl_ruleset *ruleset;
|
|
Thomas Bogendoerfer |
235ca1 |
struct mlxsw_sp_acl_rule *rule;
|
|
Thomas Bogendoerfer |
235ca1 |
- struct tc_action *a;
|
|
Thomas Bogendoerfer |
235ca1 |
- LIST_HEAD(actions);
|
|
Thomas Bogendoerfer |
235ca1 |
u64 packets;
|
|
Thomas Bogendoerfer |
235ca1 |
u64 lastuse;
|
|
Thomas Bogendoerfer |
235ca1 |
u64 bytes;
|
|
Thomas Bogendoerfer |
235ca1 |
@@ -385,13 +383,7 @@ int mlxsw_sp_flower_stats(struct mlxsw_s
|
|
Thomas Bogendoerfer |
235ca1 |
if (err)
|
|
Thomas Bogendoerfer |
235ca1 |
goto err_rule_get_stats;
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
- preempt_disable();
|
|
Thomas Bogendoerfer |
235ca1 |
-
|
|
Thomas Bogendoerfer |
235ca1 |
- tcf_exts_to_list(f->exts, &actions);
|
|
Thomas Bogendoerfer |
235ca1 |
- list_for_each_entry(a, &actions, list)
|
|
Thomas Bogendoerfer |
235ca1 |
- tcf_action_stats_update(a, bytes, packets, lastuse);
|
|
Thomas Bogendoerfer |
235ca1 |
-
|
|
Thomas Bogendoerfer |
235ca1 |
- preempt_enable();
|
|
Thomas Bogendoerfer |
235ca1 |
+ tcf_exts_stats_update(f->exts, bytes, packets, lastuse);
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
mlxsw_sp_acl_ruleset_put(mlxsw_sp, ruleset);
|
|
Thomas Bogendoerfer |
235ca1 |
return 0;
|
|
Thomas Bogendoerfer |
235ca1 |
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c
|
|
Thomas Bogendoerfer |
235ca1 |
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c
|
|
Thomas Bogendoerfer |
235ca1 |
@@ -84,8 +84,6 @@ static void nfp_net_bpf_stats_reset(stru
|
|
Thomas Bogendoerfer |
235ca1 |
static int
|
|
Thomas Bogendoerfer |
235ca1 |
nfp_net_bpf_stats_update(struct nfp_net *nn, struct tc_cls_bpf_offload *cls_bpf)
|
|
Thomas Bogendoerfer |
235ca1 |
{
|
|
Thomas Bogendoerfer |
235ca1 |
- struct tc_action *a;
|
|
Thomas Bogendoerfer |
235ca1 |
- LIST_HEAD(actions);
|
|
Thomas Bogendoerfer |
235ca1 |
u64 bytes, pkts;
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
pkts = nn->rx_filter.pkts - nn->rx_filter_prev.pkts;
|
|
Thomas Bogendoerfer |
235ca1 |
@@ -94,13 +92,8 @@ nfp_net_bpf_stats_update(struct nfp_net
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
nn->rx_filter_prev = nn->rx_filter;
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
- preempt_disable();
|
|
Thomas Bogendoerfer |
235ca1 |
-
|
|
Thomas Bogendoerfer |
235ca1 |
- tcf_exts_to_list(cls_bpf->exts, &actions);
|
|
Thomas Bogendoerfer |
235ca1 |
- list_for_each_entry(a, &actions, list)
|
|
Thomas Bogendoerfer |
235ca1 |
- tcf_action_stats_update(a, bytes, pkts, nn->rx_filter_change);
|
|
Thomas Bogendoerfer |
235ca1 |
-
|
|
Thomas Bogendoerfer |
235ca1 |
- preempt_enable();
|
|
Thomas Bogendoerfer |
235ca1 |
+ tcf_exts_stats_update(cls_bpf->exts,
|
|
Thomas Bogendoerfer |
235ca1 |
+ bytes, pkts, nn->rx_filter_change);
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
return 0;
|
|
Thomas Bogendoerfer |
235ca1 |
}
|
|
Thomas Bogendoerfer |
235ca1 |
--- a/include/net/pkt_cls.h
|
|
Thomas Bogendoerfer |
235ca1 |
+++ b/include/net/pkt_cls.h
|
|
Thomas Bogendoerfer |
235ca1 |
@@ -136,6 +136,25 @@ static inline void tcf_exts_to_list(cons
|
|
Thomas Bogendoerfer |
235ca1 |
#endif
|
|
Thomas Bogendoerfer |
235ca1 |
}
|
|
Thomas Bogendoerfer |
235ca1 |
|
|
Thomas Bogendoerfer |
235ca1 |
+static inline void
|
|
Thomas Bogendoerfer |
235ca1 |
+tcf_exts_stats_update(const struct tcf_exts *exts,
|
|
Thomas Bogendoerfer |
235ca1 |
+ u64 bytes, u64 packets, u64 lastuse)
|
|
Thomas Bogendoerfer |
235ca1 |
+{
|
|
Thomas Bogendoerfer |
235ca1 |
+#ifdef CONFIG_NET_CLS_ACT
|
|
Thomas Bogendoerfer |
235ca1 |
+ int i;
|
|
Thomas Bogendoerfer |
235ca1 |
+
|
|
Thomas Bogendoerfer |
235ca1 |
+ preempt_disable();
|
|
Thomas Bogendoerfer |
235ca1 |
+
|
|
Thomas Bogendoerfer |
235ca1 |
+ for (i = 0; i < exts->nr_actions; i++) {
|
|
Thomas Bogendoerfer |
235ca1 |
+ struct tc_action *a = exts->actions[i];
|
|
Thomas Bogendoerfer |
235ca1 |
+
|
|
Thomas Bogendoerfer |
235ca1 |
+ tcf_action_stats_update(a, bytes, packets, lastuse);
|
|
Thomas Bogendoerfer |
235ca1 |
+ }
|
|
Thomas Bogendoerfer |
235ca1 |
+
|
|
Thomas Bogendoerfer |
235ca1 |
+ preempt_enable();
|
|
Thomas Bogendoerfer |
235ca1 |
+#endif
|
|
Thomas Bogendoerfer |
235ca1 |
+}
|
|
Thomas Bogendoerfer |
235ca1 |
+
|
|
Thomas Bogendoerfer |
235ca1 |
/**
|
|
Thomas Bogendoerfer |
235ca1 |
* tcf_exts_exec - execute tc filter extensions
|
|
Thomas Bogendoerfer |
235ca1 |
* @skb: socket buffer
|