diff options
author | Ido Schimmel <idosch@mellanox.com> | 2019-08-17 16:28:11 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-08-17 12:40:08 -0700 |
commit | cac1174fa17f2cf5d504cbe00c0053f0b9e3b58d (patch) | |
tree | 19361e6055a96e62562992f3e9889c7d046d12c6 /net/core/drop_monitor.c | |
parent | 9b63f57d4ab981e18e35def3349040527ead93c3 (diff) | |
download | linux-stable-cac1174fa17f2cf5d504cbe00c0053f0b9e3b58d.tar.gz linux-stable-cac1174fa17f2cf5d504cbe00c0053f0b9e3b58d.tar.bz2 linux-stable-cac1174fa17f2cf5d504cbe00c0053f0b9e3b58d.zip |
drop_monitor: Initialize hardware per-CPU data
Like software drops, hardware drops also need the same type of per-CPU
data. Therefore, initialize it during module initialization and
de-initialize it during module exit.
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/drop_monitor.c')
-rw-r--r-- | net/core/drop_monitor.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c index 349ab78b8c3e..aa9147a18329 100644 --- a/net/core/drop_monitor.c +++ b/net/core/drop_monitor.c @@ -76,6 +76,7 @@ struct dm_hw_stat_delta { static struct genl_family net_drop_monitor_family; static DEFINE_PER_CPU(struct per_cpu_dm_data, dm_cpu_data); +static DEFINE_PER_CPU(struct per_cpu_dm_data, dm_hw_cpu_data); static int dm_hit_limit = 64; static int dm_delay = 1; @@ -966,6 +967,22 @@ static void net_dm_cpu_data_fini(int cpu) __net_dm_cpu_data_fini(data); } +static void net_dm_hw_cpu_data_init(int cpu) +{ + struct per_cpu_dm_data *hw_data; + + hw_data = &per_cpu(dm_hw_cpu_data, cpu); + __net_dm_cpu_data_init(hw_data); +} + +static void net_dm_hw_cpu_data_fini(int cpu) +{ + struct per_cpu_dm_data *hw_data; + + hw_data = &per_cpu(dm_hw_cpu_data, cpu); + __net_dm_cpu_data_fini(hw_data); +} + static int __init init_net_drop_monitor(void) { int cpu, rc; @@ -992,8 +1009,10 @@ static int __init init_net_drop_monitor(void) rc = 0; - for_each_possible_cpu(cpu) + for_each_possible_cpu(cpu) { net_dm_cpu_data_init(cpu); + net_dm_hw_cpu_data_init(cpu); + } goto out; @@ -1014,8 +1033,10 @@ static void exit_net_drop_monitor(void) * we are guarnateed not to have any current users when we get here */ - for_each_possible_cpu(cpu) + for_each_possible_cpu(cpu) { + net_dm_hw_cpu_data_fini(cpu); net_dm_cpu_data_fini(cpu); + } BUG_ON(genl_unregister_family(&net_drop_monitor_family)); } |