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

Reply via email to