From: Ira Weiny <ira.weiny@xxxxxxxxx> Every single architecture (including !CONFIG_HIGHMEM) calls... pagefault_enable(); preempt_enable(); ... before returning from __kunmap_atomic(). Lift this code into the kunmap_atomic() macro. Reviewed-by: Dan Williams <dan.j.williams@xxxxxxxxx> Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx> --- arch/arc/mm/highmem.c | 3 --- arch/arm/mm/highmem.c | 2 -- arch/csky/mm/highmem.c | 5 +---- arch/microblaze/mm/highmem.c | 2 -- arch/mips/mm/highmem.c | 2 -- arch/nds32/mm/highmem.c | 2 -- arch/parisc/include/asm/cacheflush.h | 2 -- arch/powerpc/mm/highmem.c | 2 -- arch/sparc/mm/highmem.c | 2 -- arch/x86/mm/highmem_32.c | 3 --- arch/xtensa/mm/highmem.c | 3 --- include/linux/highmem.h | 6 ++++-- 12 files changed, 5 insertions(+), 29 deletions(-) diff --git a/arch/arc/mm/highmem.c b/arch/arc/mm/highmem.c index 1cae4b911a33..0725fc56b016 100644 --- a/arch/arc/mm/highmem.c +++ b/arch/arc/mm/highmem.c @@ -91,9 +91,6 @@ void __kunmap_atomic(void *kv) kmap_atomic_idx_pop(); } - - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/arm/mm/highmem.c b/arch/arm/mm/highmem.c index 4a629f616a6a..4983bf18ec32 100644 --- a/arch/arm/mm/highmem.c +++ b/arch/arm/mm/highmem.c @@ -98,8 +98,6 @@ void __kunmap_atomic(void *kvaddr) /* this address was obtained through kmap_high_get() */ kunmap_high(pte_page(pkmap_page_table[PKMAP_NR(vaddr)])); } - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/csky/mm/highmem.c b/arch/csky/mm/highmem.c index 1191f57f53ae..106fa6773084 100644 --- a/arch/csky/mm/highmem.c +++ b/arch/csky/mm/highmem.c @@ -50,7 +50,7 @@ void __kunmap_atomic(void *kvaddr) int idx; if (vaddr < FIXADDR_START) - goto out; + return; #ifdef CONFIG_DEBUG_HIGHMEM idx = KM_TYPE_NR*smp_processor_id() + kmap_atomic_idx(); @@ -63,9 +63,6 @@ void __kunmap_atomic(void *kvaddr) (void) idx; /* to kill a warning */ #endif kmap_atomic_idx_pop(); -out: - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/microblaze/mm/highmem.c b/arch/microblaze/mm/highmem.c index 99fdf826edc2..d382c6821747 100644 --- a/arch/microblaze/mm/highmem.c +++ b/arch/microblaze/mm/highmem.c @@ -81,7 +81,5 @@ void __kunmap_atomic(void *kvaddr) local_flush_tlb_page(NULL, vaddr); kmap_atomic_idx_pop(); - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/mips/mm/highmem.c b/arch/mips/mm/highmem.c index ba03ca75d4a1..5a3fc7e84e66 100644 --- a/arch/mips/mm/highmem.c +++ b/arch/mips/mm/highmem.c @@ -79,8 +79,6 @@ void __kunmap_atomic(void *kvaddr) } #endif kmap_atomic_idx_pop(); - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/nds32/mm/highmem.c b/arch/nds32/mm/highmem.c index 4aabde586489..b8862aafa189 100644 --- a/arch/nds32/mm/highmem.c +++ b/arch/nds32/mm/highmem.c @@ -49,8 +49,6 @@ void __kunmap_atomic(void *kvaddr) ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr); set_pte(ptep, 0); } - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h index 0c83644bfa5c..c8458491b9af 100644 --- a/arch/parisc/include/asm/cacheflush.h +++ b/arch/parisc/include/asm/cacheflush.h @@ -125,8 +125,6 @@ static inline void *kmap_atomic(struct page *page) static inline void __kunmap_atomic(void *addr) { flush_kernel_dcache_page_addr(addr); - pagefault_enable(); - preempt_enable(); } #define kmap_atomic_prot(page, prot) kmap_atomic(page) diff --git a/arch/powerpc/mm/highmem.c b/arch/powerpc/mm/highmem.c index cdf5b716801a..7dfccf519621 100644 --- a/arch/powerpc/mm/highmem.c +++ b/arch/powerpc/mm/highmem.c @@ -76,7 +76,5 @@ void __kunmap_atomic(void *kvaddr) } kmap_atomic_idx_pop(); - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/sparc/mm/highmem.c b/arch/sparc/mm/highmem.c index 178641805567..7a99a1097f67 100644 --- a/arch/sparc/mm/highmem.c +++ b/arch/sparc/mm/highmem.c @@ -130,7 +130,5 @@ void __kunmap_atomic(void *kvaddr) #endif kmap_atomic_idx_pop(); - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/x86/mm/highmem_32.c b/arch/x86/mm/highmem_32.c index 34770499b0ff..b20e81b2b833 100644 --- a/arch/x86/mm/highmem_32.c +++ b/arch/x86/mm/highmem_32.c @@ -78,9 +78,6 @@ void __kunmap_atomic(void *kvaddr) BUG_ON(vaddr >= (unsigned long)high_memory); } #endif - - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/arch/xtensa/mm/highmem.c b/arch/xtensa/mm/highmem.c index 38c14e0b578c..9a49263e4cd6 100644 --- a/arch/xtensa/mm/highmem.c +++ b/arch/xtensa/mm/highmem.c @@ -77,9 +77,6 @@ void __kunmap_atomic(void *kvaddr) kmap_atomic_idx_pop(); } - - pagefault_enable(); - preempt_enable(); } EXPORT_SYMBOL(__kunmap_atomic); diff --git a/include/linux/highmem.h b/include/linux/highmem.h index eee53e151900..94145d4200ab 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -133,8 +133,8 @@ static inline void *kmap_atomic(struct page *page) static inline void __kunmap_atomic(void *addr) { - pagefault_enable(); - preempt_enable(); + /* Nothing to do in the CONFIG_HIGHMEM=n case as kunmap_atomic() + * handles re-enabling faults + preemption */ } #define kmap_atomic_pfn(pfn) kmap_atomic(pfn_to_page(pfn)) @@ -185,6 +185,8 @@ static inline void kmap_atomic_idx_pop(void) do { \ BUILD_BUG_ON(__same_type((addr), struct page *)); \ __kunmap_atomic(addr); \ + pagefault_enable(); \ + preempt_enable(); \ } while (0) -- 2.25.1