If device_delete_children() returns an error, bail on the rest of the

detach work and return the error.  Especially don't call iicbus_reset()
since the most likely cause of failing to detach children is that one
of them has IO in progress.
This commit is contained in:
Ian Lepore 2019-12-13 02:20:26 +00:00
parent 976ba8c6b2
commit 7c280087a4

View File

@ -134,10 +134,11 @@ static int
iicbus_detach(device_t dev)
{
struct iicbus_softc *sc = IICBUS_SOFTC(dev);
int err;
if ((err = device_delete_children(dev)) != 0)
return (err);
iicbus_reset(dev, IIC_FASTEST, 0, NULL);
bus_generic_detach(dev);
device_delete_children(dev);
mtx_destroy(&sc->lock);
return (0);
}