|
96 | 96 | #endif /* CONFIG_SMP */
|
97 | 97 |
|
98 | 98 | #define __my_cpu_type(var) typeof(var) __percpu_seg_override
|
99 |
| -#define __my_cpu_ptr(ptr) (__my_cpu_type(*ptr)*)(__force uintptr_t)(ptr) |
| 99 | +#define __my_cpu_ptr(ptr) (__my_cpu_type(*(ptr))*)(__force uintptr_t)(ptr) |
100 | 100 | #define __my_cpu_var(var) (*__my_cpu_ptr(&(var)))
|
101 | 101 | #define __percpu_arg(x) __percpu_prefix "%" #x
|
102 | 102 | #define __force_percpu_arg(x) __force_percpu_prefix "%" #x
|
@@ -568,37 +568,29 @@ do { \
|
568 | 568 | #define this_cpu_read_stable_8(pcp) ({ BUILD_BUG(); (typeof(pcp))0; })
|
569 | 569 | #endif
|
570 | 570 |
|
571 |
| -static __always_inline bool x86_this_cpu_constant_test_bit(unsigned int nr, |
572 |
| - const unsigned long __percpu *addr) |
573 |
| -{ |
574 |
| - unsigned long __percpu *a = |
575 |
| - (unsigned long __percpu *)addr + nr / BITS_PER_LONG; |
| 571 | +#define x86_this_cpu_constant_test_bit(_nr, _var) \ |
| 572 | +({ \ |
| 573 | + unsigned long __percpu *addr__ = \ |
| 574 | + (unsigned long __percpu *)&(_var) + ((_nr) / BITS_PER_LONG); \ |
| 575 | + !!((1UL << ((_nr) % BITS_PER_LONG)) & raw_cpu_read(*addr__)); \ |
| 576 | +}) |
576 | 577 |
|
577 |
| -#ifdef CONFIG_X86_64 |
578 |
| - return ((1UL << (nr % BITS_PER_LONG)) & raw_cpu_read_8(*a)) != 0; |
579 |
| -#else |
580 |
| - return ((1UL << (nr % BITS_PER_LONG)) & raw_cpu_read_4(*a)) != 0; |
581 |
| -#endif |
582 |
| -} |
583 |
| - |
584 |
| -static inline bool x86_this_cpu_variable_test_bit(int nr, |
585 |
| - const unsigned long __percpu *addr) |
586 |
| -{ |
587 |
| - bool oldbit; |
588 |
| - |
589 |
| - asm volatile("btl %[nr], " __percpu_arg([var]) |
590 |
| - CC_SET(c) |
591 |
| - : CC_OUT(c) (oldbit) |
592 |
| - : [var] "m" (*__my_cpu_ptr((unsigned long __percpu *)(addr))), |
593 |
| - [nr] "Ir" (nr)); |
594 |
| - |
595 |
| - return oldbit; |
596 |
| -} |
597 |
| - |
598 |
| -#define x86_this_cpu_test_bit(nr, addr) \ |
599 |
| - (__builtin_constant_p((nr)) \ |
600 |
| - ? x86_this_cpu_constant_test_bit((nr), (addr)) \ |
601 |
| - : x86_this_cpu_variable_test_bit((nr), (addr))) |
| 578 | +#define x86_this_cpu_variable_test_bit(_nr, _var) \ |
| 579 | +({ \ |
| 580 | + bool oldbit; \ |
| 581 | + \ |
| 582 | + asm volatile("btl %[nr], " __percpu_arg([var]) \ |
| 583 | + CC_SET(c) \ |
| 584 | + : CC_OUT(c) (oldbit) \ |
| 585 | + : [var] "m" (__my_cpu_var(_var)), \ |
| 586 | + [nr] "rI" (_nr)); \ |
| 587 | + oldbit; \ |
| 588 | +}) |
| 589 | + |
| 590 | +#define x86_this_cpu_test_bit(_nr, _var) \ |
| 591 | + (__builtin_constant_p(_nr) \ |
| 592 | + ? x86_this_cpu_constant_test_bit(_nr, _var) \ |
| 593 | + : x86_this_cpu_variable_test_bit(_nr, _var)) |
602 | 594 |
|
603 | 595 |
|
604 | 596 | #include <asm-generic/percpu.h>
|
|
0 commit comments