diff --git a/net/core/sock.c b/net/core/sock.c index a4e840e..d4f5ad7 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1942,8 +1942,8 @@ static DECLARE_BITMAP(proto_inuse_idx, PROTO_INUSE_NR); #ifdef CONFIG_NET_NS void sock_prot_inuse_add(struct net *net, struct proto *prot, int val) { - int cpu = smp_processor_id(); - per_cpu_ptr(net->core.inuse, cpu)->val[prot->inuse_idx] += val; + per_cpu_ptr(net->core.inuse, get_cpu())->val[prot->inuse_idx] += val; + put_cpu(); } EXPORT_SYMBOL_GPL(sock_prot_inuse_add); @@ -1989,7 +1989,9 @@ static DEFINE_PER_CPU(struct prot_inuse, prot_inuse); void sock_prot_inuse_add(struct net *net, struct proto *prot, int val) { + preempt_disable(); __get_cpu_var(prot_inuse).val[prot->inuse_idx] += val; + preempt_enable(); } EXPORT_SYMBOL_GPL(sock_prot_inuse_add);