Author: tqh Date: 2010-09-08 21:19:49 +0200 (Wed, 08 Sep 2010) New Revision: 38585 Changeset: http://dev.haiku-os.org/changeset/38585 Modified: haiku/trunk/headers/private/kernel/kernel.h haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.cpp haiku/trunk/src/system/kernel/main.cpp haiku/trunk/src/system/kernel/shutdown.cpp Log: Introduce a gSystemShutdown flag to be able to check if system is shutting down. ACPI Embedded Controller now uses polling when it is set to true. This might help with ACPI shutdown issues, if not this change can be reverted. Not verified as it works on all my machines even without this. Modified: haiku/trunk/headers/private/kernel/kernel.h =================================================================== --- haiku/trunk/headers/private/kernel/kernel.h 2010-09-08 17:51:27 UTC (rev 38584) +++ haiku/trunk/headers/private/kernel/kernel.h 2010-09-08 19:19:49 UTC (rev 38585) @@ -49,6 +49,7 @@ /* during kernel startup, interrupts are disabled (among other things) */ extern bool gKernelStartup; +extern bool gKernelShutdown; #ifdef __cplusplus Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.cpp 2010-09-08 17:51:27 UTC (rev 38584) +++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.cpp 2010-09-08 19:19:49 UTC (rev 38585) @@ -604,7 +604,7 @@ * (Not sure if it's needed) */ - if (gKernelStartup || sc->ec_suspending) { + if (gKernelStartup || gKernelShutdown || sc->ec_suspending) { if ((EC_GET_CSR(sc) & EC_EVENT_SCI)) { //CTR0(KTR_ACPI, "ec running gpe handler directly"); EcGpeQueryHandler(sc); @@ -667,7 +667,7 @@ int32 count, i; // int need_poll = cold || rebooting || ec_polled_mode || sc->ec_suspending; - int needPoll = ec_polled_mode || sc->ec_suspending || gKernelStartup; + int needPoll = ec_polled_mode || sc->ec_suspending || gKernelStartup || gKernelShutdown; // The main CPU should be much faster than the EC. So the status should // be "not ready" when we start waiting. But if the main CPU is really Modified: haiku/trunk/src/system/kernel/main.cpp =================================================================== --- haiku/trunk/src/system/kernel/main.cpp 2010-09-08 17:51:27 UTC (rev 38584) +++ haiku/trunk/src/system/kernel/main.cpp 2010-09-08 19:19:49 UTC (rev 38585) @@ -64,6 +64,7 @@ #endif bool gKernelStartup = true; +bool gKernelShutdown = false; static kernel_args sKernelArgs; static uint32 sCpuRendezvous; Modified: haiku/trunk/src/system/kernel/shutdown.cpp =================================================================== --- haiku/trunk/src/system/kernel/shutdown.cpp 2010-09-08 17:51:27 UTC (rev 38584) +++ haiku/trunk/src/system/kernel/shutdown.cpp 2010-09-08 19:19:49 UTC (rev 38585) @@ -15,6 +15,8 @@ int32 cookie = 0; team_info info; + gKernelShutdown = true; + // Now shutdown all system services! // TODO: Once we are sure we can shutdown the system on all hardware // checking reboot may not be necessary anymore.