Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Jun 2015 20:10:41 +0200
From:      Joerg Sonnenberger <joerg@britannica.bec.de>
To:        freebsd-hackers@freebsd.org
Subject:   Re: [PATCH] timecounters: Fix timehand generation read/write
Message-ID:  <20150604181041.GC11630@britannica.bec.de>
In-Reply-To: <2023236942.13088.1433365253885.JavaMail.zimbra@embedded-brains.de>
References:  <1433331966-27548-1-git-send-email-sebastian.huber@embedded-brains.de> <20150603203228.GA9774@britannica.bec.de> <2023236942.13088.1433365253885.JavaMail.zimbra@embedded-brains.de>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150604181041.GC11630>