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:
parent
976ba8c6b2
commit
7c280087a4
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user