Am Mittwoch, 16. Januar 2008 16:45:19 schrieb Alan Stern:
> On Wed, 16 Jan 2008, Oliver Neukum wrote:
> 
> > OK, here's the version without a race against reset.
> > 
> > The basic idea is still to use anchor to block submission. So you the
> > disconnect() method can use the anchor to render harmless any code
> > paths using the anchor before submitting.
> 
> That's not a bad idea, however I think your implementation does more
> work than really necessary.  The whole business of poisoning URBs isn't
> needed; it should be enough to weigh the anchor and kill the existing
> URBs.  The fact that the anchor has been weighed will prevent them from
> being resubmitted.

If you use anchors. Drivers that allocate their URBs upon probe() or
open() can benefit from usb_poison_urb().

> Also, changing urb->reject to atomic_t means you can get rid of
> reject_mutex entirely.  The only purpose of the mutex was to prevent
> simultaneous non-atomic increments or decrements of urb->reject.  (The
> reason for not making it an atomic_t in the first place was simply to
> save space in struct urb.)

OK, I suspected black magic because a spinlock would have done
that job.
 
> There may be other problems to watch out for.  Since you no longer
> synchronize the disconnect routine with URB submission, you run the
> risk of calling usb_submit_urb() after the usb_device structure has
> been deallocated.

Yes. The skeleton driver does the necessary get. Do you see a way
to advance the check of reject without rewriting the entire locking?

        Regards
                Oliver



-
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to