• Wen Congyang's avatar
    memory-hotplug: consider compound pages when free memmap · 8a356ce3
    Wen Congyang authored
    usemap could also be allocated as compound pages.  Should also consider
    compound pages when freeing memmap.
    
    If we don't fix it, there could be problems when we free vmemmap
    pagetables which are stored in compound pages.  The old pagetables will
    not be freed properly, and when we add the memory again, no new
    pagetable will be created.  And the old pagetable entry is used, than
    the kernel will panic.
    
    The call trace is like the following:
    
      BUG: unable to handle kernel paging request at ffffea0040000000
      IP: [<ffffffff816a483f>] sparse_add_one_section+0xef/0x166
      PGD 7ff7d4067 PUD 78e035067 PMD 78e11d067 PTE 0
      Oops: 0002 [#1] SMP
      Modules linked in: ip6table_filter ip6_tables ebtable_nat ebtables nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack ipt_REJECT xt_CHECKSUM iptable_mangle iptable_filter ip_tables bridge stp llc sunrpc 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 sg lpc_ich mfd_core i2c_i801 i2c_core i7core_edac edac_core ioatdma e1000e igb dca ptp pps_core sd_mod crc_t10dif megaraid_sas mptsas mptscsih mptbase scsi_transport_sas scsi_mod
      CPU 0
      Pid: 4, comm: kworker/0:0 Tainted: G        W 3.8.0-rc3-phy-hot-remove+ #3 FUJITSU-SV PRIMEQUEST 1800E/SB
      RIP: 0010:[<ffffffff816a483f>]  [<ffffffff816a483f>] sparse_add_one_section+0xef/0x166
      RSP: 0018:ffff8807bdcb35d8  EFLAGS: 00010006
      RAX: 0000000000000000 RBX: 0000000000000200 RCX: 0000000000200000
      RDX: ffff88078df01148 RSI: 0000000000000282 RDI: ffffea0040000000
      RBP: ffff8807bdcb3618 R08: 4cf05005b019467a R09: 0cd98fa09631467a
      R10: 0000000000000000 R11: 0000000000030e20 R12: 0000000000008000
      R13: ffffea0040000000 R14: ffff88078df66248 R15: ffff88078ea13b10
      FS:  0000000000000000(0000) GS:ffff8807c1a00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: ffffea0040000000 CR3: 0000000001c0c000 CR4: 00000000000007f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process kworker/0:0 (pid: 4, threadinfo ffff8807bdcb2000, task ffff8807bde18000)
      Call Trace:
        __add_pages+0x85/0x120
        arch_add_memory+0x71/0xf0
        add_memory+0xd6/0x1f0
        acpi_memory_device_add+0x170/0x20c
        acpi_device_probe+0x50/0x18a
        really_probe+0x6c/0x320
        driver_probe_device+0x47/0xa0
        __device_attach+0x53/0x60
        bus_for_each_drv+0x6c/0xa0
        device_attach+0xa8/0xc0
        bus_probe_device+0xb0/0xe0
        device_add+0x301/0x570
        device_register+0x1e/0x30
        acpi_device_register+0x1d8/0x27c
        acpi_add_single_object+0x1df/0x2b9
        acpi_bus_check_add+0x112/0x18f
        acpi_ns_walk_namespace+0x105/0x255
        acpi_walk_namespace+0xcf/0x118
        acpi_bus_scan+0x5b/0x7c
        acpi_bus_add+0x2a/0x2c
        container_notify_cb+0x112/0x1a9
        acpi_ev_notify_dispatch+0x46/0x61
        acpi_os_execute_deferred+0x27/0x34
        process_one_work+0x20e/0x5c0
        worker_thread+0x12e/0x370
        kthread+0xee/0x100
        ret_from_fork+0x7c/0xb0
      Code: 00 00 48 89 df 48 89 45 c8 e8 3e 71 b1 ff 48 89 c2 48 8b 75 c8 b8 ef ff ff ff f6 02 01 75 4b 49 63 cc 31 c0 4c 89 ef 48 c1 e1 06 <f3> aa 48 8b 02 48 83 c8 01 48 85 d2 48 89 02 74 29 a8 01 74 25
      RIP  [<ffffffff816a483f>] sparse_add_one_section+0xef/0x166
       RSP <ffff8807bdcb35d8>
      CR2: ffffea0040000000
      ---[ end trace e7f94e3a34c442d4 ]---
      Kernel panic - not syncing: Fatal exception
    Signed-off-by: default avatarWen Congyang <wency@cn.fujitsu.com>
    Signed-off-by: default avatarTang Chen <tangchen@cn.fujitsu.com>
    Cc: Jiang Liu <jiang.liu@huawei.com>
    Cc: Jianguo Wu <wujianguo@huawei.com>
    Cc: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
    Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8a356ce3
sparse.c 20.9 KB