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@infradead.org 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:
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