----- On Sep 29, 2021, at 10:47 AM, Linus Torvalds torvalds@xxxxxxxxxxxxxxxxxxxx wrote: > On Tue, Sep 28, 2021 at 2:15 PM Mathieu Desnoyers > <mathieu.desnoyers@xxxxxxxxxxxx> wrote: >> >> Introduce the ctrl_dep macro in the generic headers, and use it >> everywhere it appears relevant. > > The control dependency is so subtle - just see our discussions - that > I really think every single use of it needs to have a comment about > why it's needed. I agree with you on thorough documentation of each control dependency, perhaps just not about documentation of all compiler optimizations affecting each of them. > > Right now, that patch seems to just sprinkle them more or less > randomly. That's absolutely not what I want. It will just mean that > other people start sprinkling them randomly even more, and nobody will > dare remove them. Note that I have not found that many uses of control dependencies in the kernel tree. When they are used, this happens to be code where speed really matters though. > So I'd literally want a comment about "this needs a control > dependency, because otherwise the compiler could merge the two > identical stores X and Y". My hope with this ctrl_dep() macro is to remove at least some of the caveats to keep in mind when using control dependency ordering. Requiring to keep track of all relevant compiler optimizations on all architectures while reasoning about memory barriers is error-prone. > When you have a READ_ONCE() in the conditional, and a WRITE_ONCE() in > the statement protected by the conditional, there is *no* need to > randomly sprinkle noise that doesn't matter. The main advantage in doing so would be documentation, both in terms of letting the compiler know that this control dependency matters for ordering, and in terms of simplifying the set of caveats to document in Documentation/memory-barriers.txt. > And if there *is* need ("look, we have that same store in both the if- > and the else-statement" or whatever), then say so, and state that > thing. If we go for only using ctrl_dep() for scenarios which require it for documented reasons, then we would need to leave in place all the caveats details in Documentation/memory-barriers.txt, and document that in those scenarios ctrl_dep() should be used. This would be a starting point I guess. Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com