> > @@ -348,23 +356,14 @@ static void usb_gadget_remove_driver(struct > usb_udc *udc) > > */ > > void usb_del_gadget_udc(struct usb_gadget *gadget) { > > - struct usb_udc *udc = NULL; > > - > > - mutex_lock(&udc_lock); > > - list_for_each_entry(udc, &udc_list, list) > > - if (udc->gadget == gadget) > > - goto found; > > - > > - dev_err(gadget->dev.parent, "gadget not registered.\n"); > > - mutex_unlock(&udc_lock); > > + struct usb_udc *udc = usb_gadget_find_udc(gadget); > > > > - return; > > + if (!udc) > > + return; > > > > -found: > > dev_vdbg(gadget->dev.parent, "unregistering gadget\n"); > > > > list_del(&udc->list); > > - mutex_unlock(&udc_lock); > > I believe udc->list linkage to udc_list still should be protected with udc_lock, > otherwise this will race with usb_add_gadget_udc_release(). > Thanks, it indeed should be. Peter -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html