--- x/drivers/base/core.c +++ y/drivers/base/core.c @@ -3815,6 +3815,8 @@ void device_del(struct device *dev) device_platform_notify_remove(dev); device_links_purge(dev); + bus_notify(dev, BUS_NOTIFY_REMOVED_DEVICE); + kobject_uevent(&dev->kobj, KOBJ_REMOVE); /* * If a device does not have a driver attached, we need to clean * up any managed resources. We do this in device_release(), but @@ -3826,8 +3828,6 @@ void device_del(struct device *dev) */ devres_release_all(dev); - bus_notify(dev, BUS_NOTIFY_REMOVED_DEVICE); - kobject_uevent(&dev->kobj, KOBJ_REMOVE); glue_dir = get_glue_dir(dev); kobject_del(&dev->kobj); cleanup_glue_dir(dev, glue_dir);