Re: [PATCH] locking/qrwlock: Allow multiple spinning readers

From: Peter Zijlstra
Date: Fri Apr 01 2016 - 15:53:36 EST


On Fri, Apr 01, 2016 at 05:47:43PM +0100, Will Deacon wrote:
> > +#define smp_cond_load_acquire(ptr, cond_expr) ({ \
> > + typeof(ptr) __PTR = (ptr); \
> > + typeof(*ptr) VAL; \
>
> It's a bit grim having a magic variable name, but I have no better
> suggestion.

Right; we had this discussion and this is the best we could come up
with.

lkml.kernel.org/r/CA+55aFzZA9EB3hFptSpdmeMOifeM5BWQGOW+ib7SLvyMTETzaA@xxxxxxxxxxxxxx

> > + for (;;) { \
> > + VAL = READ_ONCE(*__PTR); \
> > + if (cond_expr) \
> > + break; \
> > + cpu_relax(); \
> > + } \
> > + smp_rmb(); /* ctrl + rmb := acquire */ \
> > + VAL; \
> > +})
>
> Can you stick some #ifndef guards around this, please?

Oh sure; I'll even compile and boot it when I find a moment ;-)