• H
    stop_machine/cpu hotplug: fix disable_nonboot_cpus · a0e280e0
    Heiko Carstens 提交于
    disable_nonboot_cpus calls _cpu_down. But _cpu_down requires that the
    caller already created the stop_machine workqueue (like cpu_down does).
    Otherwise a call to stop_machine will lead to accesses to random memory
    regions.
    
    When introducing this new interface (9ea09af3
    "stop_machine: introduce stop_machine_create/destroy") I missed the second
    call site of _cpu_down.
    So add the missing stop_machine_create/destroy calls to disable_nonboot_cpus
    as well.
    
    Fixes suspend-to-ram/disk and also this bug:
    
    [  286.547348] BUG: unable to handle kernel paging request at 6b6b6b6b
    [  286.548940] IP: [<c0150ca4>] __stop_machine+0x88/0xe3
    [  286.550598] Oops: 0002 [#1] SMP
    [  286.560580] Pid: 3273, comm: halt Not tainted (2.6.28-06127-g238c6d54
    [  286.560580] EIP: is at __stop_machine+0x88/0xe3
    [  286.560580] Process halt (pid: 3273, ti=f1a28000 task=f4530f30
    [  286.560580] Call Trace:
    [  286.560580]  [<c03d04e4>] ? _cpu_down+0x10f/0x234
    [  286.560580]  [<c012a57e>] ? disable_nonboot_cpus+0x58/0xdc
    [  286.560580]  [<c01360c0>] ? kernel_poweroff+0x22/0x39
    [  286.560580]  [<c0136301>] ? sys_reboot+0xde/0x14c
    [  286.560580]  [<c01331b2>] ? complete_signal+0x179/0x191
    [  286.560580]  [<c0133396>] ? send_signal+0x1cc/0x1e1
    [  286.560580]  [<c03de418>] ? _spin_unlock_irqrestore+0x2d/0x3c
    [  286.560580]  [<c0133b65>] ? group_send_signal_info+0x58/0x61
    [  286.560580]  [<c0133b9e>] ? kill_pid_info+0x30/0x3a
    [  286.560580]  [<c0133d49>] ? sys_kill+0x75/0x13a
    [  286.560580]  [<c01a06cb>] ? mntput_no_expire+ox1f/0x101
    [  286.560580]  [<c019b3b3>] ? dput+0x1e/0x105
    [  286.560580]  [<c018ef87>] ?  __fput+0x150/0x158
    [  286.560580]  [<c0157abf>] ? audit_syscall_entry+0x137/0x159
    [  286.560580]  [<c010329f>] ? sysenter_do_call+0x12/0x34
    Reported-and-tested-by: N"Justin P. Mattock" <justinmattock@gmail.com>
    Reviewed-by: NPekka Enberg <penberg@cs.helsinki.fi>
    Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
    Tested-by: NIngo Molnar <mingo@elte.hu>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    a0e280e0
cpu.c 13.8 KB