diff options
Diffstat (limited to 'sys/boot/kshim/bsd_kernel.c')
-rw-r--r-- | sys/boot/kshim/bsd_kernel.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/sys/boot/kshim/bsd_kernel.c b/sys/boot/kshim/bsd_kernel.c index 36a6d82..c94b755 100644 --- a/sys/boot/kshim/bsd_kernel.c +++ b/sys/boot/kshim/bsd_kernel.c @@ -817,8 +817,12 @@ device_delete_child(device_t dev, device_t child) int error = 0; device_t grandchild; - /* remove children first */ + /* detach parent before deleting children, if any */ + error = device_detach(child); + if (error) + goto done; + /* remove children second */ while ((grandchild = TAILQ_FIRST(&child->dev_children))) { error = device_delete_child(child, grandchild); if (error) { @@ -827,11 +831,6 @@ device_delete_child(device_t dev, device_t child) } } - error = device_detach(child); - - if (error) - goto done; - devclass_delete_device(child->dev_module, child); if (dev != NULL) { |