Skip to content

Commit

Permalink
net: add __netdev_alloc_pcpu_stats() to indicate gfp flags
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Pablo Neira Ayuso committed Nov 10, 2015
1 parent 74ec4d5 commit aabc92b
Showing 1 changed file with 15 additions and 12 deletions.
27 changes: 15 additions & 12 deletions include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -2068,20 +2068,23 @@ struct pcpu_sw_netstats {
struct u64_stats_sync syncp;
};

#define netdev_alloc_pcpu_stats(type) \
({ \
typeof(type) __percpu *pcpu_stats = alloc_percpu(type); \
if (pcpu_stats) { \
int __cpu; \
for_each_possible_cpu(__cpu) { \
typeof(type) *stat; \
stat = per_cpu_ptr(pcpu_stats, __cpu); \
u64_stats_init(&stat->syncp); \
} \
} \
pcpu_stats; \
#define __netdev_alloc_pcpu_stats(type, gfp) \
({ \
typeof(type) __percpu *pcpu_stats = alloc_percpu_gfp(type, gfp);\
if (pcpu_stats) { \
int __cpu; \
for_each_possible_cpu(__cpu) { \
typeof(type) *stat; \
stat = per_cpu_ptr(pcpu_stats, __cpu); \
u64_stats_init(&stat->syncp); \
} \
} \
pcpu_stats; \
})

#define netdev_alloc_pcpu_stats(type) \
__netdev_alloc_pcpu_stats(type, GFP_KERNEL);

#include <linux/notifier.h>

/* netdevice notifier chain. Please remember to update the rtnetlink
Expand Down

0 comments on commit aabc92b

Please sign in to comment.