On Sun, May 13, 2018 at 8:21 PM, Linus Torvalds <[email protected]> wrote: > On Tue, May 8, 2018 at 11:24 PM Dexuan Cui <[email protected]> wrote: > >> Should we fix the for_each_cpu() in include/linux/cpumask.h for UP? > > As Thomas points out, this has come up before. > > One of the issues is historical - we tried very hard to make the SMP code > not cause code generation problems for UP, and part of that was just that > all these loops were literally designed to entirely go away under UP. It > still *looks* syntactically like a loop, but an optimizing compiler will > see that there's nothing there, and "for_each_cpu(...) x" essentially just > turns into "x" on UP. An empty mask simply generally doesn't make sense, > since opn UP you also don't have any masking of CPU ops, so the mask is > ignored, and that helps the code generation immensely. > > If you have to load and test the mask, you immediately lose out badly in > code generation. > > So honestly, I'd really prefer to keep our current behavior. Perhaps with a > debug option that actually tests (on SMP - because that's what every > developer is actually _using_ these days) that the mask isn't empty. But > I'm not sure that would find this case, since presumably on SMP it might > never be empty.
This looks like the problem automated testing traditionally and effectively solves. If UP is an important config, there must be automated pre/post commit checks for this.

