Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2d571b33cf7efd6a894e765e3cb45587ec5b834a
Commit:     2d571b33cf7efd6a894e765e3cb45587ec5b834a
Parent:     d30dc9abb4aacfd4df3f486f22bcbc0531b73283
Author:     Alexey Starikovskiy <[EMAIL PROTECTED]>
AuthorDate: Sun Sep 30 22:39:42 2007 +0400
Committer:  Len Brown <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 01:00:39 2007 -0400

    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 <[EMAIL PROTECTED]>
    Signed-off-by: Len Brown <[EMAIL PROTECTED]>
---
 drivers/acpi/hardware/hwsleep.c |    3 ++-
 include/acpi/acpixf.h           |    2 ++
 2 files changed, 4 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);
                }
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index 3d7ab9e..9512f04 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -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_unlocked(u32 register_id, u32 *return_value);
+
 acpi_status acpi_set_register(u32 register_id, u32 value);
 
 acpi_status
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to