gadget: Clearing ep->desc in struct usb_ep on EP disable?

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


I am confused as to whether the UDC driver should be clearing ep->desc
in the usb_ep struct.

Commit f9c56cdd3905c96c600456203637bd7ec8ec6383 (usb: gadget: Clear
usb_endpoint_descriptor inside the struct usb_ep on disable) indicates
that f_serial will have problems if the UDC driver does not clear

But I also see code in u_ether.c:eth_stop() which seems to assume the opposite:

		if (netif_carrier_ok(net)) {
			DBG(dev, "host still using in/out endpoints\n");

The helper functions are:

static inline int usb_ep_disable(struct usb_ep *ep)
	return ep->ops->disable(ep);

static inline int usb_ep_enable(struct usb_ep *ep)
	return ep->ops->enable(ep, ep->desc);

eth_stop() runs on "ifconfig usb0 down".

If my UDC driver clears ep->desc on disable, the subsequent
usb_ep_enable() passes in a NULL endpoint descriptor; the call fails
and this causes major trouble when I try to re-enable the usb0
interface (ifconfig usb0 up).  rx_fill() winds up trying to queue
transactions on a disabled endpoint.

Looking at the dummy_hcd driver for reference, I see that it clears
its own private ep->desc (in struct dummy_ep) but doesn't touch the
pointer in struct usb_ep.  Other UDC drivers now behave differently
due to the commit referenced above.

Is anyone able to shed any light on this?

To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at

B and H Foto and Electronics Corp.

[Linux Media]     [Video for Linux]     [Linux Input]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Free Online Dating]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]     [More Archives]

Add to Google Powered by Linux