--- drivers/acpi/events/evgpe.c.orig 2006-08-03 18:52:32.000000000 -0600 +++ drivers/acpi/events/evgpe.c 2006-08-18 15:17:03.000000000 -0600 @@ -637,18 +637,6 @@ handler-> context); - /* It is now safe to clear level-triggered events. */ - - if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) == - ACPI_GPE_LEVEL_TRIGGERED) { - 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); - } - } break; case ACPI_GPE_DISPATCH_METHOD: @@ -701,6 +689,21 @@ break; } + /* It is now safe to clear level-triggered events. */ + if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) == + ACPI_GPE_LEVEL_TRIGGERED) { + /* + * Clear GPE, so interrupt doesn't storm + */ + 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); + } + } + return_UINT32(ACPI_INTERRUPT_HANDLED); }