On Thu, Nov 21, 2024 at 7:36 AM Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote: > > On Thu, Nov 21, 2024 at 7:23 AM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > > > On Thu, Nov 21, 2024 at 03:44:42PM +0100, Peter Zijlstra wrote: > > > > > But perhaps it makes even more sense to add this functionality to > > > seqcount itself. The same argument can be made for seqcount_mutex and > > > seqcount_rwlock users. > > > > Something like so I suppose. > > Ok, let me put this all together. Thanks! I posted the new version at https://lore.kernel.org/all/20241121162826.987947-1-surenb@xxxxxxxxxx/ The changes are minimal, only those requested by Peter, so hopefully they can be accepted quickly. > > > > > --- > > diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h > > index 5298765d6ca4..102afdf8c7db 100644 > > --- a/include/linux/seqlock.h > > +++ b/include/linux/seqlock.h > > @@ -318,6 +318,28 @@ SEQCOUNT_LOCKNAME(mutex, struct mutex, true, mutex) > > __seq; \ > > }) > > > > +/** > > + * raw_seqcount_try_begin() - begin a seqcount_t read critical section > > + * w/o lockdep and w/o counter stabilization > > + * @s: Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants > > + * > > + * Very like raw_seqcount_begin(), except it enables eliding the critical > > + * section entirely if odd, instead of doing the speculation knowing it will > > + * fail. > > + * > > + * Useful when counter stabilization is more or less equivalent to taking > > + * the lock and there is a slowpath that does that. > > + * > > + * If true, start will be set to the (even) sequence count read. > > + * > > + * Return: true when a read critical section is started. > > + */ > > +#define raw_seqcount_try_begin(s, start) \ > > +({ \ > > + start = raw_read_seqcount(s); \ > > + !(start & 1); \ > > +}) > > + > > /** > > * raw_seqcount_begin() - begin a seqcount_t read critical section w/o > > * lockdep and w/o counter stabilization