From 5ef9c1079e8d4cc3c336dc815671b2607a9bc91f Mon Sep 17 00:00:00 2001 From: Ian Lepore Date: Sat, 15 Jun 2019 16:36:29 +0000 Subject: [PATCH] In detach(), check for failure of bus_generic_detach(), only release resources if they got allocated (because detach() gets called from attach() to handle various failures), and delete the pwmbus child if it got created. --- sys/arm/allwinner/aw_pwm.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sys/arm/allwinner/aw_pwm.c b/sys/arm/allwinner/aw_pwm.c index 7944fad78a57..ff7322a96007 100644 --- a/sys/arm/allwinner/aw_pwm.c +++ b/sys/arm/allwinner/aw_pwm.c @@ -192,12 +192,20 @@ static int aw_pwm_detach(device_t dev) { struct aw_pwm_softc *sc; + int error; sc = device_get_softc(dev); - bus_generic_detach(sc->dev); + if (((error = bus_generic_detach(sc->dev)) != 0) { + device_printf(sc->dev, "cannot detach child devices\n"); + return (error); + } - bus_release_resources(dev, aw_pwm_spec, &sc->res); + if (sc->busdev != NULL) + device_delete_child(dev, sc->busdev); + + if (sc->res != NULL) + bus_release_resources(dev, aw_pwm_spec, &sc->res); return (0); }