Re: MMIO and gcc re-ordering issue

Jeremy Higdon
2008-06-03T08:15:52Z

On Tue, Jun 03, 2008 at 02:33:11PM +1000, Nick Piggin wrote:
> On Monday 02 June 2008 19:56, Jes Sorensen wrote:
> > Jeremy Higdon wrote:
> > > We don't actually have that problem on the Altix. All writes issued
> > > by CPU X will be ordered with respect to each other. But writes by
> > > CPU X and CPU Y will not be, unless an mmiowb() is done by the
> > > original CPU before the second CPU writes. I.e.
> > >
> > > CPU X writel
> > > CPU X writel
> > > CPU X mmiowb
> > >
> > > CPU Y writel
> > > ...
> > >
> > > Note that this implies some sort of locking. Also note that if in
> > > the above, CPU Y did the mmiowb, that would not work.
> >
> > Hmmm,
> >
> > Then it's less bad than I thought - my apologies for the confusion.
> >
> > Would we be able to use Ben's trick of setting a per cpu flag in
> > writel() then and checking that in spin unlock issuing the mmiowb()
> > there if needed?
>
> Yes you could, but your writels would still not be strongly ordered
> within (or outside) spinlock regions, which is what Linus wants (and
> I kind of agree with).

Yes they would be. Writes from the same CPU are always ordered. Writes
from different CPUs are not, but that's only a concern if you protect
writing via some sort of lock. If the lock release forces a barrier,
that should take care of the problem.

jeremy