Re: [PATCH v1 1/1] x86/percpu: Cast -1 to argument type when comparing in percpu_add_op()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/16/24 12:20, Peter Zijlstra wrote:
> The code as is, is wrong, I don't think we'll ever end up in the dec
> case for 'short' unsigned types. Clang is just clever enough to realize
> this and issues a warning.

Ahhh, that's the key to it.  Thanks, Peter.

> Something like so might work:
> 
> 	const int pao_ID__ = __builtin_constant_p(val) ?
> 				((typeof(var))(val) == 1 ? 1 :
> 				 ((typeof(var))(val) == (typeof(var))-1 ? -1 : 0 )) : 0;

Would anybody hate if we broke this up a bit, like:

        const typeof(var) _val = val;
        const int paoconst = __builtin_constant_p(val);
        const int paoinc   = paoconst && ((_val) == 1);
        const int paodec   = paoconst && ((_val) == (typeof(var))-1);

and then did

	if (paoinc)
		percpu_unary_op(size, qual, "inc", var);
	...

Or even:

#define PAOINC 1234

 	const int pao_ID__ = __builtin_constant_p(val) ?
 				((typeof(var))(val) == 1 ? PAOINC :
	...
	if (PAOINC)
		percpu_unary_op(size, qual, "inc", var);

Since the 1 and -1 ternary results end up just being magic numbers
anyway.  Otherwise that pao_ID__ expression is pretty gnarly.




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux