From: Pete Zaitcev [mailto:[EMAIL PROTECTED] > On Wed, 20 Apr 2005 11:28:39 -0700, Greg KH <[EMAIL PROTECTED]> wrote: > > On Wed, Apr 20, 2005 at 08:26:29PM +0200, Oliver Neukum wrote: > > > /* shutdown our bulk reads and writes */ > > > spin_lock_irqsave(&info->lock, flags); > > > list_for_each_safe(tmp, tmp2, &info->rx_urbs_submitted) { > > > wrap = list_entry(tmp, struct whiteheat_urb_wrap, list); > > > urb = wrap->urb; > > > usb_kill_urb(urb); > > > list_del(tmp); > > > list_add(tmp, &info->rx_urbs_free); > > > } > > > > > > This, from whiteheat.c, is wrong. Usb_kill_urb() with a spinlock > > > held is illegal.
Curious, why is it illegal? ** > > > > This driver is marked BROKEN on SMP, as it does lots of bad > things while > > holding spinlocks :( > > > > Anyone wanting to fix this all up? > > This is probably something for Stuart to check out (on bcc: - > I suspect he > may be afraid of spam). I meant to, but never have a moment > (how typical). Not afraid of the Big Bad Wolf. :-) Just got off the usb list a while back due to time. I'll get back on. ** This is a fix I've got pending. What I noticed was that usb_unlink_urb() calls the callback, which attempts to acquire the held lock. Deadlock. I'm not sure what usb_kill_urb() does (I've been working with 2.4), but suspect that it probably has the same issue. But that likely isn't what Oliver meant by illegal. ..Stu ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel