• J
    drivers/base/memory.c: fix kernel warning during memory hotplug on ppc64 · cb5490a5
    John Allen 提交于
    Fix a bug where a kernel warning is triggered when performing a memory
    hotplug on ppc64.  This warning may also occur on any architecture that
    uses the memory_probe_store interface.
    
      WARNING: at drivers/base/memory.c:200
      CPU: 9 PID: 13042 Comm: systemd-udevd Not tainted 4.4.0-rc4-00113-g0bd0f1e6-dirty #7
      NIP [c00000000055e034] pages_correctly_reserved+0x134/0x1b0
      LR [c00000000055e7f8] memory_subsys_online+0x68/0x140
      Call Trace:
        memory_subsys_online+0x68/0x140
        device_online+0xb4/0x120
        store_mem_state+0xb0/0x180
        dev_attr_store+0x34/0x60
        sysfs_kf_write+0x64/0xa0
        kernfs_fop_write+0x17c/0x1e0
        __vfs_write+0x40/0x160
        vfs_write+0xb8/0x200
        SyS_write+0x60/0x110
        system_call+0x38/0xd0
    
    The warning is triggered because there is a udev rule that automatically
    tries to online memory after it has been added.  The udev rule varies
    from distro to distro, but will generally look something like:
    
      SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online"
    
    On any architecture that uses memory_probe_store to reserve memory, the
    udev rule will be triggered after the first section of the block is
    reserved and will subsequently attempt to online the entire block,
    interrupting the memory reservation process and causing the warning.
    This patch modifies memory_probe_store to add a block of memory with a
    single call to add_memory as opposed to looping through and adding each
    section individually.  A single call to add_memory is protected by the
    mem_hotplug mutex which will prevent the udev rule from onlining memory
    until the reservation of the entire block is complete.
    Signed-off-by: NJohn Allen <jallen@linux.vnet.ibm.com>
    Acked-by: NDave Hansen <dave.hansen@intel.com>
    Cc: Nathan Fontenot <nfont@linux.vnet.ibm.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    cb5490a5
memory.c 18.7 KB