The default NR_CPUS can be very large, but actual possible nr_cpu_ids usually is very small. For some x86 distribution, the NR_CPUS is 8192 and nr_cpu_ids is 4.
when xfrm_init is running, num_possible_cpus() should work Signed-off-by: Li RongQing <lirongq...@baidu.com> Signed-off-by: Wang Li <wangl...@baidu.com> --- net/xfrm/xfrm_policy.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 40b54cc64243..cbb862463cbd 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -2988,12 +2988,13 @@ static struct pernet_operations __net_initdata xfrm_net_ops = { void __init xfrm_init(void) { int i; + unsigned int nr_cpus = num_possible_cpus(); - xfrm_pcpu_work = kmalloc_array(NR_CPUS, sizeof(*xfrm_pcpu_work), + xfrm_pcpu_work = kmalloc_array(nr_cpus, sizeof(*xfrm_pcpu_work), GFP_KERNEL); BUG_ON(!xfrm_pcpu_work); - for (i = 0; i < NR_CPUS; i++) + for (i = 0; i < nr_cpus; i++) INIT_WORK(&xfrm_pcpu_work[i], xfrm_pcpu_work_fn); register_pernet_subsys(&xfrm_net_ops); -- 2.16.2