On Mon, Jul 09, 2018 at 05:12:58PM +0200, Peter Zijlstra wrote: > On Mon, Jul 09, 2018 at 05:00:07PM +0200, Daniel Vetter wrote: > > On Mon, Jul 9, 2018 at 12:36 PM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > > On Mon, Jul 09, 2018 at 10:36:49AM +0200, Daniel Vetter wrote: > > > >> #define for_each_node_with_cpus(node) \ > > >> for_each_online_node(node) \ > > >> - if (nr_cpus_node(node)) > > >> + for_each_if (nr_cpus_node(node)) > > > > > > Not having gotten any of the other patches, I'm not really sure what > > > this does and such, but improve readability it does not :/ > > > > Patch 1 in this series, which I dumped onto lkml as a whole: > > > > https://lkml.org/lkml/2018/7/9/179 > > Right, so while I don't object to being Cc'ed to the whole series, I do > mind not being Cc'ed to at least the generic bits required to understand > the patch I do have to look at. > > > Imo it does improve readability for the if (!cond) {} else pattern. > > And (assuming my grep fu isn't too badly wrong) most places in the > > kernel do use this pattern in for_each macros, so I guess its a real > > thing. We've definitely hit it plenty in drm iterators (but we seem to > > like if() checks in iterator macros maybe a bit too much). > > > > I'm happy to drop this patch tough if you deem it offensive. > > I'd just like to understand it better; what compiler complains about > this and is the warning otherwise useful? These things don't seem > mentioned in that initial patch either. > > IOW I suppose I'm asking for the justification of this churn. If it's > really needed and useful so be it, but so far I'm not seeing any. > > At a while guess I'd say this is something new in gcc-8 (and while I > have that installed on some machines, it doesn't seem to be the default, > and so I've not actually seen its output). But is the warning actually > useful, should we not just kill the warning like we tend to do some > really silly ones. for_each_something(foo) if (foo->bla) call_bla(foo); else call_default(foo); Totally contrived, but this complains. Liberally sprinkling {} also shuts up the compiler, but it's a bit confusing given that a plain for {;;} is totally fine. And it's confusing since at first glance the compiler complaining about nested if and ambigous else doesn't make sense since clearly there's only 1 if there. Wrt this being useful or not: We've had it for a while in drm, and Andy and Yishen where rolling yet another open coded version of this on a patch that flew past me on dri-devel. So I pointed them at the for_each_if() we have and typed this series to move it to kernel.h. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel