On Friday 30 March 2007 2:49 pm, Oliver Neukum wrote:

> > Nope.  If an smp_mb() is needed, the reason is because of other
> > driver-internal bugs.

> > Remember that the driver isn't allowed to so much as *LOOK* at any
> > field of an URB until the completion callback.  That generalizes:
> > it mustn't do so until that callback (cleanly) hands the URB back
> 
> Yes and the callback is guaranteed that all the urb's fields are
> valid. Which is the whole point. Is that guarantee only valid to the
> callback or to the whole driver?
> 
> CPU A (callback)                      CPU B
> 
> flag = 1;                                     if (!flag) barrier();
> a = urb->status;                      b = urb->status;
> 
> Do we guarantee a==b or don't we?

I don't see a handoff there that's even vaguely correct, which
means this code displays one of those "driver-internal bugs".

So of course there's no such guarantee.

It's perfectly legit for CPU A to reorder writes; common, even,
when they're in different cache lines.


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
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