Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8da83734 authored by Toshi Kani's avatar Toshi Kani Committed by Rafael J. Wysocki
Browse files

ACPI / processor: Fix STARTING/DYING action in acpi_cpu_soft_notify()



During CPU online/offline testing on a large system, one of the
processors got stuck after the message "bad: scheduling from the
idle thread!".  The problem is that acpi_cpu_soft_notify() calls
acpi_bus_get_device() for all action types.  CPU_STARTING and
CPU_DYING do not allow the notify handlers to sleep.  However,
acpi_bus_get_device() can sleep in acpi_ut_acquire_mutex().

Change acpi_cpu_soft_notify() to return immediately for CPU_STARTING
and CPU_DYING as they have no action in this handler.

Signed-off-by: default avatarToshi Kani <toshi.kani@hp.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent c401eb8e
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -121,6 +121,13 @@ static int acpi_cpu_soft_notify(struct notifier_block *nfb,
	struct acpi_processor *pr = per_cpu(processors, cpu);
	struct acpi_device *device;

	/*
	 * CPU_STARTING and CPU_DYING must not sleep. Return here since
	 * acpi_bus_get_device() may sleep.
	 */
	if (action == CPU_STARTING || action == CPU_DYING)
		return NOTIFY_DONE;

	if (!pr || acpi_bus_get_device(pr->handle, &device))
		return NOTIFY_DONE;