Index: sys/dev/gpio/gpiobus.c =================================================================== --- sys/dev/gpio/gpiobus.c (revision 221961) +++ sys/dev/gpio/gpiobus.c (working copy) @@ -73,14 +73,13 @@ static int gpiobus_pin_get(device_t, device_t, uint32_t, unsigned int*); static int gpiobus_pin_toggle(device_t, device_t, uint32_t); -#define GPIOBUS_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx) -#define GPIOBUS_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx) +#define GPIOBUS_LOCK(_sc) sx_xlock(&(_sc)->sc_sx) +#define GPIOBUS_UNLOCK(_sc) sx_xunlock(&(_sc)->sc_sx) #define GPIOBUS_LOCK_INIT(_sc) \ - mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->sc_dev), \ - "gpiobus", MTX_DEF) -#define GPIOBUS_LOCK_DESTROY(_sc) mtx_destroy(&_sc->sc_mtx); -#define GPIOBUS_ASSERT_LOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_OWNED); -#define GPIOBUS_ASSERT_UNLOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_NOTOWNED); + sx_init(&_sc->sc_sx, device_get_nameunit(_sc->sc_dev)) +#define GPIOBUS_LOCK_DESTROY(_sc) sx_destroy(&_sc->sc_sx); +#define GPIOBUS_ASSERT_LOCKED(_sc) sx_assert(&_sc->sc_sx, SA_XLOCKED); +#define GPIOBUS_ASSERT_UNLOCKED(_sc) sx_assert(&_sc->sc_sx, SA_UNLOCKED); static void @@ -222,8 +221,6 @@ int err, ndevs, i; device_t *devlist; - KASSERT(mtx_initialized(&sc->sc_mtx), - ("gpiobus mutex not initialized")); GPIOBUS_LOCK_DESTROY(sc); if ((err = bus_generic_detach(dev)) != 0) Index: sys/dev/gpio/gpiobusvar.h =================================================================== --- sys/dev/gpio/gpiobusvar.h (revision 221961) +++ sys/dev/gpio/gpiobusvar.h (working copy) @@ -32,14 +32,14 @@ #include #include -#include +#include #define GPIOBUS_IVAR(d) (struct gpiobus_ivar *) device_get_ivars(d) #define GPIOBUS_SOFTC(d) (struct gpiobus_softc *) device_get_softc(d) struct gpiobus_softc { - struct mtx sc_mtx; /* bus mutex */ + struct sx sc_sx; /* bus lock */ device_t sc_busdev; /* bus device */ device_t sc_owner; /* bus owner */ device_t sc_dev; /* driver device */