Henrik Austad wrote:
On Monday 15 September 2008 17:13:08 luca ellero wrote:
Why slock is not declared as "volatile" in the 2.6.25 kernel?
the section you refer to (volatile), was introduced in commit
fb1c8f93d869b34cacb8b8932e2b83d96a19d720 in sep. 2005.
volatile ensures that the variable stays in the memory, i.e. it is not stored
in any register for optimization.
From the allmighty K&R [p211]:
"The purpose of volatile is to force an implementation to suppress
optimization that could otherwise occur. For example, for a machine with
memory-mapped input/output, a pointer to a device register might be declared
as a pointer to volatile, in order to prevent the compiler from removing
apparently redundant references through the pointer"
As this is an SMP spinlock, having it in a local register is a bad idea :-)
as to why it's not used any more, I'm not too sure, as it is used (when you
compile with the debug-spinlock on. Now, I'm not testing this against
2.6.25.3, but in the normal linux-tree, there hasn't been a change in
spinlock_types_up.h since July 2007.
volatile use is a risky business. It only really makes sense when you
dealing with a single CPU and you are protecting yourself from DMA
hardware issues which might be caused by compiler optimisation (where
memory could be cached in a register as you said). volatile just says to
the compiler "don't do optimisation around this" (a simplification)
which can make for slow code. It can also help hide real issues. Linus
talks about it here: http://kerneltrap.org/Linux/Volatile_Superstition
and http://kerneltrap.org/node/14225 .
When you are in the SMP protecting data from other CPUs case (as implied
by it being an SMP spinlock) you have to use locks/memory barriers and
if you have those then why did you need volatile? It then won't matter
if the value made its way into a register because you won't read it will
make its way back before use...
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