Panic when a device is trying to recursively acquire rather than hang

indefinitely. Improve error messages from other panics.
This commit is contained in:
Warner Losh 2015-07-24 04:56:46 +00:00
parent ef88ae77ea
commit d2e3ed5af6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=285833

View File

@ -564,6 +564,10 @@ gpiobus_acquire_bus(device_t busdev, device_t child, int how)
GPIOBUS_ASSERT_UNLOCKED(sc);
GPIOBUS_LOCK(sc);
if (sc->sc_owner != NULL) {
if (sc->sc_owner == child)
panic("%s: %s still owns the bus.",
device_get_nameunit(busdev),
device_get_nameunit(child));
if (how == GPIOBUS_DONTWAIT) {
GPIOBUS_UNLOCK(sc);
return (EWOULDBLOCK);
@ -586,9 +590,14 @@ gpiobus_release_bus(device_t busdev, device_t child)
GPIOBUS_ASSERT_UNLOCKED(sc);
GPIOBUS_LOCK(sc);
if (sc->sc_owner == NULL)
panic("gpiobus: releasing unowned bus.");
panic("%s: %s releasing unowned bus.",
device_get_nameunit(busdev),
device_get_nameunit(child));
if (sc->sc_owner != child)
panic("gpiobus: you don't own the bus. game over.");
panic("%s: %s trying to release bus owned by %s",
device_get_nameunit(busdev),
device_get_nameunit(child),
device_get_nameunit(sc->sc_owner));
sc->sc_owner = NULL;
wakeup(sc);
GPIOBUS_UNLOCK(sc);