highmem: Use this_cpu_xx_return() operations
Use this_cpu operations to optimize access primitives for highmem. The main effect is the avoidance of address calculations through the use of a segment prefix. V3->V4 - kmap_atomic_idx: Do not return a value. - Use __this_cpu_dec without HIGHMEM_DEBUG Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Catalin Marinas <catalin.marinas@arm.com> Acked-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Christoph Lameter <cl@linux.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
908ee0f122
commit
cfb8243495
@ -81,7 +81,8 @@ DECLARE_PER_CPU(int, __kmap_atomic_idx);
|
|||||||
|
|
||||||
static inline int kmap_atomic_idx_push(void)
|
static inline int kmap_atomic_idx_push(void)
|
||||||
{
|
{
|
||||||
int idx = __get_cpu_var(__kmap_atomic_idx)++;
|
int idx = __this_cpu_inc_return(__kmap_atomic_idx) - 1;
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_HIGHMEM
|
#ifdef CONFIG_DEBUG_HIGHMEM
|
||||||
WARN_ON_ONCE(in_irq() && !irqs_disabled());
|
WARN_ON_ONCE(in_irq() && !irqs_disabled());
|
||||||
BUG_ON(idx > KM_TYPE_NR);
|
BUG_ON(idx > KM_TYPE_NR);
|
||||||
@ -91,16 +92,18 @@ static inline int kmap_atomic_idx_push(void)
|
|||||||
|
|
||||||
static inline int kmap_atomic_idx(void)
|
static inline int kmap_atomic_idx(void)
|
||||||
{
|
{
|
||||||
return __get_cpu_var(__kmap_atomic_idx) - 1;
|
return __this_cpu_read(__kmap_atomic_idx) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int kmap_atomic_idx_pop(void)
|
static inline void kmap_atomic_idx_pop(void)
|
||||||
{
|
{
|
||||||
int idx = --__get_cpu_var(__kmap_atomic_idx);
|
|
||||||
#ifdef CONFIG_DEBUG_HIGHMEM
|
#ifdef CONFIG_DEBUG_HIGHMEM
|
||||||
|
int idx = __this_cpu_dec_return(__kmap_atomic_idx);
|
||||||
|
|
||||||
BUG_ON(idx < 0);
|
BUG_ON(idx < 0);
|
||||||
|
#else
|
||||||
|
__this_cpu_dec(__kmap_atomic_idx);
|
||||||
#endif
|
#endif
|
||||||
return idx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user