Re: [PATCH] wireguard: queueing: Fix implicit type conversion
From: Eric Dumazet <hidden>
Date: 2021-10-29 15:30:31
Also in:
lkml
On 10/29/21 7:27 AM, Jason A. Donenfeld wrote:
On Fri, Oct 29, 2021 at 3:08 AM Jiasheng Jiang [off-list ref] wrote:quoted
It is universally accepted that the implicit type conversion is terrible.I'm not so sure about this, but either way, I think this needs a bit more justification and analysis to merge. cpumask_weight returns an unsigned, for example, and is used as a modulo operand later in the function. It looks like nr_cpumask_bits is also unsigned. And so on. So you're really trading one implicit type conversion package for another. If you're swapping these around, why? It can't be because, "it is universally accepted that the implicit type conversion is terrible," since you're adding more of it in a different form. Is your set of implicit type conversions semantically more proper? If so, please describe that. Alternatively, is there a way to harmonize everything into one type? Is there a minimal set of casts that enables that?
I agree with you. Even standard iterators play/mix with signed/unsigned in plain sight. extern unsigned int nr_cpu_ids; unsigned int cpumask_next(int n, const struct cpumask *srcp); int cpumask_next_wrap(int n, const struct cpumask *mask, int start, bool wrap); #define for_each_cpu(cpu, mask) \ for ((cpu) = -1; \ (cpu) = cpumask_next((cpu), (mask)), \ (cpu) < nr_cpu_ids;)