Skip to content

Commit 9b0fd80

Browse files
compudjjohnstultz-work
authored andcommitted
seqcount: Add raw_write_seqcount_latch()
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> Signed-off-by: John Stultz <john.stultz@linaro.org>
1 parent 0ea5a52 commit 9b0fd80

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

include/linux/seqlock.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,17 @@ static inline void raw_write_seqcount_end(seqcount_t *s)
235235
s->sequence++;
236236
}
237237

238+
/*
239+
* raw_write_seqcount_latch - redirect readers to even/odd copy
240+
* @s: pointer to seqcount_t
241+
*/
242+
static inline void raw_write_seqcount_latch(seqcount_t *s)
243+
{
244+
smp_wmb(); /* prior stores before incrementing "sequence" */
245+
s->sequence++;
246+
smp_wmb(); /* increment "sequence" before following stores */
247+
}
248+
238249
/*
239250
* Sequence counter only version assumes that callers are using their
240251
* own mutexing.

0 commit comments

Comments
 (0)