On Thu, 15 Jan 2009, Jeremy Williams wrote: > Jeremy Williams <jeremy.williams@...> writes: > > > > > I am currently using the rndis-wlan driver in 2.6.27 with a Linksys WUSB54GS > > USB wifi module. When I attempt to bring the interface down or remove the > > rndis-wlan module, I am seeing a spinlock recursion bug when usbnet is > > attempting to unlink the urbs from the device. > > > I have been poking into this more and discovered that those that are using EHCI > compliant host controllers based off the ehci-hcd driver will not see this issue > since completions are always performed asynchronously. The urb_dequeue method > in the HCD driver returns immediately and relies on the HCD irq routine to call > the completion routine for the deleted urb thus avoiding the recursion. > > I have looked over all of the proprietary host controller drivers and the > following have the potential to call usb_hcd_giveback_urb directly, thus > resulting in the recursion. > > isp116x-hcd.c > isp1760-hcd.c > r8a66597-hcd.c > sl811-hcd.c > u132-hcd.c > > There is also the potential for the ochi-hcd driver to call usb_hcd_giveback_urb > directly if the host controller is no longer running. > > Is it considered acceptable to call usb_hcd_giveback_urb directly from the > urb_dequeue routine or do these drivers need to be updated? It is indeed acceptable. In fact, it's even acceptable to call usb_hcd_giveback_urb directly from the urb_enqueue routine, although I don't think any HCDs do this (some peripheral drivers in the gadget directory do the analogous thing). 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