On Mon, Mar 02, 2015 at 01:44:04PM -0800, Linus Torvalds wrote: > On Mon, Mar 2, 2015 at 1:16 PM, Jason Low <jason.l...@hp.com> wrote: > > > > In original code, we set cputimer->running first so it is running while > > we call update_gt_cputime(). Now in this patch, we swapped the 2 calls > > such that we set running after calling update_gt_cputime(), so that > > wouldn't be an issue anymore. > > Hmm. If you actually care about ordering, and 'running' should be > written to after the other things, then it might be best if you use > > smp_store_release(&cputimer->running, 1); > > which makes it clear that the store happens *after* what went before it. > > Or at least have a "smp_wmb()" between the atomic64 updates and the > "WRITE_ONCE()".
FWIW, perhaps it can be reduced with an smp_mb__before_atomic() on the account_group_*_time() side, paired with smp_wmb() from the thread_group_cputimer() side. Arming cputime->running shouldn't be too frequent while update cputime happens at least every tick... Assuming smp_mb__before_atomic() is more lightweight than smp_load_acquire() of course. > > I guess that since you use cmpxchg in update_gt_cputime, the accesses > end up being ordered anyway, but it might be better to make that thing > very explicit. > > Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/