diff options
author | Alexey Starikovskiy <astarikovskiy@suse.de> | 2007-09-30 22:39:42 +0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2007-10-10 01:00:39 -0400 |
commit | 2d571b33cf7efd6a894e765e3cb45587ec5b834a (patch) | |
tree | bdc1a1906488d58fde00d855862090ef2289393d /drivers/acpi | |
parent | d30dc9abb4aacfd4df3f486f22bcbc0531b73283 (diff) | |
download | op-kernel-dev-2d571b33cf7efd6a894e765e3cb45587ec5b834a.zip op-kernel-dev-2d571b33cf7efd6a894e765e3cb45587ec5b834a.tar.gz |
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: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/hardware/hwsleep.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/acpi/hardware/hwsleep.c b/drivers/acpi/hardware/hwsleep.c index 4d0c677..c0577ca 100644 --- a/drivers/acpi/hardware/hwsleep.c +++ b/drivers/acpi/hardware/hwsleep.c @@ -398,7 +398,8 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) /* Wait until we enter sleep state */ 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)) { return_ACPI_STATUS(status); } |