Re: [PATCH] refcount: provide same memory ordering guarantees as in atomic_t

From: Peter Zijlstra
Date: Thu Nov 16 2017 - 03:58:39 EST


On Wed, Nov 15, 2017 at 10:01:11PM +0100, Andrea Parri wrote:

> > And in specific things like:
> >
> > 135e8c9250dd5
> > ecf7d01c229d1
> >
> > which use the release of rq->lock paired with the next acquire of the
> > same rq->lock to match with an smp_rmb().
>
> Those cycles are currently forbidden by LKMM _when_ you consider the
> smp_mb__after_spinlock() from schedule(). See rfi-rel-acq-is-not-mb
> from my previous email and Alan's remarks about cumul-fence.

I'm not sure I get your point; and you all seem to forget I do not in
fact speak the ordering lingo. So I have no idea what
rfi-blah-blah or cumul-fence mean.

I know rel-acq isn't smp_mb() and I don't think any of the above patches
need it to be. They just need it do be a local ordering, no?

Even without smp_mb__after_spinlock() we get that:

spin_lock(&x)
x = 1
spin_unlock(&x)
spin_lock(&x)
y = 1
spin_unlock(&x)

guarantees that x happens-before y, right?

And that should be sufficient to then order something else against, like
for example:

r2 = y
smp_rmb()
r1 = x

no?