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