Index: sys/dev/acpica/Osd/OsdSchedule.c =================================================================== RCS file: /home/ncvs/src/sys/dev/acpica/Osd/OsdSchedule.c,v retrieving revision 1.32.2.6 diff -u -r1.32.2.6 OsdSchedule.c --- sys/dev/acpica/Osd/OsdSchedule.c 6 Jul 2006 08:32:49 -0000 1.32.2.6 +++ sys/dev/acpica/Osd/OsdSchedule.c 14 Jan 2008 19:06:27 -0000 @@ -106,10 +106,8 @@ at->at_context = Context; switch (Priority) { case OSD_PRIORITY_GPE: - pri = 4; - break; case OSD_PRIORITY_HIGH: - pri = 3; + pri = 4; break; case OSD_PRIORITY_MED: pri = 2; Index: sys/contrib/dev/acpica/evgpe.c =================================================================== RCS file: /home/ncvs/src/sys/contrib/dev/acpica/evgpe.c,v retrieving revision 1.1.1.9.2.1 diff -u -r1.1.1.9.2.1 evgpe.c --- sys/contrib/dev/acpica/evgpe.c 7 Nov 2005 09:55:48 -0000 1.1.1.9.2.1 +++ sys/contrib/dev/acpica/evgpe.c 14 Jan 2008 19:02:15 -0000 @@ -587,6 +587,10 @@ * ******************************************************************************/ +static void +AcpiEvAsynchEnableGpe ( + void *Context); + static void ACPI_SYSTEM_XFACE AcpiEvAsynchExecuteGpeMethod ( void *Context) @@ -656,13 +660,26 @@ } } - if ((LocalGpeEventInfo.Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_LEVEL_TRIGGERED) + /* Defer enabling of GPE until all notify handlers are done */ + AcpiOsExecute(OSL_NOTIFY_HANDLER, AcpiEvAsynchEnableGpe, GpeEventInfo); + return_VOID; +} + +static void +AcpiEvAsynchEnableGpe ( + void *Context) +{ + ACPI_GPE_EVENT_INFO *GpeEventInfo = (void *) Context; + ACPI_STATUS Status; + + if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == + ACPI_GPE_LEVEL_TRIGGERED) { /* * GPE is level-triggered, we clear the GPE status bit after * handling the event. */ - Status = AcpiHwClearGpe (&LocalGpeEventInfo); + Status = AcpiHwClearGpe (GpeEventInfo); if (ACPI_FAILURE (Status)) { return_VOID; @@ -671,7 +688,7 @@ /* Enable this GPE */ - (void) AcpiHwWriteGpeEnableReg (&LocalGpeEventInfo); + (void) AcpiHwWriteGpeEnableReg (GpeEventInfo); return_VOID; }