Make sure to tear down the svc and flush any on-going hotplug processing
before removing the remaining interfaces.
This fixes crashes due to host-device removal racing with svc
hotplug/unplug processing (e.g. at "UniPro restart").
Testing Done:
Verified that this fixes crashes reproducible on SDB when unloading the
host-device driver module while generating hotplug/unplug events.
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
void gb_hd_del(struct gb_host_device *hd)
{
- gb_interfaces_remove(hd);
-
+ /*
+ * Tear down the svc and flush any on-going hotplug processing before
+ * removing the remaining interfaces.
+ */
gb_svc_del(hd->svc);
+ gb_interfaces_remove(hd);
device_del(&hd->dev);
}