--- src/sys/bus/smbus/smbconf.c 2003/08/07 21:16:47 1.4 +++ src/sys/bus/smbus/smbconf.c 2005/06/02 20:40:38 1.5 @@ -33,6 +33,7 @@ #include #include #include +#include #include "smbconf.h" #include "smbus.h" @@ -130,7 +131,7 @@ int smbus_request_bus(device_t bus, device_t dev, int how) { struct smbus_softc *sc = (struct smbus_softc *)device_get_softc(bus); - int s, error = 0; + int error = 0; /* first, ask the underlying layers if the request is ok */ do { @@ -141,15 +142,13 @@ smbus_request_bus(device_t bus, device_t } while (error == EWOULDBLOCK); while (!error) { - s = splhigh(); + crit_enter(); if (sc->owner && sc->owner != dev) { - splx(s); - + crit_exit(); error = smbus_poll(sc, how); } else { sc->owner = dev; - - splx(s); + crit_exit(); return (0); } @@ -171,7 +170,7 @@ int smbus_release_bus(device_t bus, device_t dev) { struct smbus_softc *sc = (struct smbus_softc *)device_get_softc(bus); - int s, error; + int error; /* first, ask the underlying layers if the release is ok */ error = SMBUS_CALLBACK(device_get_parent(bus), SMB_RELEASE_BUS, NULL); @@ -179,14 +178,13 @@ smbus_release_bus(device_t bus, device_t if (error) return (error); - s = splhigh(); + crit_enter(); if (sc->owner != dev) { - splx(s); + crit_exit(); return (EACCES); } - sc->owner = 0; - splx(s); + crit_exit(); /* wakeup waiting processes */ wakeup(sc);