ACPICA: Events: Stop unconditionally clearing ACPI IRQs during suspend/resume
authorErik Schmauss <erik.schmauss@intel.com>
Wed, 14 Mar 2018 23:12:57 +0000 (16:12 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sun, 18 Mar 2018 17:51:59 +0000 (18:51 +0100)
Unconditionally clearing ACPI IRQs during suspend/resume can lead to
unexpected IRQ losts. This patch fixes this issue by removing such IRQ
clearing code.

If this patch triggers regression, the regression should be in the GPE
handlers that cannot correctly determine some spurious triggered events as
no-ops. Please report any regression related to this commit to the ACPI
component on kernel bugzilla. Lv Zheng.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=196249
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Reported-and-tested-by: Eric Bakula-Davis <ericbakuladavis@gmail.com>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/evgpe.c
drivers/acpi/acpica/hwgpe.c
drivers/acpi/acpica/hwsleep.c
drivers/acpi/acpica/hwxfsleep.c

index 410a3907c0518a2e9fc2d51cd344d54b4299fec2..6d5f6e4fe3ac8a9f09b73ddd36e18b8199985490 100644 (file)
@@ -105,7 +105,7 @@ acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info)
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Clear a GPE of stale events and enable it.
+ * DESCRIPTION: Enable a GPE.
  *
  ******************************************************************************/
 
@@ -115,13 +115,6 @@ acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
 
        ACPI_FUNCTION_TRACE(ev_enable_gpe);
 
-       /* Clear the GPE (of stale events) */
-
-       status = acpi_hw_clear_gpe(gpe_event_info);
-       if (ACPI_FAILURE(status)) {
-               return_ACPI_STATUS(status);
-       }
-
        /* Enable the requested GPE */
 
        status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE);
index c1c54af148d0b54855b24560b37ea388c119646f..fb722eccfc2a62a00cfa24d07490b401de4d6123 100644 (file)
@@ -497,7 +497,6 @@ acpi_status acpi_hw_disable_all_gpes(void)
        ACPI_FUNCTION_TRACE(hw_disable_all_gpes);
 
        status = acpi_ev_walk_gpe_list(acpi_hw_disable_gpe_block, NULL);
-       status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block, NULL);
        return_ACPI_STATUS(status);
 }
 
index c85c373ecbc4e3012fe422d8227ae15768c2c9f5..1844d1f782d4a64825a162758b612122d83977bc 100644 (file)
@@ -85,15 +85,8 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
                return_ACPI_STATUS(status);
        }
 
-       /* Clear all fixed and general purpose status bits */
-
-       status = acpi_hw_clear_acpi_status();
-       if (ACPI_FAILURE(status)) {
-               return_ACPI_STATUS(status);
-       }
-
        /*
-        * 1) Disable/Clear all GPEs
+        * 1) Disable all GPEs
         * 2) Enable all wakeup GPEs
         */
        status = acpi_hw_disable_all_gpes();
@@ -299,7 +292,7 @@ acpi_status acpi_hw_legacy_wake(u8 sleep_state)
         * might get fired there
         *
         * Restore the GPEs:
-        * 1) Disable/Clear all GPEs
+        * 1) Disable all GPEs
         * 2) Enable all runtime GPEs
         */
        status = acpi_hw_disable_all_gpes();
index 589c774bbf9a71184346e2627328746a7387c2ff..546f168792fce48f750403c4e0d00bc6797adb2d 100644 (file)
@@ -209,7 +209,7 @@ acpi_status acpi_enter_sleep_state_s4bios(void)
        }
 
        /*
-        * 1) Disable/Clear all GPEs
+        * 1) Disable all GPEs
         * 2) Enable all wakeup GPEs
         */
        status = acpi_hw_disable_all_gpes();