summaryrefslogtreecommitdiffstats
path: root/sys/arm/ti
diff options
context:
space:
mode:
authorloos <loos@FreeBSD.org>2016-12-30 20:48:22 +0000
committerloos <loos@FreeBSD.org>2016-12-30 20:48:22 +0000
commitddbb1e5b9738fa9c1eb44463805c8bcf36221a81 (patch)
treec9f909dac81479e45e8c69f36ad027ac844184aa /sys/arm/ti
parent6220234a477533edd88e3c4d543967c6da5af3c3 (diff)
downloadFreeBSD-src-ddbb1e5b9738fa9c1eb44463805c8bcf36221a81.zip
FreeBSD-src-ddbb1e5b9738fa9c1eb44463805c8bcf36221a81.tar.gz
MFC r308692:
Fix ti_gpio_detach() to avoid crashing if something goes wrong. Sponsored by: Rubicon Communication, LLC (Netgate)
Diffstat (limited to 'sys/arm/ti')
-rw-r--r--sys/arm/ti/ti_gpio.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/arm/ti/ti_gpio.c b/sys/arm/ti/ti_gpio.c
index 583a65a..fbaa2dd 100644
--- a/sys/arm/ti/ti_gpio.c
+++ b/sys/arm/ti/ti_gpio.c
@@ -782,7 +782,8 @@ ti_gpio_detach(device_t dev)
/* Disable all interrupts */
if (sc->sc_mem_res != NULL)
ti_gpio_intr_clr(sc, 0xffffffff);
- gpiobus_detach_bus(dev);
+ if (sc->sc_busdev != NULL)
+ gpiobus_detach_bus(dev);
#ifdef INTRNG
if (sc->sc_isrcs != NULL)
ti_gpio_pic_detach(sc);
@@ -801,10 +802,12 @@ ti_gpio_detach(device_t dev)
bus_teardown_intr(dev, sc->sc_irq_res,
sc->sc_irq_hdl);
}
- bus_release_resource(dev, SYS_RES_IRQ, sc->sc_irq_rid,
- sc->sc_irq_res);
- bus_release_resource(dev, SYS_RES_MEMORY, sc->sc_mem_rid,
- sc->sc_mem_res);
+ if (sc->sc_irq_res)
+ bus_release_resource(dev, SYS_RES_IRQ, sc->sc_irq_rid,
+ sc->sc_irq_res);
+ if (sc->sc_mem_res)
+ bus_release_resource(dev, SYS_RES_MEMORY, sc->sc_mem_rid,
+ sc->sc_mem_res);
TI_GPIO_LOCK_DESTROY(sc);
return (0);
OpenPOWER on IntegriCloud