From: William Morrow On some BIOSen, the GPE bit will remain set even if it is disabled, resulting in a interrupt storm. This patch clears the bit before disabling it. Signed-off-by: William Morrow Signed-off-by: Jordan Crouse Cc: "Yu, Luming" Cc: "Brown, Len" Cc: "Moore, Robert" Signed-off-by: Andrew Morton --- drivers/acpi/events/evgpe.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff -puN drivers/acpi/events/evgpe.c~acpi-clear-gpe-before-disabling-it drivers/acpi/events/evgpe.c --- a/drivers/acpi/events/evgpe.c~acpi-clear-gpe-before-disabling-it +++ a/drivers/acpi/events/evgpe.c @@ -683,8 +683,20 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_eve case ACPI_GPE_DISPATCH_METHOD: /* - * Disable the GPE, so it doesn't keep firing before the method has a - * chance to run (it runs asynchronously with interrupts enabled). + * Clear the GPE, so it doesn't keep firing before the method + * has a chance to run (it runs asynchronously with interrupts + * enabled). + */ + status = acpi_hw_clear_gpe(gpe_event_info); + if (ACPI_FAILURE(status)) { + ACPI_EXCEPTION((AE_INFO, status, + "Unable to clear GPE[%2X]", + gpe_number)); + return_UINT32(ACPI_INTERRUPT_NOT_HANDLED); + } + + /* + * Disable GPE, so it doesn't keep happen again. */ status = acpi_ev_disable_gpe(gpe_event_info); if (ACPI_FAILURE(status)) { _