Re: [PATCH] clarify usage expectations for cnt32_to_63()

Nicolas Pitre
2008-11-09T05:06:33Z

On Sat, 8 Nov 2008, Nicolas Pitre wrote:

> On Sat, 8 Nov 2008, Mathieu Desnoyers wrote:
>
> > I *think* that smp_rmb() would be enough, supposing the access to memory
> > is done in program order wrt local interrupts in UP. This is basically
> > Steven's question, which has not received any clear answer yet. I'd like
> > to know what others think about it.
>
> In the mean time a pure rmb() is the safest thing to do now. Once we
> can convince ourselves that out-of-order reads are always rolled back
> upon the arrival of an interrupt then this could be relaxed.

After thinking about it some more, then a smp_rmb() must be correct.

On UP, that would be completely insane if an exception didn't resume
the whole sequence since the CPU cannot presume anything when returning
from it.

If the instruction flows says:

READ A
READ B

And speculative execution makes for B to be read before A, and you get
an interrupt after B was read but before A was read, then the program
counter may only point at READ A upon returning from the exception and B
will be read again. Doing otherwise would require the CPU to remember
any reordering that it might have performed upon every exceptions which
is completely insane.

So smp_rmb() it shall be.

Nicolas