[haiku-commits] r38585 - in haiku/trunk: headers/private/kernel src/add-ons/kernel/bus_managers/acpi src/system/kernel

  • From: fredrik.holmqvist@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 8 Sep 2010 21:19:49 +0200 (CEST)

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.


Other related posts:

  • » [haiku-commits] r38585 - in haiku/trunk: headers/private/kernel src/add-ons/kernel/bus_managers/acpi src/system/kernel - fredrik . holmqvist