[PATCH] timecounters: Fix timehand generation read/write

Joerg Sonnenberger joerg at britannica.bec.de
Thu Jun 4 18:11:12 UTC 2015


On Wed, Jun 03, 2015 at 11:00:53PM +0200, Sebastian Huber wrote:
> In my interpretation of the C standard this is implementation defined behaviour.  See also:
> 
> https://gcc.gnu.org/onlinedocs/gcc/Volatiles.html

I don't think that is nearly correct as far as any data accessibly from
global objects is concerned beside the volatile. C11 5.1.2.3 (2) and (3)
are the relevant clauses. An assignment to a volatile object is a
sequence point with side effects. All assignments before that sequence
point must be visible to whatever possible side effect the volatile has.
Similar, it can implicitly change all globals, so no read can be moved
from after the sequence point to before. This is much stricter than the
normal as-if rule, since a sequence of side-effect-free operations can
be implemented anyway the compiler likes. A different interpretation
would be quite questionable.

Note that this is all just about the rules of the C abstract machine. It
is not about the observable behavior of a multi-processor machine.
Whether or not TSO is enough for this purpose is a completely different
question.

Joerg


More information about the freebsd-hackers mailing list