Messages in this thread | | | Date | Tue, 12 Dec 2023 14:49:10 +0300 | From | Alexey Dobriyan <> | Subject | cast inside __pcpu_cast_1 macro |
| |
Hi, Brian.
You've added the following macros in
commit 6865dc3ae93b9acb336ca48bd7b2db3446d89370 x86/percpu: Introduce size abstraction macros
+#define __pcpu_cast_1(val) ((u8)(((unsigned long) val) & 0xff)) +#define __pcpu_cast_2(val) ((u16)(((unsigned long) val) & 0xffff)) +#define __pcpu_cast_4(val) ((u32)(((unsigned long) val) & 0xffffffff)) +#define __pcpu_cast_8(val) ((u64)(val))
They break complation if "val" is something complex like
this_cpu_write(pcp, *x = 1);
Only __pcpu_cast_8() is correct in this regard. "val" should be in parenthesis at least.
Is there a reason for casts to "unsigned long"?
Why not just
#define __pcpu_cast_1(val) ((u8)(val))
| |