Re: Gadget driver ->disconnect callback during unbinding

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 15 Jun 2017, Peter Chen wrote:

> > > No, ->pullup is expected to be called from UDC core, and the UDC core
> > > makes sure the coming ->disconnect at kinds of situations.
> > 
> > I think you are wrong.  The UDC core calls ->pullup from the 
> > usb_gadget_disconnect() routine, but it does not call ->disconnect from 
> > that routine.
> > 
> 
> You may misunderstand my point, I mean there are always ->disconnect
> call after ->pullup at UDC core, eg, usb_gadget_remove_driver and
> usb_udc_softconn_store. So individual UDC driver does not need
> ->disconnect at its ->pullup implementation.

But a gadget driver can call usb_gadget_disconnect() whenever it 
wants to, because that function is EXPORTed.  When it does, the UDC 
core will not call ->disconnect.

Alan Stern

> > Furthermore, there is an advantage to having the UDC driver call
> > ->disconnect from within its ->pullup method: It can retain its private
> > spinlock across the ->disconnect call.  This will help prevent races.  
> > For example, what would happen if ->disconnect was called while a
> > ->setup callback was in progress?  Or vice versa?
> > 
> 
> You mean the private UDC driver spinlock can help prevent races well for
> ->setup and ->pullup in UDC driver? Yes, it is the good point. I am
> wondering why composite_disconnect has spinlock and without for
> composite_setup.

--
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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux