Use lockmgr locks for ACPI_SERIAL_*
authorAlexander Polakov <polachok@gmail.com>
Sun, 1 Nov 2009 20:03:31 +0000 (23:03 +0300)
committerAlexander Polakov <polachok@gmail.com>
Sun, 8 Nov 2009 20:27:15 +0000 (23:27 +0300)
Suggested by dillon@

sys/dev/acpica5/acpi.c
sys/dev/acpica5/acpi_acad.c
sys/dev/acpica5/acpi_battery.c
sys/dev/acpica5/acpi_cmbat.c
sys/dev/acpica5/acpi_ec.c
sys/dev/acpica5/acpi_lid.c
sys/dev/acpica5/acpi_pci.c
sys/dev/acpica5/acpi_pci_link.c
sys/dev/acpica5/acpi_pcib.c
sys/dev/acpica5/acpi_powerres.c
sys/dev/acpica5/acpivar.h

index fd22ed0..d5786f9 100644 (file)
@@ -414,7 +414,6 @@ acpi_attach(device_t dev)
 
     ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
 
-    //lwkt_serialize_init(&acpi_sxlock);
     sc = device_get_softc(dev);
     sc->acpi_dev = dev;
     callout_init(&sc->susp_force_to);
@@ -441,9 +440,8 @@ acpi_attach(device_t dev)
        panic("acpi rman_init memory failed");
 
     /* Initialise the ACPI mutex */
-#ifdef notyet
-    spin_init(&acpi_mutex);
-#endif
+    ACPI_LOCK_INIT(acpi, "acpi");
+    ACPI_SERIAL_INIT(acpi);
 
     /*
      * Set the globals from our tunables.  This is needed because ACPI-CA
@@ -2178,7 +2176,9 @@ acpi_sleep_force(void *arg)
 int
 acpi_ReqSleepState(struct acpi_softc *sc, int state)
 {
+#ifdef notyet
     struct apm_clone_data *clone;
+#endif
 
     if (state < ACPI_STATE_S1 || state > ACPI_STATE_S5)
        return (EINVAL);
@@ -2622,7 +2622,7 @@ acpi_wake_sysctl_walk(device_t dev)
            kfree(devlist, M_TEMP);
        return (error);
     }
-#ifdef notye
+#ifdef notyet
     for (i = 0; i < numdevs; i++) {
        child = devlist[i];
        acpi_wake_sysctl_walk(child);
index 6fc7b7b..059045d 100644 (file)
@@ -164,6 +164,8 @@ acpi_acad_attach(device_t dev)
     if (error != 0)
        return (error);
 
+    ACPI_SERIAL_INIT(acad);
+
     if (device_get_unit(dev) == 0) {
        acpi_sc = acpi_device_get_parent_softc(dev);
        SYSCTL_ADD_PROC(&acpi_sc->acpi_sysctl_ctx,
index 93a58a9..5e66ab2 100644 (file)
@@ -66,6 +66,7 @@ acpi_battery_register(device_t dev)
     int error;
 
     error = 0;
+    ACPI_SERIAL_INIT(battery);
     ACPI_SERIAL_BEGIN(battery);
     if (!acpi_batteries_initted)
        error = acpi_battery_init();
index a69b4bc..bd8c781 100644 (file)
@@ -133,6 +133,8 @@ acpi_cmbat_attach(device_t dev)
     handle = acpi_get_handle(dev);
     sc->dev = dev;
 
+    ACPI_SERIAL_INIT(cmbat);
+
     timespecclear(&sc->bst_lastupdated);
 
     error = acpi_battery_register(dev);
index d5a7c86..b2dc22c 100644 (file)
@@ -461,6 +461,7 @@ acpi_ec_attach(device_t dev)
     params = acpi_get_private(dev);
     sc->ec_dev = dev;
     sc->ec_handle = acpi_get_handle(dev);
+    ACPI_SERIAL_INIT(ec);
 
     /* Retrieve previously probed values via device ivars. */
     sc->ec_glk = params->glk;
index 9633839..ba1ed01 100644 (file)
@@ -108,6 +108,8 @@ acpi_lid_attach(device_t dev)
     sc->lid_dev = dev;
     sc->lid_handle = acpi_get_handle(dev);
 
