Re: [PATCH] Fix unplug of device with active streams

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

 



On Tue, 4 Jan 2011, Sarah Sharp wrote:

> On Tue, Sep 28, 2010 at 12:57:32AM -0400, Matthew Wilcox wrote:
> > 
> > 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]
> 
> I finally got around to looking at this patch.  Unfortunately, I don't
> think it's quite the right fix.
> 
> The bandwidth allocation functions assume that streams are deallocated
> before the interface is freed.  It will leak streams rings if it's
> called otherwise.  So if usb_free_streams() isn't called before the USB
> core calls usb_disable_interface(), then we'll leak all the streams
> rings.  I think I need to spend some quality time with the UAS device to
> see exactly what the right fix is.

The only way to avoid having usb_disable_interface() called before the
driver is unbound is to set the .soft_unbind flag in the usb_driver
structure.  That alone might solve the problem.

Alan Stern

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