--- 1.11/drivers/base/power/resume.c Mon Aug 25 11:08:21 2003 +++ edited/drivers/base/power/resume.c Fri Oct 10 21:06:07 2003 @@ -22,8 +22,17 @@ int resume_device(struct device * dev) { - if (dev->bus && dev->bus->resume) - return dev->bus->resume(dev); + if (dev->bus && dev->bus->resume) { + int retval; + + /* drop lock so the call can use device_del() to clean up + * after unplugged (or otherwise vanished) child devices + */ + up(&dpm_sem); + retval = dev->bus->resume(dev); + down(&dpm_sem); + return retval; + } return 0; }