| Date | Wed, 16 Jul 2014 21:05:21 -0000 | From | Thomas Gleixner <> | Subject | [patch V2 62/64] seqcount: Add raw_write_seqcount_latch() |
| |
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
For NMI safe access to clock monotonic we use the seqcount LSB as index of a timekeeper array. The update sequence looks like this:
smp_wmb(); <- prior stores to a[1] seq++; smp_wmb(); <- seq increment before update of a[0] update(a[0]); smp_wmb(); <- update of a[0] seq++; smp_wmb(); <- seq increment before update of a[1] update(a[1]);
To avoid open coded barriers, provide a helper function.
[ tglx: Split out of a combo patch against the first implementation of the NMI safe accessor ]
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: John Stultz <john.stultz@linaro.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- include/linux/seqlock.h | 11 +++++++++++ 1 file changed, 11 insertions(+)
Index: tip/include/linux/seqlock.h =================================================================== --- tip.orig/include/linux/seqlock.h +++ tip/include/linux/seqlock.h @@ -236,6 +236,17 @@ static inline void raw_write_seqcount_en } /* + * raw_write_seqcount_latch - redirect readers to even/odd copy + * @s: pointer to seqcount_t + */ +static inline void raw_write_seqcount_latch(seqcount_t *s) +{ + smp_wmb(); /* prior stores before incrementing "sequence" */ + s->sequence++; + smp_wmb(); /* increment "sequence" before following stores */ +} + +/* * Sequence counter only version assumes that callers are using their * own mutexing. */
|