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

Commit 2d571b33 authored by Alexey Starikovskiy's avatar Alexey Starikovskiy Committed by Len Brown
Browse files

ACPICA: hw: Don't carry spinlock over suspend

ACPI uses acpi_get_register() in order to get into suspend.
This function is guarded by acpi_gbl_hardware_lock, which will be carried
into resume phase.
At resume interrupts are enabled and first ACPI interrupt deadlocks on this
lock.
Solution seems to be to not lock register read, as there are no concurrent
activity at this point.

Reference: http://bugzilla.kernel.org/show_bug.cgi?id=7499



Signed-off-by: default avatarAlexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent d30dc9ab
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -398,7 +398,8 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
	/* Wait until we enter sleep state */
	/* Wait until we enter sleep state */


	do {
	do {
		status = acpi_get_register(ACPI_BITREG_WAKE_STATUS, &in_value);
		status = acpi_get_register_unlocked(ACPI_BITREG_WAKE_STATUS,
						    &in_value);
		if (ACPI_FAILURE(status)) {
		if (ACPI_FAILURE(status)) {
			return_ACPI_STATUS(status);
			return_ACPI_STATUS(status);
		}
		}
+2 −0
Original line number Original line Diff line number Diff line
@@ -314,6 +314,8 @@ acpi_resource_to_address64(struct acpi_resource *resource,
 */
 */
acpi_status acpi_get_register(u32 register_id, u32 * return_value);
acpi_status acpi_get_register(u32 register_id, u32 * return_value);


acpi_status acpi_get_register_unlocked(u32 register_id, u32 *return_value);

acpi_status acpi_set_register(u32 register_id, u32 value);
acpi_status acpi_set_register(u32 register_id, u32 value);


acpi_status
acpi_status