Skip to content
  • Tang Chen's avatar
    sched: Update sched_domains_numa_masks[][] when new cpus are onlined · 301a5cba
    Tang Chen authored
    
    
    Once array sched_domains_numa_masks[] []is defined, it is never updated.
    
    When a new cpu on a new node is onlined, the coincident member in
    sched_domains_numa_masks[][] is not initialized, and all the masks are 0.
    As a result, the build_overlap_sched_groups() will initialize a NULL
    sched_group for the new cpu on the new node, which will lead to kernel panic:
    
    [ 3189.403280] Call Trace:
    [ 3189.403286]  [<ffffffff8106c36f>] warn_slowpath_common+0x7f/0xc0
    [ 3189.403289]  [<ffffffff8106c3ca>] warn_slowpath_null+0x1a/0x20
    [ 3189.403292]  [<ffffffff810b1d57>] build_sched_domains+0x467/0x470
    [ 3189.403296]  [<ffffffff810b2067>] partition_sched_domains+0x307/0x510
    [ 3189.403299]  [<ffffffff810b1ea2>] ? partition_sched_domains+0x142/0x510
    [ 3189.403305]  [<ffffffff810fcc93>] cpuset_update_active_cpus+0x83/0x90
    [ 3189.403308]  [<ffffffff810b22a8>] cpuset_cpu_active+0x38/0x70
    [ 3189.403316]  [<ffffffff81674b87>] notifier_call_chain+0x67/0x150
    [ 3189.403320]  [<ffffffff81664647>] ? native_cpu_up+0x18a/0x1b5
    [ 3189.403328]  [<ffffffff810a044e>] __raw_notifier_call_chain+0xe/0x10
    [ 3189.403333]  [<ffffffff81070470>] __cpu_notify+0x20/0x40
    [ 3189.403337]  [<ffffffff8166663e>] _cpu_up+0xe9/0x131
    [ 3189.403340]  [<ffffffff81666761>] cpu_up+0xdb/0xee
    [ 3189.403348]  [<ffffffff8165667c>] store_online+0x9c/0xd0
    [ 3189.403355]  [<ffffffff81437640>] dev_attr_store+0x20/0x30
    [ 3189.403361]  [<ffffffff8124aa63>] sysfs_write_file+0xa3/0x100
    [ 3189.403368]  [<ffffffff811ccbe0>] vfs_write+0xd0/0x1a0
    [ 3189.403371]  [<ffffffff811ccdb4>] sys_write+0x54/0xa0
    [ 3189.403375]  [<ffffffff81679c69>] system_call_fastpath+0x16/0x1b
    [ 3189.403377] ---[ end trace 1e6cf85d0859c941 ]---
    [ 3189.403398] BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
    
    This patch registers a new notifier for cpu hotplug notify chain, and
    updates sched_domains_numa_masks every time a new cpu is onlined or offlined.
    
    Signed-off-by: default avatarTang Chen <tangchen@cn.fujitsu.com>
    Signed-off-by: default avatarWen Congyang <wency@cn.fujitsu.com>
    [ fixed compile warning ]
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1348578751-16904-3-git-send-email-tangchen@cn.fujitsu.com
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    301a5cba