Skip to content

Commit a50ea64

Browse files
ubizjakIngo Molnar
authored andcommitted
x86/percpu: Unify percpu read-write accessors
Redefine percpu_from_op() and percpu_to_op() as __raw_cpu_read() and __raw_cpu_write(). Unify __raw_cpu_{read,write}() macros between configs w/ and w/o USE_X86_SEG_SUPPORT in order to unify {raw,this}_cpu{read_write}_N() accessors between configs. No functional change intended. Signed-off-by: Uros Bizjak <[email protected]> Signed-off-by: Ingo Molnar <[email protected]> Cc: Andy Lutomirski <[email protected]> Cc: Josh Poimboeuf <[email protected]> Cc: Linus Torvalds <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 08d564a commit a50ea64

File tree

1 file changed

+25
-47
lines changed

1 file changed

+25
-47
lines changed

arch/x86/include/asm/percpu.h

Lines changed: 25 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -146,36 +146,36 @@
146146

147147
#ifdef CONFIG_USE_X86_SEG_SUPPORT
148148

149-
#define __raw_cpu_read(qual, pcp) \
149+
#define __raw_cpu_read(size, qual, pcp) \
150150
({ \
151151
*(qual __my_cpu_type(pcp) *)__my_cpu_ptr(&(pcp)); \
152152
})
153153

154-
#define __raw_cpu_write(qual, pcp, val) \
154+
#define __raw_cpu_write(size, qual, pcp, val) \
155155
do { \
156156
*(qual __my_cpu_type(pcp) *)__my_cpu_ptr(&(pcp)) = (val); \
157157
} while (0)
158158

159159
#else /* CONFIG_USE_X86_SEG_SUPPORT */
160160

161-
#define percpu_from_op(size, qual, op, _var) \
161+
#define __raw_cpu_read(size, qual, _var) \
162162
({ \
163163
__pcpu_type_##size pfo_val__; \
164-
asm qual (__pcpu_op2_##size(op, __percpu_arg([var]), "%[val]") \
164+
asm qual (__pcpu_op2_##size("mov", __percpu_arg([var]), "%[val]") \
165165
: [val] __pcpu_reg_##size("=", pfo_val__) \
166166
: [var] "m" (__my_cpu_var(_var))); \
167167
(typeof(_var))(unsigned long) pfo_val__; \
168168
})
169169

170-
#define percpu_to_op(size, qual, op, _var, _val) \
170+
#define __raw_cpu_write(size, qual, _var, _val) \
171171
do { \
172172
__pcpu_type_##size pto_val__ = __pcpu_cast_##size(_val); \
173173
if (0) { \
174174
typeof(_var) pto_tmp__; \
175175
pto_tmp__ = (_val); \
176176
(void)pto_tmp__; \
177177
} \
178-
asm qual(__pcpu_op2_##size(op, "%[val]", __percpu_arg([var])) \
178+
asm qual(__pcpu_op2_##size("mov", "%[val]", __percpu_arg([var])) \
179179
: [var] "+m" (__my_cpu_var(_var)) \
180180
: [val] __pcpu_reg_imm_##size(pto_val__)); \
181181
} while (0)
@@ -448,54 +448,32 @@ do { \
448448
*/
449449
#define this_cpu_read_stable(pcp) __pcpu_size_call_return(this_cpu_read_stable_, pcp)
450450

451-
#ifdef CONFIG_USE_X86_SEG_SUPPORT
452-
#define raw_cpu_read_1(pcp) __raw_cpu_read(, pcp)
453-
#define raw_cpu_read_2(pcp) __raw_cpu_read(, pcp)
454-
#define raw_cpu_read_4(pcp) __raw_cpu_read(, pcp)
455-
#define raw_cpu_write_1(pcp, val) __raw_cpu_write(, pcp, val)
456-
#define raw_cpu_write_2(pcp, val) __raw_cpu_write(, pcp, val)
457-
#define raw_cpu_write_4(pcp, val) __raw_cpu_write(, pcp, val)
458-
459-
#define this_cpu_read_1(pcp) __raw_cpu_read(volatile, pcp)
460-
#define this_cpu_read_2(pcp) __raw_cpu_read(volatile, pcp)
461-
#define this_cpu_read_4(pcp) __raw_cpu_read(volatile, pcp)
462-
#define this_cpu_write_1(pcp, val) __raw_cpu_write(volatile, pcp, val)
463-
#define this_cpu_write_2(pcp, val) __raw_cpu_write(volatile, pcp, val)
464-
#define this_cpu_write_4(pcp, val) __raw_cpu_write(volatile, pcp, val)
451+
#define raw_cpu_read_1(pcp) __raw_cpu_read(1, , pcp)
452+
#define raw_cpu_read_2(pcp) __raw_cpu_read(2, , pcp)
453+
#define raw_cpu_read_4(pcp) __raw_cpu_read(4, , pcp)
454+
#define raw_cpu_write_1(pcp, val) __raw_cpu_write(1, , pcp, val)
455+
#define raw_cpu_write_2(pcp, val) __raw_cpu_write(2, , pcp, val)
456+
#define raw_cpu_write_4(pcp, val) __raw_cpu_write(4, , pcp, val)
457+
458+
#define this_cpu_read_1(pcp) __raw_cpu_read(1, volatile, pcp)
459+
#define this_cpu_read_2(pcp) __raw_cpu_read(2, volatile, pcp)
460+
#define this_cpu_read_4(pcp) __raw_cpu_read(4, volatile, pcp)
461+
#define this_cpu_write_1(pcp, val) __raw_cpu_write(1, volatile, pcp, val)
462+
#define this_cpu_write_2(pcp, val) __raw_cpu_write(2, volatile, pcp, val)
463+
#define this_cpu_write_4(pcp, val) __raw_cpu_write(4, volatile, pcp, val)
465464

466465
#ifdef CONFIG_X86_64
467-
#define raw_cpu_read_8(pcp) __raw_cpu_read(, pcp)
468-
#define raw_cpu_write_8(pcp, val) __raw_cpu_write(, pcp, val)
466+
#define raw_cpu_read_8(pcp) __raw_cpu_read(8, , pcp)
467+
#define raw_cpu_write_8(pcp, val) __raw_cpu_write(8, , pcp, val)
469468

470-
#define this_cpu_read_8(pcp) __raw_cpu_read(volatile, pcp)
471-
#define this_cpu_write_8(pcp, val) __raw_cpu_write(volatile, pcp, val)
469+
#define this_cpu_read_8(pcp) __raw_cpu_read(8, volatile, pcp)
470+
#define this_cpu_write_8(pcp, val) __raw_cpu_write(8, volatile, pcp, val)
472471
#endif
473472

474-
#define this_cpu_read_const(pcp) __raw_cpu_read(, pcp)
473+
#ifdef CONFIG_USE_X86_SEG_SUPPORT
474+
#define this_cpu_read_const(pcp) __raw_cpu_read(, , pcp)
475475
#else /* CONFIG_USE_X86_SEG_SUPPORT */
476476

477-
#define raw_cpu_read_1(pcp) percpu_from_op(1, , "mov", pcp)
478-
#define raw_cpu_read_2(pcp) percpu_from_op(2, , "mov", pcp)
479-
#define raw_cpu_read_4(pcp) percpu_from_op(4, , "mov", pcp)
480-
#define raw_cpu_write_1(pcp, val) percpu_to_op(1, , "mov", (pcp), val)
481-
#define raw_cpu_write_2(pcp, val) percpu_to_op(2, , "mov", (pcp), val)
482-
#define raw_cpu_write_4(pcp, val) percpu_to_op(4, , "mov", (pcp), val)
483-
484-
#define this_cpu_read_1(pcp) percpu_from_op(1, volatile, "mov", pcp)
485-
#define this_cpu_read_2(pcp) percpu_from_op(2, volatile, "mov", pcp)
486-
#define this_cpu_read_4(pcp) percpu_from_op(4, volatile, "mov", pcp)
487-
#define this_cpu_write_1(pcp, val) percpu_to_op(1, volatile, "mov", (pcp), val)
488-
#define this_cpu_write_2(pcp, val) percpu_to_op(2, volatile, "mov", (pcp), val)
489-
#define this_cpu_write_4(pcp, val) percpu_to_op(4, volatile, "mov", (pcp), val)
490-
491-
#ifdef CONFIG_X86_64
492-
#define raw_cpu_read_8(pcp) percpu_from_op(8, , "mov", pcp)
493-
#define raw_cpu_write_8(pcp, val) percpu_to_op(8, , "mov", (pcp), val)
494-
495-
#define this_cpu_read_8(pcp) percpu_from_op(8, volatile, "mov", pcp)
496-
#define this_cpu_write_8(pcp, val) percpu_to_op(8, volatile, "mov", (pcp), val)
497-
#endif
498-
499477
/*
500478
* The generic per-cpu infrastrucutre is not suitable for
501479
* reading const-qualified variables.

0 commit comments

Comments
 (0)