--- x/drivers/usb/gadget/udc/core.c +++ y/drivers/usb/gadget/udc/core.c @@ -1435,9 +1435,11 @@ static void usb_gadget_remove_driver(str udc->driver->unbind(udc->gadget); usb_gadget_udc_stop(udc); + device_lock(&udc->dev); udc->driver = NULL; udc->dev.driver = NULL; udc->gadget->dev.driver = NULL; + device_unlock(&udc->dev); } /** --- x/drivers/base/core.c +++ y/drivers/base/core.c @@ -2316,8 +2316,10 @@ static int dev_uevent(struct kobject *ko if (dev->type && dev->type->name) add_uevent_var(env, "DEVTYPE=%s", dev->type->name); + device_lock(dev); if (dev->driver) add_uevent_var(env, "DRIVER=%s", dev->driver->name); + device_unlock(dev); /* Add common DT information about the device */ of_device_uevent(dev, env);