On Thu, 26 Feb 2015 08:45:59 +0100 Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > On Wed, Feb 25, 2015 at 12:50:15PM -0500, Steven Rostedt wrote: > > It can't be used for state? > > > > If one CPU writes "zero", and the other CPU wants to decide if the > > system is in the state to do something, isn't a rmb() fine to use? > > > > > > CPU 1: > > > > x = 0; > > /* Tell other CPUs they can now do something */ > > smp_wmb(); > > > > CPU 2: > > /* Make sure we see current state of x */ > > smp_rmb(); > > if (x == 0) > > do_something(); > > > > The above situation is not acceptable? > > Acceptable is just not the word. It plain doesn't work that way. Thinking about this more, is it because a wmb just forces the CPU to write everything before this before it writes anything after it. That is, the writes themselves can happen at a much later time. Does a plain mb() work the same way if there are no reads required? > > > Otherwise, we fail to be able to do_something() when it is perfectly > > fine to do so. > > Can't be helped. What about using atomic_t? Note, my latest code doesn't have any of this, but I just want to understand the semantics of these operations a bit better. -- Steve -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html