Re: Control dependency between prior load in while condition and later store?

From: Peter Zijlstra
Date: Thu Apr 05 2018 - 03:32:19 EST


On Wed, Apr 04, 2018 at 04:35:32PM -0400, Alan Stern wrote:
> On Wed, 4 Apr 2018, Daniel Jordan wrote:
>
> > A question for memory-barriers.txt aficionados.
> >
> > Is there a control dependency between the prior load of 'a' and the
> > later store of 'c'?:
> >
> > while (READ_ONCE(a));
> > WRITE_ONCE(c, 1);
>
> I would say that yes, there is.

Indeed.

> Yes, except that a more accurate view of the object code would be
> something like this:
>
> Loop: r1 = READ_ONCE(a);
> if (r1)
> goto Loop;
> else
> ; // Do nothing
> WRITE_ONCE(c, 1);
>
> Here you can see that one path branches backward, so everything
> following the "if" is dependent on the READ_ONCE.

Agreed, and I think I even have code that relies on such a pattern
somewhere.. Ah.. yes, see smp_cond_load_acquire().