From: David Woodhouse Date: Fri, 27 Oct 2023 18:36:51 +0000 (+0100) Subject: ACPI: processor_idle: use raw_safe_halt() in acpi_idle_play_dead() X-Git-Tag: v6.6.7~431 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=73111754b5260ce3b8cebcb31b3fdcabfd5e9401;p=platform%2Fkernel%2Flinux-starfive.git ACPI: processor_idle: use raw_safe_halt() in acpi_idle_play_dead() commit 9bb69ba4c177dccaa1f5b5cbdf80b67813328348 upstream. Xen HVM guests were observed taking triple-faults when attempting to online a previously offlined vCPU. Investigation showed that the fault was coming from a failing call to lockdep_assert_irqs_disabled(), in load_current_idt() which was too early in the CPU bringup to actually catch the exception and report the failure cleanly. This was a false positive, caused by acpi_idle_play_dead() setting the per-cpu hardirqs_enabled flag by calling safe_halt(). Switch it to use raw_safe_halt() instead, which doesn't do so. Signed-off-by: David Woodhouse Acked-by: Peter Zijlstra (Intel) Cc: 6.6+ # 6.6+ Signed-off-by: Rafael J. Wysocki Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 3a34a8c..55437f5 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c @@ -592,7 +592,7 @@ static int acpi_idle_play_dead(struct cpuidle_device *dev, int index) while (1) { if (cx->entry_method == ACPI_CSTATE_HALT) - safe_halt(); + raw_safe_halt(); else if (cx->entry_method == ACPI_CSTATE_SYSTEMIO) { io_idle(cx->address); } else