cast inside __pcpu_cast_1 macro

From: Alexey Dobriyan
Date: Tue Dec 12 2023 - 06:49:18 EST


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))