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

Reply via email to