Re: [PATCH RFC] tools/memory-model: Adjust ctrl dependency definition

From: Alan Stern
Date: Mon Jun 27 2022 - 10:56:16 EST


On Mon, Jun 27, 2022 at 11:47:43AM +0200, Paul Heidekrüger wrote:
>
> > On 21. Jun 2022, at 16:24, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:
> >
> > On Tue, Jun 21, 2022 at 01:59:27PM +0200, Paul Heidekrüger wrote:
> >> OK. So, LKMM limits the scope of control dependencies to its arm(s), hence
> >> there is a control dependency from the last READ_ONCE() before the loop
> >> exists to the WRITE_ONCE().
> >>
> >> But then what about the following:
> >>
> >>> int *x, *y;
> >>>
> >>> int foo()
> >>> {
> >>> /* More code */
> >>>
> >>> if(READ_ONCE(x))
> >>> return 42;
> >>>
> >>> /* More code */
> >>>
> >>> WRITE_ONCE(y, 42);
> >>>
> >>> /* More code */
> >>>
> >>> return 0;
> >>> }
> >>
> >> The READ_ONCE() determines whether the WRITE_ONCE() will be executed at all,
> >> but the WRITE_ONCE() doesn't lie in the if condition's arm.
> >
> > So in this case the LKMM would not recognize that there's a control
> > dependency, even though it clearly exists.
>
> Oh, that's unfortunate.
>
> Then I would still argue that the "at all" definition is misleading. This

I agree, and I would welcome a patch improving the definition. Perhaps
something along the lines of what I wrote earlier in this email thread.

> time in the other direction as I had initially proposed though, as the above
> example is a case where "at all" holds true, but LKMM doesn't cover it. Or
> do you think that caveating this in litmus-tests.txt, e.g. via the patch we
> had recently worked out [1], is enough?

No, the explanation should be improved.

Alan