Am Samstag, 31. März 2007 01:31 schrieb David Brownell:
> 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.

Very well, that is a clear statement :-)

That raises the question how the issue is to be solved. To me the obvious
solution to a lack of memory ordering is to specify memory ordering
explicitely. However, I seem to be in the minority.

The other way around it would be to use wait_for_completion().
Oppinions?

        Regards
                Oliver

-------------------------------------------------------------------------
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