+    ACPI_SERIAL_INIT(lid);
+
     /*
      * If a system does not get lid events, it may make sense to change
      * the type to ACPI_ALL_NOTIFY.  Some systems generate both a wake and
index 895d6e0..a008f53 100644 (file)
@@ -331,6 +331,8 @@ acpi_pci_attach(device_t dev)
               device_printf(dev, "domain=%d, physical bus=%d\n",
                     domain, busno);
 
+       ACPI_SERIAL_INIT(pci_powerstate);
+
        /*
         * First, PCI devices are added as in the normal PCI bus driver.
         * Afterwards, the ACPI namespace under the bridge driver is
index 2e78cdf..986fa6f 100644 (file)
@@ -434,6 +434,7 @@ acpi_pci_link_attach(device_t dev)
 
        sc = device_get_softc(dev);
        sc->pl_dev = dev;
+       ACPI_SERIAL_INIT(pci_link);
        ACPI_SERIAL_BEGIN(pci_link);
 
        /*
index 425c6d5..03dddbd 100644 (file)
@@ -146,6 +146,8 @@ acpi_pcib_attach(device_t dev, ACPI_BUFFER *prt, int busno)
     if (!acpi_DeviceIsPresent(dev))
        return_VALUE(ENXIO);
 
+    ACPI_SERIAL_INIT(pcib);
+
     /*
      * Get the PCI interrupt routing table for this bus.  If we can't
      * get it, this is not an error but may reduce functionality.  There
index d5fee40..1263680 100644 (file)
@@ -119,10 +119,11 @@ static struct acpi_powerconsumer
 static void
 acpi_pwr_init(void *junk)
 {
+    ACPI_SERIAL_INIT(powerres);
     TAILQ_INIT(&acpi_powerresources);
     TAILQ_INIT(&acpi_powerconsumers);
 }
-// SYSINIT(acpi_powerresource, SI_SUB_TUNABLES, SI_ORDER_ANY, acpi_pwr_init, NULL);
+SYSINIT(acpi_powerresource, SI_BOOT1_TUNABLES, SI_ORDER_ANY, acpi_pwr_init, NULL);
 
 /*
  * Register a power resource.
index 5957d19..7ab19cf 100644 (file)
@@ -38,7 +38,7 @@
 #include "bus_if.h"
 #include <sys/eventhandler.h>
 #include <sys/sysctl.h>
-#if __FreeBSD_version >= 500000
+#if __FreeBSD_version >= 500000 || defined(__DragonFly__)
 #include <sys/lock.h>
 #include <sys/mutex.h>
 #endif
@@ -165,11 +165,11 @@ extern struct lock acpi_lock;
 #define ACPI_LOCK_DECL(sys, name)       static struct lock sys##_lock;
 #define ACPI_LOCK_INIT(sys, name)       lockinit(&sys##_lock, name, 0, 0);
 
-#define ACPI_SERIAL_INIT(sys)           lwkt_serialize_init(&sys##_serializer);
-#define ACPI_SERIAL_BEGIN(sys)          lwkt_serialize_enter(&sys##_serializer);
-#define ACPI_SERIAL_END(sys)            lwkt_serialize_exit(&sys##_serializer);
-#define ACPI_SERIAL_ASSERT(sys)         ASSERT_SERIALIZED(&sys##_serializer);
-#define ACPI_SERIAL_DECL(sys, name)     static struct lwkt_serialize sys##_serializer;
+#define ACPI_SERIAL_INIT(sys)           lockinit(&sys##_serial, #sys, 0, 0);
+#define ACPI_SERIAL_BEGIN(sys)          lockmgr(&sys##_serial, LK_EXCLUSIVE|LK_RETRY);
+#define ACPI_SERIAL_END(sys)            lockmgr(&sys##_serial, LK_RELEASE);
+#define ACPI_SERIAL_ASSERT(sys)         KKASSERT(lockstatus(&sys##_serial, curthread) == LK_EXCLUSIVE);
+#define ACPI_SERIAL_DECL(sys, name)     static struct lock sys##_serial;
 /*
  * ACPI CA does not define layers for non-ACPI CA drivers.
  * We define some here within the range provided.