summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorloos <loos@FreeBSD.org>2016-12-30 20:48:22 +0000
committerLuiz Souza <luiz@netgate.com>2017-07-17 14:40:44 -0500
commitdd1acdc3453c78ebead0cfe029622d1aa7513f34 (patch)
tree01609f69845be09b72bc66df07ac3026c2df6063
parente962be5686ab67404c9baa6de33086cc43673a82 (diff)
downloadFreeBSD-src-dd1acdc3453c78ebead0cfe029622d1aa7513f34.zip
FreeBSD-src-dd1acdc3453c78ebead0cfe029622d1aa7513f34.tar.gz
MFC r308692:
Fix ti_gpio_detach() to avoid crashing if something goes wrong. Sponsored by: Rubicon Communication, LLC (Netgate) (cherry picked from commit ddbb1e5b9738fa9c1eb44463805c8bcf36221a81)
-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