On Wed, Apr 13, 2011 at 09:47:55AM -0700, Sarah Sharp wrote: > Nope, apparently I was wrong and the patch is a different streams issue. > Have you seen this issue in your UAS testing, Dmitry? > No, this one I has not seen [yet?]. > Sarah > > 8<------------------------------------------------------------->8 > > From: Matthew Wilcox <willy@xxxxxxxxxxxxxxx> > > If I unplug a device while the UAS driver is loaded, I get an oops > in usb_free_streams(). This is because usb_unbind_interface() calls > usb_disable_interface() which calls usb_disable_endpoint() which sets > ep_out and ep_in to NULL. Then the UAS driver calls usb_pipe_endpoint() > which returns a NULL pointer and passes an array of NULL pointers to > usb_free_streams(). > > I think the correct fix for this is to check for the NULL pointer > in usb_free_streams() rather than making the driver check for this > situation. My original patch for this checked for dev->state == > USB_STATE_NOTATTACHED, but the call to usb_disable_interface() is > conditional, so not all drivers would want this check. > > [This should probably go into Sarah's xhci tree, not directly into Greg's > usb tree] > > Signed-off-by: Matthew Wilcox <willy@xxxxxxxxxxxxxxx> > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index 49009b2..39706de 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -1874,7 +1874,7 @@ void usb_free_streams(struct usb_interface *interface, > > /* Streams only apply to bulk endpoints. */ > for (i = 0; i < num_eps; i++) > - if (!usb_endpoint_xfer_bulk(&eps[i]->desc)) > + if (!eps[i] || !usb_endpoint_xfer_bulk(&eps[i]->desc)) > return; > > hcd->driver->free_streams(hcd, dev, eps, num_eps, mem_flags); -- 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