• T
    memory-hotplug: move pgdat_resize_lock into sparse_remove_one_section() · cd099682
    Tang Chen 提交于
    In __remove_section(), we locked pgdat_resize_lock when calling
    sparse_remove_one_section().  This lock will disable irq.  But we don't
    need to lock the whole function.  If we do some work to free pagetables
    in free_section_usemap(), we need to call flush_tlb_all(), which need
    irq enabled.  Otherwise the WARN_ON_ONCE() in smp_call_function_many()
    will be triggered.
    
    If we lock the whole sparse_remove_one_section(), then we come to this call trace:
    
      ------------[ cut here ]------------
      WARNING: at kernel/smp.c:461 smp_call_function_many+0xbd/0x260()
      Hardware name: PRIMEQUEST 1800E
      ......
      Call Trace:
        smp_call_function_many+0xbd/0x260
        smp_call_function+0x3b/0x50
        on_each_cpu+0x3b/0xc0
        flush_tlb_all+0x1c/0x20
        remove_pagetable+0x14e/0x1d0
        vmemmap_free+0x18/0x20
        sparse_remove_one_section+0xf7/0x100
        __remove_section+0xa2/0xb0
        __remove_pages+0xa0/0xd0
        arch_remove_memory+0x6b/0xc0
        remove_memory+0xb8/0xf0
        acpi_memory_device_remove+0x53/0x96
        acpi_device_remove+0x90/0xb2
        __device_release_driver+0x7c/0xf0
        device_release_driver+0x2f/0x50
        acpi_bus_remove+0x32/0x6d
        acpi_bus_trim+0x91/0x102
        acpi_bus_hot_remove_device+0x88/0x16b
        acpi_os_execute_deferred+0x27/0x34
        process_one_work+0x20e/0x5c0
        worker_thread+0x12e/0x370
        kthread+0xee/0x100
        ret_from_fork+0x7c/0xb0
      ---[ end trace 25e85300f542aa01 ]---
    Signed-off-by: NTang Chen <tangchen@cn.fujitsu.com>
    Signed-off-by: NLai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
    Acked-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Jiang Liu <jiang.liu@huawei.com>
    Cc: Jianguo Wu <wujianguo@huawei.com>
    Cc: Wu Jianguo <wujianguo@huawei.com>
    Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    cd099682
memory_hotplug.c 38.8 KB