rcu: fix misplaced mb() in rcu_enter/exit_nohz()
[sfrench/cifs-2.6.git] / include / linux / rcupreempt.h
index 01152ed532c8025decbf57fbf6859273a2e3994d..d038aa6e5ee1b4dd64cba0e8e193439c16f010f7 100644 (file)
@@ -87,15 +87,15 @@ DECLARE_PER_CPU(long, dynticks_progress_counter);
 
 static inline void rcu_enter_nohz(void)
 {
+       smp_mb(); /* CPUs seeing ++ must see prior RCU read-side crit sects */
        __get_cpu_var(dynticks_progress_counter)++;
        WARN_ON(__get_cpu_var(dynticks_progress_counter) & 0x1);
-       mb();
 }
 
 static inline void rcu_exit_nohz(void)
 {
-       mb();
        __get_cpu_var(dynticks_progress_counter)++;
+       smp_mb(); /* CPUs seeing ++ must see later RCU read-side crit sects */
        WARN_ON(!(__get_cpu_var(dynticks_progress_counter) & 0x1));
 }