Skip to content
  • Wen Congyang's avatar
    cpu_hotplug: clear apicid to node when the cpu is hotremoved · c4c60524
    Wen Congyang authored
    
    
    When a cpu is hotpluged, we call acpi_map_cpu2node() in
    _acpi_map_lsapic() to store the cpu's node and apicid's node.  But we
    don't clear the cpu's node in acpi_unmap_lsapic() when this cpu is
    hotremoved.  If the node is also hotremoved, we will get the following
    messages:
    
      kernel BUG at include/linux/gfp.h:329!
      invalid opcode: 0000 [#1] SMP
      Modules linked in: ebtable_nat ebtables ipt_MASQUERADE iptable_nat nf_nat xt_CHECKSUM iptable_mangle bridge stp llc sunrpc ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 iptable_filter ip_tables ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter ip6_tables binfmt_misc dm_mirror dm_region_hash dm_log dm_mod vhost_net macvtap macvlan tun uinput iTCO_wdt iTCO_vendor_support coretemp kvm_intel kvm crc32c_intel microcode pcspkr i2c_i801 i2c_core lpc_ich mfd_core ioatdma e1000e i7core_edac edac_core sg acpi_memhotplug igb dca sd_mod crc_t10dif megaraid_sas mptsas mptscsih mptbase scsi_transport_sas scsi_mod
      Pid: 3126, comm: init Not tainted 3.6.0-rc3-tangchen-hostbridge+ #13 FUJITSU-SV PRIMEQUEST 1800E/SB
      RIP: 0010:[<ffffffff811bc3fd>]  [<ffffffff811bc3fd>] allocate_slab+0x28d/0x300
      RSP: 0018:ffff88078a049cf8  EFLAGS: 00010246
      RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000
      RDX: 0000000000000001 RSI: 0000000000000001 RDI: 0000000000000246
      RBP: ffff88078a049d38 R08: 00000000000040d0 R09: 0000000000000001
      R10: 0000000000000000 R11: 0000000000000b5f R12: 00000000000052d0
      R13: ffff8807c1417300 R14: 0000000000030038 R15: 0000000000000003
      FS:  00007fa9b1b44700(0000) GS:ffff8807c3800000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: 00007fa9b09acca0 CR3: 000000078b855000 CR4: 00000000000007e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process init (pid: 3126, threadinfo ffff88078a048000, task ffff8807bb6f2650)
      Call Trace:
        new_slab+0x30/0x1b0
        __slab_alloc+0x358/0x4c0
        kmem_cache_alloc_node_trace+0xb4/0x1e0
        alloc_fair_sched_group+0xd0/0x1b0
        sched_create_group+0x3e/0x110
        sched_autogroup_create_attach+0x4d/0x180
        sys_setsid+0xd4/0xf0
        system_call_fastpath+0x16/0x1b
      Code: 89 c4 e9 73 fe ff ff 31 c0 89 de 48 c7 c7 45 de 9e 81 44 89 45 c8 e8 22 05 4b 00 85 db 44 8b 45 c8 0f 89 4f ff ff ff 0f 0b eb fe <0f> 0b 90 eb fd 0f 0b eb fe 89 de 48 c7 c7 45 de 9e 81 31 c0 44
      RIP  [<ffffffff811bc3fd>] allocate_slab+0x28d/0x300
       RSP <ffff88078a049cf8>
      ---[ end trace adf84c90f3fea3e5 ]---
    
    The reason is that the cpu's node is not NUMA_NO_NODE, we will call
    alloc_pages_exact_node() to alloc memory on the node, but the node is
    offlined.
    
    If the node is onlined, we still need cpu's node.  For example: a task
    on the cpu is sleeped when the cpu is hotremoved.  We will choose
    another cpu to run this task when it is waked up.  If we know the cpu's
    node, we will choose the cpu on the same node first.  So we should clear
    cpu-to-node mapping when the node is offlined.
    
    This patch only clears apicid-to-node mapping when the cpu is
    hotremoved.
    
    [akpm@linux-foundation.org: fix section error]
    Signed-off-by: default avatarWen Congyang <wency@cn.fujitsu.com>
    Signed-off-by: default avatarTang Chen <tangchen@cn.fujitsu.com>
    Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Jiang Liu <liuj97@gmail.com>
    Cc: Minchan Kim <minchan.kim@gmail.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Mel Gorman <mel@csn.ul.ie>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c4c60524