[ltt-dev] [PATCH 02/10] rcutorture: make goflag volatile

Paolo Bonzini pbonzini at redhat.com
Wed Jun 8 04:59:10 EDT 2011

Even cmm_barrier may not be enough as a compiler barrier in the presence
of static variables, and cmm_mb would not be either!  The compiler assumes
that calling a function does not clobber static variables if it can prove
that they do not escape (which also implies the correct phase of the moon).

Rather than sprinkling the code with compiler barriers, I am taking the
easy way out and declaring the variable volatile.  Without this patch,
rcutorture_qsbr never finishes for me (GCC 4.5.0).

Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
 tests/rcutorture.h |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/tests/rcutorture.h b/tests/rcutorture.h
index c5253d9..5ba3d2b 100644
--- a/tests/rcutorture.h
+++ b/tests/rcutorture.h
@@ -79,7 +79,8 @@ char argsbuf[64];
 #define GOFLAG_RUN  1
 #define GOFLAG_STOP 2
-int goflag __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))) = GOFLAG_INIT;
+volatile int goflag __attribute__((__aligned__(CAA_CACHE_LINE_SIZE)))
+        = GOFLAG_INIT;
 #define RCU_READ_RUN 1000

More information about the lttng-dev mailing list