[PW_SID:1067824] [v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown#1629
[PW_SID:1067824] [v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown#1629linux-riscv-bot wants to merge 1 commit intoworkflow__riscv__fixesfrom
Conversation
…tdown Currently, the RISC-V implementation of machine_restart(), machine_halt(), and machine_power_off() invokes the kernel teardown chains (e.g., do_kernel_restart()) with local interrupts enabled and other CPUs still running. This implementation fails to provide a deterministic execution environment for registered handlers in the restart or power-off notifier chains. These chains are intended to be executed in a strict atomic and single-threaded context. Specifically, under CONFIG_PREEMPT_RCU, rcu_read_lock() does not increment the preempt_count. If local interrupts remain enabled, the environment is not guaranteed to be atomic. This can lead to a context misidentification within generic kernel teardown code, causing it to incorrectly enter non-atomic paths (such as attempting to acquire sleeping locks), which results in fatal "scheduling while atomic" splats or system hangs. Additionally, stopping other CPUs ensures the primary CPU has exclusive access to the hardware state during the final teardown phase, preventing unpredictable interference from other active cores. Align RISC-V with other major architectures by disabling local interrupts and stopping other CPUs at the beginning of the shutdown sequences. This guarantees the architectural expectations of the kernel's restart and power-off handlers are met. Signed-off-by: Troy Mitchell <troy.mitchell@linux.dev> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
|
Patch 1: "[v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown" |
PR for series 1067824 applied to workflow__riscv__fixes
Name: [v2] riscv: disable local interrupts and stop other CPUs before reboot/shutdown
URL: https://patchwork.kernel.org/project/linux-riscv/list/?series=1067824
Version: 2