net: add __netdev_alloc_pcpu_stats() to indicate gfp flags

nf_tables may create percpu counters from the packet path through its
dynamic set instantiation infrastructure, so we need a way to allocate
this through GFP_ATOMIC.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Acked-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Pablo Neira Ayuso 2015-11-10 14:31:18 +01:00
parent 74ec4d55c4
commit aabc92bbe3
1 changed files with 15 additions and 12 deletions

View File

@ -2068,20 +2068,23 @@ struct pcpu_sw_netstats {
struct u64_stats_sync syncp; struct u64_stats_sync syncp;
}; };
#define netdev_alloc_pcpu_stats(type) \ #define __netdev_alloc_pcpu_stats(type, gfp) \
({ \ ({ \
typeof(type) __percpu *pcpu_stats = alloc_percpu(type); \ typeof(type) __percpu *pcpu_stats = alloc_percpu_gfp(type, gfp);\
if (pcpu_stats) { \ if (pcpu_stats) { \
int __cpu; \ int __cpu; \
for_each_possible_cpu(__cpu) { \ for_each_possible_cpu(__cpu) { \
typeof(type) *stat; \ typeof(type) *stat; \
stat = per_cpu_ptr(pcpu_stats, __cpu); \ stat = per_cpu_ptr(pcpu_stats, __cpu); \
u64_stats_init(&stat->syncp); \ u64_stats_init(&stat->syncp); \
} \ } \
} \ } \
pcpu_stats; \ pcpu_stats; \
}) })
#define netdev_alloc_pcpu_stats(type) \
__netdev_alloc_pcpu_stats(type, GFP_KERNEL);
#include <linux/notifier.h> #include <linux/notifier.h>
/* netdevice notifier chain. Please remember to update the rtnetlink /* netdevice notifier chain. Please remember to update the rtnetlink