Commit 18996f2d authored by Erik Schmauss's avatar Erik Schmauss Committed by Rafael J. Wysocki

ACPICA: Events: Stop unconditionally clearing ACPI IRQs during suspend/resume

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=196249Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Reported-and-tested-by: default avatarEric Bakula-Davis <ericbakuladavis@gmail.com>
Tested-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: default avatarErik Schmauss <erik.schmauss@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 97f3c0a4
...@@ -105,7 +105,7 @@ acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info) ...@@ -105,7 +105,7 @@ acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info)
* *
* RETURN: Status * 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) ...@@ -115,13 +115,6 @@ acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
ACPI_FUNCTION_TRACE(ev_enable_gpe); 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 */ /* Enable the requested GPE */
status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE); status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE);
......
...@@ -497,7 +497,6 @@ acpi_status acpi_hw_disable_all_gpes(void) ...@@ -497,7 +497,6 @@ acpi_status acpi_hw_disable_all_gpes(void)
ACPI_FUNCTION_TRACE(hw_disable_all_gpes); 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_disable_gpe_block, NULL);
status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block, NULL);
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
......
...@@ -85,15 +85,8 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state) ...@@ -85,15 +85,8 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
return_ACPI_STATUS(status); 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 * 2) Enable all wakeup GPEs
*/ */
status = acpi_hw_disable_all_gpes(); status = acpi_hw_disable_all_gpes();
...@@ -299,7 +292,7 @@ acpi_status acpi_hw_legacy_wake(u8 sleep_state) ...@@ -299,7 +292,7 @@ acpi_status acpi_hw_legacy_wake(u8 sleep_state)
* might get fired there * might get fired there
* *
* Restore the GPEs: * Restore the GPEs:
* 1) Disable/Clear all GPEs * 1) Disable all GPEs
* 2) Enable all runtime GPEs * 2) Enable all runtime GPEs
*/ */
status = acpi_hw_disable_all_gpes(); status = acpi_hw_disable_all_gpes();
......
...@@ -209,7 +209,7 @@ acpi_status acpi_enter_sleep_state_s4bios(void) ...@@ -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 * 2) Enable all wakeup GPEs
*/ */
status = acpi_hw_disable_all_gpes(); status = acpi_hw_disable_all_gpes();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment