|
@@ -80,56 +80,4 @@ extern void setup_per_cpu_areas(void);
|
|
#define DECLARE_PER_CPU(type, name) extern PER_CPU_ATTRIBUTES \
|
|
#define DECLARE_PER_CPU(type, name) extern PER_CPU_ATTRIBUTES \
|
|
__typeof__(type) per_cpu_var(name)
|
|
__typeof__(type) per_cpu_var(name)
|
|
|
|
|
|
-/*
|
|
|
|
- * Optional methods for optimized non-lvalue per-cpu variable access.
|
|
|
|
- *
|
|
|
|
- * @var can be a percpu variable or a field of it and its size should
|
|
|
|
- * equal char, int or long. percpu_read() evaluates to a lvalue and
|
|
|
|
- * all others to void.
|
|
|
|
- *
|
|
|
|
- * These operations are guaranteed to be atomic w.r.t. preemption.
|
|
|
|
- * The generic versions use plain get/put_cpu_var(). Archs are
|
|
|
|
- * encouraged to implement single-instruction alternatives which don't
|
|
|
|
- * require preemption protection.
|
|
|
|
- */
|
|
|
|
-#ifndef percpu_read
|
|
|
|
-# define percpu_read(var) \
|
|
|
|
- ({ \
|
|
|
|
- typeof(per_cpu_var(var)) __tmp_var__; \
|
|
|
|
- __tmp_var__ = get_cpu_var(var); \
|
|
|
|
- put_cpu_var(var); \
|
|
|
|
- __tmp_var__; \
|
|
|
|
- })
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#define __percpu_generic_to_op(var, val, op) \
|
|
|
|
-do { \
|
|
|
|
- get_cpu_var(var) op val; \
|
|
|
|
- put_cpu_var(var); \
|
|
|
|
-} while (0)
|
|
|
|
-
|
|
|
|
-#ifndef percpu_write
|
|
|
|
-# define percpu_write(var, val) __percpu_generic_to_op(var, (val), =)
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#ifndef percpu_add
|
|
|
|
-# define percpu_add(var, val) __percpu_generic_to_op(var, (val), +=)
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#ifndef percpu_sub
|
|
|
|
-# define percpu_sub(var, val) __percpu_generic_to_op(var, (val), -=)
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#ifndef percpu_and
|
|
|
|
-# define percpu_and(var, val) __percpu_generic_to_op(var, (val), &=)
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#ifndef percpu_or
|
|
|
|
-# define percpu_or(var, val) __percpu_generic_to_op(var, (val), |=)
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#ifndef percpu_xor
|
|
|
|
-# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=)
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
#endif /* _ASM_GENERIC_PERCPU_H_ */
|
|
#endif /* _ASM_GENERIC_PERCPU_H_ */
|