mm, highmem: kmap_atomic rework
Subsystems (86)
cover mm, highmem: kmap_atomic rework
This patch-set reworks the kmap_atomic API to be a stack based, instead of static slot based. Some might remember this from last year, some not ;-)
The advantage is that you no longer need to worry about KM_foo, the disadvantage is that kmap_atomic/kunmap_atomic now needs to be strictly nested (CONFIG_HIGHMEM_DEBUG should complain in case its not) -- and of course its a big massive patch changing a widely used API.
The patch-set is currently based on tip/master as of today, and compile tested on: i386-all{mod,yes}config, mips-yosemite_defconfig, sparc-sparc32_defconfig, powerpc-ppc6xx_defconfig, and some arm config.
(Sorry dhowells, I again couldn't find frv/mn10300 compilers)
Boot tested with i386-defconfig on kvm.
Since its a rather large set, and somewhat tedious to rebase, I wanted to ask how to go about getting this merged?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
RFC PATCH 1/6 mm: strictly nested kmap_atomic
Ensure kmap_atomic usage is strictly nested
--- crypto/async_tx/async_memcpy.c | 2 +- crypto/blkcipher.c | 2 +- drivers/block/loop.c | 4 ++-- include/linux/highmem.h | 4 ++-- kernel/power/snapshot.c | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-)
crypto/async_tx/async_memcpy.c +1 -1
@@ -83,8 +83,8 @@ async_memcpy(struct page *dest, struct pmemcpy (dest_buf, src_buf, len); -kunmap_atomic (dest_buf,KM_USER0 );kunmap_atomic (src_buf,KM_USER1 ); +kunmap_atomic (dest_buf,KM_USER0 );async_tx_sync_epilog (submit); }
crypto/blkcipher.c +1 -1
@@ -89,9 +89,9 @@ static inline unsigned int blkcipher_donmemcpy (walk->dst.virt.addr, walk->page, n);blkcipher_unmap_dst (walk); }else if (!(walk->flags &BLKCIPHER_WALK_PHYS )) { -blkcipher_unmap_src (walk);if (walk->flags &BLKCIPHER_WALK_DIFF )blkcipher_unmap_dst (walk); +blkcipher_unmap_src (walk); }scatterwalk_advance (&walk->in, n);
drivers/block/loop.c +2 -2
@@ -99,8 +99,8 @@ static int transfer_none(struct loop_develse memcpy (raw_buf, loop_buf, size); -kunmap_atomic (raw_buf,KM_USER0 );kunmap_atomic (loop_buf,KM_USER1 ); +kunmap_atomic (raw_buf,KM_USER0 );cond_resched ();return 0 ; }
@@ -128,8 +128,8 @@ static int transfer_xor(struct loop_devifor (i =0 ; i < size; i++) *out++ = *in++ ^ key[(i &511 ) % keysize]; -kunmap_atomic (raw_buf,KM_USER0 );kunmap_atomic (loop_buf,KM_USER1 ); +kunmap_atomic (raw_buf,KM_USER0 );cond_resched ();return 0 ; }
include/linux/highmem.h +2 -2
@@ -191,8 +191,8 @@ static inline void copy_user_highpage(st vfrom =kmap_atomic (from,KM_USER0 ); vto =kmap_atomic (to,KM_USER1 );copy_user_page (vto, vfrom, vaddr, to); -kunmap_atomic (vfrom,KM_USER0 );kunmap_atomic (vto,KM_USER1 ); + kunmap_atomic(vfrom, KM_USER0); }#endif
@@ -204,8 +204,8 @@ static inline void copy_highpage(struct vfrom =kmap_atomic (from,KM_USER0 ); vto =kmap_atomic (to,KM_USER1 );copy_page (vto, vfrom); -kunmap_atomic (vfrom,KM_USER0 );kunmap_atomic (vto,KM_USER1 ); + kunmap_atomic(vfrom, KM_USER0); }#endif /* _LINUX_HIGHMEM_H */
kernel/power/snapshot.c +2 -2
@@ -978,8 +978,8 @@ static void copy_data_page(unsigned long src =kmap_atomic (s_page,KM_USER0 ); dst =kmap_atomic (d_page,KM_USER1 );do_copy_page (dst, src); -kunmap_atomic (src,KM_USER0 );kunmap_atomic (dst,KM_USER1 ); +kunmap_atomic (src,KM_USER0 ); }else {if (PageHighMem (d_page)) {/* Page pointed to by src may contain some kernel
@@ -2253,8 +2253,8 @@ swap_two_pages_data(struct page *p1, strmemcpy (buf, kaddr1,PAGE_SIZE );memcpy (kaddr1, kaddr2,PAGE_SIZE );memcpy (kaddr2, buf,PAGE_SIZE ); -kunmap_atomic (kaddr1,KM_USER0 );kunmap_atomic (kaddr2,KM_USER1 ); +kunmap_atomic (kaddr1,KM_USER0 ); }/**
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [RFC][PATCH 1/6] mm: strictly nested kmap_atomic
Quoted 3 lines · Peter Zijlstra
Ensure
kmap_atomicusage is strictly nestedSigned-off-by Peter Zijlstra<[email protected]>
Signature · 7 lines
All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [RFC][PATCH 1/6] mm: strictly nested kmap_atomic
In reply to Peter ZijlstraQuoted 3 lines · On Thu, 19 Aug 2010 22:13:18 +0200 Peter Zijlstra <[email protected]>…
Ensure
kmap_atomicusage is strictly nestedSigned-off-by Peter Zijlstra <[email protected]>
RFC PATCH 2/6 mm: stack based kmap_atomic
In reply to Peter ZijlstraKeep the current interface but ignore the KM_type and use a stack based approach.
--- arch/arm/mm/highmem.c | 8 ++++ arch/frv/include/asm/highmem.h | 3 + arch/mips/mm/highmem.c | 12 ++++--- arch/mn10300/include/asm/highmem.h | 36 +++++++++++++-------- arch/powerpc/mm/highmem.c | 26 +++++++++------ arch/sparc/mm/highmem.c | 37 ++++++++++++---------- arch/x86/mm/highmem_32.c | 33 ++++++++++++------- arch/x86/mm/iomap_32.c | 28 +++++++++++----- include/linux/highmem.h | 32 +++++++++++-------- mm/highmem.c | 62 ++----------------------------------- 10 files changed, 139 insertions(+), 138 deletions(-)
arch/arm/mm/highmem.c +7 -1
@@ -61,6 +61,8 @@ void *kmap_atomic(struct page *page, enuif (kmap)return kmap; + type =kmap_atomic_idx_push (); + idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);#ifdef CONFIG_DEBUG_HIGHMEM
@@ -85,9 +87,12 @@ EXPORT_SYMBOL(kmap_atomic);void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -unsigned int idx = type +KM_TYPE_NR *smp_processor_id (); +unsigned int idx;if (kvaddr >= (void *)FIXADDR_START ) { + type =kmap_atomic_idx_pop (); + idx = type +KM_TYPE_NR *smp_processor_id (); +if (cache_is_vivt ())__cpuc_flush_dcache_area ((void *)vaddr,PAGE_SIZE );#ifdef CONFIG_DEBUG_HIGHMEM
@@ -112,6 +117,7 @@ void *kmap_atomic_pfn(unsigned long pfn,pagefault_disable (); + type =kmap_atomic_idx_push (); idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);#ifdef CONFIG_DEBUG_HIGHMEM
arch/frv/include/asm/highmem.h +2 -1
@@ -117,7 +117,7 @@ static inline void *kmap_atomic(struct punsigned long paddr;pagefault_disable (); -debug_kmap_atomic (type); + type =kmap_atomic_idx_push (); paddr =page_to_phys (page);switch (type) {
@@ -154,6 +154,7 @@ do { \static inline void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) { + type =kmap_atomic_idx_pop ();switch (type) {case 0 :__kunmap_atomic_primary (0 ,2 );break ;case 1 :__kunmap_atomic_primary (1 ,3 );break ;
arch/mips/mm/highmem.c +7 -5
@@ -51,7 +51,7 @@ void *__kmap_atomic(struct page *page, eif (!PageHighMem (page))return page_address (page); -debug_kmap_atomic (type); + type =kmap_atomic_idx_push (); idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);#ifdef CONFIG_DEBUG_HIGHMEM
@@ -66,15 +66,18 @@ EXPORT_SYMBOL(__kmap_atomic);void __kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) { -#ifdef CONFIG_DEBUG_HIGHMEM unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -enum fixed_addresses idx = type +KM_TYPE_NR *smp_processor_id (); +unsigned int idx;if (vaddr <FIXADDR_START ) {// FIXME pagefault_enable ();return ; } + type =kmap_atomic_idx_pop (); +#ifdef CONFIG_DEBUG_HIGHMEM + idx = type +KM_TYPE_NR *smp_processor_id (); +BUG_ON (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN + idx));/*
@@ -84,7 +87,6 @@ void __kunmap_atomic_notypecheck(void *kpte_clear (&init_mm, vaddr, kmap_pte-idx);local_flush_tlb_one (vaddr);#endif -pagefault_enable (); }EXPORT_SYMBOL (__kunmap_atomic_notypecheck);
@@ -100,7 +102,7 @@ void *kmap_atomic_pfn(unsigned long pfn,pagefault_disable (); -debug_kmap_atomic (type); + type =kmap_atomic_idx_push (); idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);set_pte (kmap_pte-idx,pfn_pte (pfn,PAGE_KERNEL ));
arch/mn10300/include/asm/highmem.h +22 -14
@@ -75,10 +75,11 @@ static inline unsigned long kmap_atomic(enum fixed_addresses idx;unsigned long vaddr; +pagefault_disable ();if (page < highmem_start_page)return page_address (page); -debug_kmap_atomic (type); + type =kmap_atomic_idx_push (); idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);#if HIGHMEM_DEBUG
@@ -93,24 +94,31 @@ static inline unsigned long kmap_atomic(static inline void kunmap_atomic_notypecheck (unsigned long vaddr,enum km_type type) { -#if HIGHMEM_DEBUG -enum fixed_addresses idx = type +KM_TYPE_NR *smp_processor_id (); - -if (vaddr <FIXADDR_START )/* FIXME */ +if (vaddr <FIXADDR_START ) {/* FIXME */ +pagefault_enable ();return ; + } -if (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN + idx)) -BUG (); + type =kmap_atomic_idx_pop (); -/* -* force other mappings to Oops if they'll try to access -* this pte without first remap it -*/ -pte_clear (kmap_pte - idx); -__flush_tlb_one (vaddr); +#if HIGHMEM_DEBUG + { +unsigned int idx; + idx = type +KM_TYPE_NR *smp_processor_id (); + +if (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN + idx)) +BUG (); + +/* +* force other mappings to Oops if they'll try to access +* this pte without first remap it +*/ +pte_clear (kmap_pte - idx); +__flush_tlb_one (vaddr); + }#endif +pagefault_enable (); } -#endif /* __KERNEL__ */ #endif /* _ASM_HIGHMEM_H */
arch/powerpc/mm/highmem.c +16 -10
@@ -39,7 +39,7 @@ void *kmap_atomic_prot(struct page *pageif (!PageHighMem (page))return page_address (page); -debug_kmap_atomic (type); + type =kmap_atomic_idx_push (); idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);#ifdef CONFIG_DEBUG_HIGHMEM
@@ -54,23 +54,29 @@ EXPORT_SYMBOL(kmap_atomic_prot);void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) { -#ifdef CONFIG_DEBUG_HIGHMEM unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -enum fixed_addresses idx = type +KM_TYPE_NR *smp_processor_id ();if (vaddr <__fix_to_virt (FIX_KMAP_END )) {pagefault_enable ();return ; } -BUG_ON (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN + idx)); + type =kmap_atomic_idx_pop (); -/* -* force other mappings to Oops if they'll try to access -* this pte without first remap it -*/ -pte_clear (&init_mm, vaddr, kmap_pte-idx); -local_flush_tlb_page (NULL , vaddr); +#ifdef CONFIG_DEBUG_HIGHMEM + { +unsigned int idx; + + idx = type +KM_TYPE_NR *smp_processor_id (); +BUG_ON (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN + idx)); + +/* +* force other mappings to Oops if they'll try to access +* this pte without first remap it +*/ +pte_clear (&init_mm, vaddr, kmap_pte-idx); +local_flush_tlb_page (NULL , vaddr); + }#endif pagefault_enable (); }
arch/sparc/mm/highmem.c +21 -16
@@ -39,7 +39,7 @@ void *kmap_atomic(struct page *page, enuif (!PageHighMem (page))return page_address (page); -debug_kmap_atomic (type); + type =kmap_atomic_idx_push (); idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);
@@ -67,37 +67,42 @@ EXPORT_SYMBOL(kmap_atomic);void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) { -#ifdef CONFIG_DEBUG_HIGHMEM unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -unsigned long idx = type +KM_TYPE_NR *smp_processor_id ();if (vaddr <FIXADDR_START ) {// FIXME pagefault_enable ();return ; } -BUG_ON (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN +idx)); + type =kmap_atomic_idx_pop (); -/* XXX Fix - Anton */ +#ifdef CONFIG_DEBUG_HIGHMEM + { +unsigned long idx; + + idx = type +KM_TYPE_NR *smp_processor_id (); +BUG_ON (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN +idx)); + +/* XXX Fix - Anton */ #if 0 -__flush_cache_one (vaddr); +__flush_cache_one (vaddr);#else -flush_cache_all (); +flush_cache_all ();#endif -/* -* force other mappings to Oops if they'll try to access -* this pte without first remap it -*/ -pte_clear (&init_mm, vaddr, kmap_pte-idx); -/* XXX Fix - Anton */ +/* +* force other mappings to Oops if they'll try to access +* this pte without first remap it +*/ +pte_clear (&init_mm, vaddr, kmap_pte-idx); +/* XXX Fix - Anton */ #if 0 -__flush_tlb_one (vaddr); +__flush_tlb_one (vaddr);#else -flush_tlb_all (); +flush_tlb_all ();#endif + }#endif -pagefault_enable (); }EXPORT_SYMBOL (kunmap_atomic_notypecheck);
arch/x86/mm/highmem_32.c +21 -12
@@ -38,8 +38,7 @@ void *kmap_atomic_prot(struct page *pageif (!PageHighMem (page))return page_address (page); -debug_kmap_atomic (type); - + type =kmap_atomic_idx_push (); idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);BUG_ON (!pte_none (*(kmap_pte-idx)));
@@ -56,22 +55,32 @@ void *kmap_atomic(struct page *page, enuvoid kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -enum fixed_addresses idx = type +KM_TYPE_NR *smp_processor_id (); +enum fixed_addresses idx; + +if (vaddr >=__fix_to_virt (FIX_KMAP_END ) && + vaddr <=__fix_to_virt (FIX_KMAP_BEGIN )) { + + type =kmap_atomic_idx_pop (); + idx = type +KM_TYPE_NR *smp_processor_id (); -/* -* Force other mappings to Oops if they'll try to access this pte -* without first remap it. Keeping stale mappings around is a bad idea -* also, in case the page changes cacheability attributes or becomes -* a protected page in a hypervisor. -*/ -if (vaddr ==__fix_to_virt (FIX_KMAP_BEGIN +idx)) +#ifdef CONFIG_DEBUG_HIGHMEM +WARN_ON_ONCE (idx != + ((vaddr -__fix_to_virt (FIX_KMAP_BEGIN )) >>PAGE_SHIFT )); +#endif +/* +* Force other mappings to Oops if they'll try to access this +* pte without first remap it. Keeping stale mappings around +* is a bad idea also, in case the page changes cacheability +* attributes or becomes a protected page in a hypervisor. +*/ kpte_clear_flush (kmap_pte-idx, vaddr); -else { + }#ifdef CONFIG_DEBUG_HIGHMEM + else {BUG_ON (vaddr <PAGE_OFFSET );BUG_ON (vaddr >= (unsigned long )high_memory); -#endif } +#endif pagefault_enable (); }
include/linux/highmem.h +20 -12
@@ -28,18 +28,6 @@ static inline void invalidate_kernel_vma#include <asm/kmap_types.h> -#ifdef CONFIG_DEBUG_HIGHMEM - -void debug_kmap_atomic (enum km_type type); - -#else - -static inline void debug_kmap_atomic (enum km_type type) -{ -} - -#endif -#ifdef CONFIG_HIGHMEM #include <asm/highmem.h>
@@ -49,6 +37,26 @@ extern unsigned long totalhigh_pages;void kmap_flush_unused (void ); +DECLARE_PER_CPU (int, __kmap_atomic_idx); + +static inline int kmap_atomic_idx_push (void ) +{ +int idx =__get_cpu_var (__kmap_atomic_idx)++; +#ifdef CONFIG_DEBUG_HIGHMEM +BUG_ON (idx >KM_TYPE_NR ); +#endif +return idx; +} + +static inline int kmap_atomic_idx_pop (void ) +{ +int idx = --__get_cpu_var (__kmap_atomic_idx); +#ifdef CONFIG_DEBUG_HIGHMEM +BUG_ON (idx <0 ); +#endif +return idx; +} +#else /* CONFIG_HIGHMEM */ static inline unsigned int nr_free_highpages (void ) {return 0 ; }
mm/highmem.c +4 -58
71 lines not on this page · raw message
arch/x86/mm/iomap_32.c +19 -9
@@ -62,7 +62,7 @@ void *kmap_atomic_prot_pfn(unsigned longpagefault_disable (); -debug_kmap_atomic (type); + type =kmap_atomic_idx_push (); idx = type +KM_TYPE_NR *smp_processor_id (); vaddr =__fix_to_virt (FIX_KMAP_BEGIN + idx);set_pte (kmap_pte - idx,pfn_pte (pfn, prot));
@@ -94,16 +94,26 @@ void iounmap_atomic(void *kvaddr, enum km_type type) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -enum fixed_addresses idx = type +KM_TYPE_NR *smp_processor_id (); +enum fixed_addresses idx; -/* -* Force other mappings to Oops if they'll try to access this pte -* without first remap it. Keeping stale mappings around is a bad idea -* also, in case the page changes cacheability attributes or becomes -* a protected page in a hypervisor. -*/ -if (vaddr ==__fix_to_virt (FIX_KMAP_BEGIN +idx)) +if (vaddr >=__fix_to_virt (FIX_KMAP_END ) && + vaddr <=__fix_to_virt (FIX_KMAP_BEGIN )) { + + type =kmap_atomic_idx_pop (); + idx = type +KM_TYPE_NR *smp_processor_id (); + +#ifdef CONFIG_DEBUG_HIGHMEM +WARN_ON_ONCE (idx != + ((vaddr -__fix_to_virt (FIX_KMAP_BEGIN )) >>PAGE_SHIFT )); +#endif +/* +* Force other mappings to Oops if they'll try to access this +* pte without first remap it. Keeping stale mappings around +* is a bad idea also, in case the page changes cacheability +* attributes or becomes a protected page in a hypervisor. +*/ kpte_clear_flush (kmap_pte-idx, vaddr); + }pagefault_enable (); }
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [RFC][PATCH 2/6] mm: stack based kmap_atomic
Quoted 4 lines · Peter Zijlstra
Keep the current interface but ignore the
KM_typeand use a stack based approach.Signed-off-by Peter Zijlstra<[email protected]>
Signature · 7 lines
All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [RFC][PATCH 2/6] mm: stack based kmap_atomic
In reply to Peter ZijlstraQuoted 18 lines · On Thu, 19 Aug 2010 22:13:19 +0200 Peter Zijlstra <[email protected]>…
Keep the current interface but ignore the
KM_typeand use a stack based approach.Signed-off-by Peter Zijlstra <[email protected]>---
include/linux/highmem.h +11
-0+DECLARE_PER_CPU (int, __kmap_atomic_idx); + +static inline int kmap_atomic_idx_push (void ) +{ +int idx =__get_cpu_var (__kmap_atomic_idx)++; +#ifdef CONFIG_DEBUG_HIGHMEM +BUG_ON (idx >KM_TYPE_NR ); +#endif +return idx; +} +
include/linux/highmem.h extern unsigned long totalhigh_pages; · line 60
Quoted 10 lines
include/linux/highmem.h +9
-0+static inline int kmap_atomic_idx_pop (void ) +{ +int idx = --__get_cpu_var (__kmap_atomic_idx); +#ifdef CONFIG_DEBUG_HIGHMEM +BUG_ON (idx <0 ); +#endif +return idx; +} +#else /* CONFIG_HIGHMEM */
I may don't understand anything... Is irq already disabled ?
And Is it documented that kmap_atomic shouln't be used under NMI or something special interrupts ?
Thanks,
-Kame
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [RFC][PATCH 2/6] mm: stack based kmap_atomic
Quoted 3 lines · On Tue, 24 Aug 2010 16:24:27 +0900 KAMEZAWA Hiroyuki…
And Is it documented that
kmap_atomicshouln't be used under NMI or something special interrupts ?
Sorry, I missed something..Maybe not trouble.
-Kame
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Peter Zijlstra
maintainerRe: [RFC][PATCH 2/6] mm: stack based kmap_atomic
Quoted 7 lines · KAMEZAWA Hiroyuki
Quoted 3 lines · On Tue, 24 Aug 2010 16:24:27 +0900 KAMEZAWA Hiroyuki…
And Is it documented that
kmap_atomicshouln't be used under NMI or something special interrupts ?Sorry, I missed something..Maybe not trouble.
In particular, we actually do use kmap_atomic from NMI context ;-)
It only relies on preempt_disable(), which for now is implied by pagefault_disable(), if at some point those get split kmap_atomic will need to do both (currently only PREEMPT_RT splits it, but then that has a totally different kmap implementation too).
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
RFC PATCH 3/6 mm, frv: Out-of-line kmap-atomic
In reply to Peter ZijlstraOut-of-line the kmap_atomic implementation since the dynamic type destroys all the constant value reduction previously used.
Also, remove the first 4 primary maps, since those are used by the architecture for special purposes, mostly through direct assembly, but also through the __kmap_atomic_primary() interface.
--- arch/frv/include/asm/highmem.h | 53 +--------------------------------------- arch/frv/mb93090-mb00/pci-dma.c | 4 +-- arch/frv/mm/cache-page.c | 8 +++--- arch/frv/mm/highmem.c | 50 +++++++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 57 deletions(-)
arch/frv/include/asm/highmem.h +2 -51
@@ -112,34 +112,6 @@ extern struct page *kmap_atomic_to_page( (void *) damlr; \ }) -static inline void *kmap_atomic (struct page *page,enum km_type type) -{ -unsigned long paddr; - -pagefault_disable (); - type =kmap_atomic_idx_push (); - paddr =page_to_phys (page); - -switch (type) { -case 0 :return __kmap_atomic_primary (0 , paddr,2 ); -case 1 :return __kmap_atomic_primary (1 , paddr,3 ); -case 2 :return __kmap_atomic_primary (2 , paddr,4 ); -case 3 :return __kmap_atomic_primary (3 , paddr,5 ); -case 4 :return __kmap_atomic_primary (4 , paddr,6 ); -case 5 :return __kmap_atomic_primary (5 , paddr,7 ); -case 6 :return __kmap_atomic_primary (6 , paddr,8 ); -case 7 :return __kmap_atomic_primary (7 , paddr,9 ); -case 8 :return __kmap_atomic_primary (8 , paddr,10 ); - - case 9 ... 9 + NR_TLB_LINES - 1: -return __kmap_atomic_secondary (type -9 , paddr); - -default : -BUG (); -return NULL ; - } -} -#define __kunmap_atomic_primary (type, ampr) \ do { \ asm volatile("movgs gr0,dampr"#ampr"\n" ::: "memory"); \
@@ -152,29 +124,8 @@ do { \ asmvolatile ("tlbpr %0,gr0,#4,#1" : :"r" (vaddr) :"memory" ); \ } while(0) -static inline void kunmap_atomic_notypecheck(void *kvaddr, enum km_type type) -{ - type =kmap_atomic_idx_pop (); -switch (type) { -case 0 :__kunmap_atomic_primary (0 ,2 );break ; -case 1 :__kunmap_atomic_primary (1 ,3 );break ; -case 2 :__kunmap_atomic_primary (2 ,4 );break ; -case 3 :__kunmap_atomic_primary (3 ,5 );break ; -case 4 :__kunmap_atomic_primary (4 ,6 );break ; -case 5 :__kunmap_atomic_primary (5 ,7 );break ; -case 6 :__kunmap_atomic_primary (6 ,8 );break ; -case 7 :__kunmap_atomic_primary (7 ,9 );break ; -case 8 :__kunmap_atomic_primary (8 ,10 );break ; - - case 9 ... 9 + NR_TLB_LINES - 1: -__kunmap_atomic_secondary (type -9 , kvaddr); -break ; - -default : -BUG (); - } -pagefault_enable (); -} +void *kmap_atomic(struct page *page, enum km_type type); +void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type);#endif /* !__ASSEMBLY__ */
arch/frv/mm/cache-page.c +4 -4
@@ -26,11 +26,11 @@ void flush_dcache_page(struct page *page dampr2 =__get_DAMPR (2 ); - vaddr =kmap_atomic (page, __KM_CACHE); + vaddr =__kmap_atomic_primary (0 , page,2 );frv_dcache_writeback ((unsigned long ) vaddr, (unsigned long ) vaddr +PAGE_SIZE ); -kunmap_atomic (vaddr, __KM_CACHE); +__kunmap_atomic_primary (0 ,2 );if (dampr2) {__set_DAMPR (2 , dampr2);
@@ -54,12 +54,12 @@ void flush_icache_user_range(struct vm_a dampr2 =__get_DAMPR (2 ); - vaddr =kmap_atomic (page, __KM_CACHE); + vaddr =__kmap_atomic_primary (0 , page,2 ); start = (start & ~PAGE_MASK ) | (unsigned long ) vaddr;frv_cache_wback_inv (start, start + len); -kunmap_atomic (vaddr, __KM_CACHE); +__kunmap_atomic_primary (0 ,2 );if (dampr2) {__set_DAMPR (2 , dampr2);
arch/frv/mm/highmem.c +50 -0
53 lines not on this page · raw message
arch/frv/mb93090-mb00/pci-dma.c +2 -2
@@ -61,14 +61,14 @@ int dma_map_sg(struct device *dev, struc dampr2 =__get_DAMPR (2 );for (i =0 ; i < nents; i++) { - vaddr =kmap_atomic (sg_page (&sg[i]), __KM_CACHE); + vaddr =__kmap_atomic_primary (0 ,sg_page (&sg[i]),2 );frv_dcache_writeback ((unsigned long ) vaddr, (unsigned long ) vaddr +PAGE_SIZE ); } -kunmap_atomic (vaddr, __KM_CACHE); +__kunmap_atomic_primary (0 ,2 );if (dampr2) {__set_DAMPR (2 , dampr2);__set_IAMPR (2 , dampr2);
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [RFC][PATCH 3/6] mm, frv: Out-of-line kmap-atomic
Quoted 8 lines · Peter Zijlstra
Out-of-line the
kmap_atomicimplementation since the dynamic type destroys all the constant value reduction previously used.Also, remove the first 4 primary maps, since those are used by the architecture for special purposes, mostly through direct assembly, but also through the
__kmap_atomic_primary()interface.Signed-off-by Peter Zijlstra<[email protected]>
Signature · 7 lines
All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
RFC PATCH 4/6 mm: Remove all KM_type arguments
In reply to Peter ZijlstraDo the bulk of the km_type and KM_type removement by script.
git grep -l -e km_type -e KM_ | grep -v xfs | while read file; do
quilt add $file;
sed -i -e 's/,[[:space:]]*enum km_type type[[:space:]]*//g' \
-e 's/,[[:space:]]*KM_[[:digit:][:upper:]_]*[[:space:]]*//g' \
$file;done
--- arch/arm/include/asm/highmem.h | 6 - arch/arm/include/asm/pgtable.h | 8 +- arch/arm/mm/copypage-fa.c | 12 +-- arch/arm/mm/copypage-feroceon.c | 12 +-- arch/arm/mm/copypage-v3.c | 12 +-- arch/arm/mm/copypage-v4mc.c | 8 +- arch/arm/mm/copypage-v4wb.c | 12 +-- arch/arm/mm/copypage-v4wt.c | 12 +-- arch/arm/mm/copypage-v6.c | 12 +-- arch/arm/mm/copypage-xsc3.c | 12 +-- arch/arm/mm/copypage-xscale.c | 8 +- arch/arm/mm/highmem.c | 6 - arch/frv/include/asm/highmem.h | 4 - arch/frv/include/asm/pgtable.h | 8 +- arch/frv/mm/highmem.c | 4 - arch/microblaze/include/asm/pgtable.h | 8 +- arch/mips/include/asm/highmem.h | 6 - arch/mips/mm/c-r4k.c | 4 - arch/mips/mm/highmem.c | 6 - arch/mips/mm/init.c | 8 +- arch/mn10300/include/asm/highmem.h | 4 - arch/powerpc/include/asm/highmem.h | 6 - arch/powerpc/include/asm/pgtable-ppc32.h | 8 +- arch/powerpc/kvm/book3s.c | 4 - arch/powerpc/mm/dma-noncoherent.c | 2 arch/powerpc/mm/highmem.c | 4 - arch/powerpc/mm/mem.c | 4 - arch/s390/crypto/des_s390.c | 8 +- arch/sh/mm/cache-sh4.c | 4 - arch/sh/mm/cache.c | 12 +-- arch/sparc/include/asm/highmem.h | 4 - arch/sparc/mm/highmem.c | 4 - arch/tile/include/asm/highmem.h | 10 +-- arch/tile/include/asm/pgtable.h | 8 +- arch/tile/kernel/machine_kexec.c | 6 - arch/tile/mm/highmem.c | 12 +-- arch/tile/mm/pgtable.c | 2 arch/um/kernel/skas/uaccess.c | 4 - arch/x86/include/asm/highmem.h | 10 +-- arch/x86/include/asm/iomap.h | 4 - arch/x86/include/asm/pgtable_32.h | 4 - arch/x86/kernel/crash_dump_32.c | 8 +- arch/x86/kvm/lapic.c | 8 +- arch/x86/kvm/paging_tmpl.h | 4 - arch/x86/kvm/x86.c | 8 +- arch/x86/lib/usercopy_32.c | 4 - arch/x86/mm/highmem_32.c | 8 +- arch/x86/mm/iomap_32.c | 6 - crypto/async_tx/async_memcpy.c | 8 +- drivers/ata/libata-sff.c | 8 +- drivers/block/brd.c | 20 +++--- drivers/block/drbd/drbd_bitmap.c | 30 ++++----- drivers/block/drbd/drbd_nl.c | 4 - drivers/block/loop.c | 16 ++--- drivers/block/pktcdvd.c | 8 +- drivers/crypto/hifn_795x.c | 10 +-- drivers/edac/edac_mc.c | 4 - drivers/gpu/drm/drm_cache.c | 8 +- drivers/gpu/drm/i915/i915_debugfs.c | 4 - drivers/gpu/drm/i915/i915_gem.c | 22 +++---- drivers/gpu/drm/i915/i915_gem_debug.c | 10 +-- drivers/gpu/drm/i915/i915_irq.c | 4 - drivers/gpu/drm/i915/intel_overlay.c | 2 drivers/gpu/drm/nouveau/nouveau_bios.c | 8 +- drivers/gpu/drm/ttm/ttm_bo_util.c | 8 +- drivers/gpu/drm/ttm/ttm_tt.c | 16 ++--- drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c | 6 - drivers/ide/ide-taskfile.c | 4 - drivers/infiniband/ulp/iser/iser_memory.c | 8 +- drivers/md/bitmap.c | 36 +++++------ drivers/media/video/ivtv/ivtv-udma.c | 4 - drivers/memstick/host/jmb38x_ms.c | 4 - drivers/memstick/host/tifm_ms.c | 4 - drivers/mmc/host/at91_mci.c | 8 +- drivers/mmc/host/msm_sdcc.c | 2 drivers/mmc/host/sdhci.c | 4 - drivers/mmc/host/tifm_sd.c | 16 ++--- drivers/mmc/host/tmio_mmc.h | 4 - drivers/net/cassini.c | 4 - drivers/net/e1000e/netdev.c | 4 - drivers/scsi/arcmsr/arcmsr_hba.c | 8 +- drivers/scsi/cxgb3i/cxgb3i_pdu.c | 2 drivers/scsi/fcoe/fcoe.c | 6 - drivers/scsi/gdth.c | 4 - drivers/scsi/ips.c | 6 - drivers/scsi/libfc/fc_fcp.c | 8 +- drivers/scsi/libfc/fc_lport.c | 2 drivers/scsi/libiscsi_tcp.c | 4 - drivers/scsi/libsas/sas_host_smp.c | 8 +- drivers/scsi/megaraid.c | 4 - drivers/scsi/mvsas/mv_sas.c | 8 +- drivers/scsi/scsi_debug.c | 24 +++---- drivers/scsi/scsi_lib.c | 4 - drivers/scsi/sd_dif.c | 12 +-- drivers/staging/hv/netvsc_drv.c | 2 drivers/staging/hv/rndis_filter.c | 4 - drivers/staging/hv/storvsc_drv.c | 18 ++--- drivers/staging/pohmelfs/inode.c | 8 +- drivers/staging/zram/xvmalloc.c | 34 +++++----- drivers/staging/zram/zram_drv.c | 38 ++++++------ drivers/vhost/vhost.c | 4 - fs/afs/fsclient.c | 8 +- fs/afs/mntpt.c | 4 - fs/aio.c | 24 +++---- fs/bio-integrity.c | 10 +-- fs/btrfs/compression.c | 8 +- fs/btrfs/ctree.c | 30 ++++----- fs/btrfs/ctree.h | 8 +- fs/btrfs/disk-io.c | 4 - fs/btrfs/extent_io.c | 56 ++++++++--------- fs/btrfs/file-item.c | 10 +-- fs/btrfs/inode.c | 26 ++++---- fs/btrfs/struct-funcs.c | 10 +-- fs/btrfs/zlib.c | 8 +- fs/cifs/file.c | 4 - fs/ecryptfs/mmap.c | 4 - fs/ecryptfs/read_write.c | 8 +- fs/exec.c | 4 - fs/exofs/dir.c | 4 - fs/ext2/dir.c | 4 - fs/fuse/dev.c | 8 +- fs/fuse/file.c | 4 - fs/gfs2/aops.c | 12 +-- fs/gfs2/lops.c | 8 +- fs/gfs2/quota.c | 4 - fs/jbd/journal.c | 12 +-- fs/jbd/transaction.c | 4 - fs/jbd2/commit.c | 4 - fs/jbd2/journal.c | 12 +-- fs/jbd2/transaction.c | 4 - fs/logfs/dir.c | 18 ++--- fs/logfs/readwrite.c | 38 ++++++------ fs/logfs/segment.c | 4 - fs/minix/dir.c | 4 - fs/namei.c | 4 - fs/nfs/dir.c | 4 - fs/nfs/nfs2xdr.c | 8 +- fs/nfs/nfs3xdr.c | 8 +- fs/nfs/nfs4proc.c | 4 - fs/nfs/nfs4xdr.c | 10 +-- fs/nilfs2/cpfile.c | 94 +++++++++++++++--------------- fs/nilfs2/dat.c | 38 ++++++------ fs/nilfs2/dir.c | 4 - fs/nilfs2/ifile.c | 4 - fs/nilfs2/mdt.c | 4 - fs/nilfs2/page.c | 8 +- fs/nilfs2/recovery.c | 4 - fs/nilfs2/segbuf.c | 4 - fs/nilfs2/segment.c | 4 - fs/nilfs2/sufile.c | 58 +++++++++--------- fs/ntfs/aops.c | 20 +++--- fs/ntfs/attrib.c | 20 +++--- fs/ntfs/file.c | 16 ++--- fs/ntfs/super.c | 8 +- fs/ocfs2/aops.c | 16 ++--- fs/pipe.c | 8 +- fs/reiserfs/stree.c | 4 - fs/reiserfs/tail_conversion.c | 4 - fs/splice.c | 4 - fs/squashfs/file.c | 8 +- fs/squashfs/symlink.c | 4 - fs/ubifs/file.c | 4 - fs/udf/file.c | 4 - include/linux/bio.h | 4 - include/linux/highmem.h | 28 ++++---- kernel/debug/kdb/kdb_support.c | 4 - kernel/power/snapshot.c | 28 ++++---- lib/scatterlist.c | 4 - lib/swiotlb.c | 2 mm/bounce.c | 4 - mm/filemap.c | 8 +- mm/ksm.c | 12 +-- mm/memory.c | 4 - mm/shmem.c | 14 ++-- mm/swapfile.c | 30 ++++----- mm/vmalloc.c | 8 +- net/core/kmap_skb.h | 4 - net/rds/ib_recv.c | 12 +-- net/rds/info.c | 6 - net/rds/iw_recv.c | 4 - net/rds/loop.c | 2 net/rds/page.c | 4 - net/rds/tcp_recv.c | 4 - net/sunrpc/auth_gss/gss_krb5_wrap.c | 4 - net/sunrpc/socklib.c | 4 - net/sunrpc/xdr.c | 16 ++--- net/sunrpc/xprtrdma/rpc_rdma.c | 4 - 187 files changed, 904 insertions(+), 904 deletions(-)
arch/arm/include/asm/highmem.h +3 -3
@@ -35,9 +35,9 @@ extern void kunmap_high_l1_vipt(struct p#ifdef CONFIG_HIGHMEM extern void *kmap (struct page *page);extern void kunmap (struct page *page); -extern void *kmap_atomic (struct page *page,enum km_type type); -extern void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type); -extern void *kmap_atomic_pfn (unsigned long pfn,enum km_type type); +extern void *kmap_atomic (struct page *page); +extern void kunmap_atomic_notypecheck (void *kvaddr); +extern void *kmap_atomic_pfn (unsigned long pfn);extern struct page *kmap_atomic_to_page (const void *ptr);#endif
arch/arm/include/asm/pgtable.h +4 -4
@@ -263,10 +263,10 @@ extern struct page *empty_zero_page;#define pte_page (pte) (pfn_to_page(pte_pfn(pte)))#define pte_offset_kernel (dir,addr) (pmd_page_vaddr(*(dir)) + __pte_index(addr)) -#define pte_offset_map (dir,addr) (__pte_map(dir, KM_PTE0) + __pte_index(addr)) -#define pte_offset_map_nested (dir,addr) (__pte_map(dir, KM_PTE1) + __pte_index(addr)) -#define pte_unmap (pte) __pte_unmap(pte, KM_PTE0) -#define pte_unmap_nested (pte) __pte_unmap(pte, KM_PTE1) +#define pte_offset_map (dir,addr) (__pte_map(dir) + __pte_index(addr)) +#define pte_offset_map_nested (dir,addr) (__pte_map(dir) + __pte_index(addr)) +#define pte_unmap (pte) __pte_unmap(pte) +#define pte_unmap_nested (pte) __pte_unmap(pte)#ifndef CONFIG_HIGHPTE #define __pte_map (dir,km) pmd_page_vaddr(*(dir))
arch/arm/mm/copypage-fa.c +6 -6
@@ -44,11 +44,11 @@ void fa_copy_user_highpage(struct page * {void *kto, *kfrom; - kto =kmap_atomic (to,KM_USER0 ); - kfrom =kmap_atomic (from,KM_USER1 ); + kto =kmap_atomic (to); + kfrom =kmap_atomic (from);fa_copy_user_page (kto, kfrom); -kunmap_atomic (kfrom,KM_USER1 ); -kunmap_atomic (kto,KM_USER0 ); +kunmap_atomic (kfrom); +kunmap_atomic (kto); }/*
@@ -58,7 +58,7 @@ void fa_copy_user_highpage(struct page **/ void fa_clear_user_highpage (struct page *page,unsigned long vaddr) { -void *ptr, *kaddr =kmap_atomic (page,KM_USER0 ); +void *ptr, *kaddr =kmap_atomic (page); asm volatile("\ mov r1, %2 @ 1\n\ mov r2, #0 @ 1\n\
@@ -77,7 +77,7 @@ void fa_clear_user_highpage(struct page : "=r" (ptr) : "0" (kaddr), "I" (PAGE_SIZE / 32) : "r1", "r2", "r3", "ip", "lr"); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }struct cpu_user_fns fa_user_fns__initdata = {
arch/arm/mm/copypage-feroceon.c +6 -6
@@ -72,17 +72,17 @@ void feroceon_copy_user_highpage(struct {void *kto, *kfrom; - kto =kmap_atomic (to,KM_USER0 ); - kfrom =kmap_atomic (from,KM_USER1 ); + kto =kmap_atomic (to); + kfrom =kmap_atomic (from);flush_cache_page (vma, vaddr,page_to_pfn (from));feroceon_copy_user_page (kto, kfrom); -kunmap_atomic (kfrom,KM_USER1 ); -kunmap_atomic (kto,KM_USER0 ); +kunmap_atomic (kfrom); +kunmap_atomic (kto); }void feroceon_clear_user_highpage (struct page *page,unsigned long vaddr) { -void *ptr, *kaddr =kmap_atomic (page,KM_USER0 ); +void *ptr, *kaddr =kmap_atomic (page); asm volatile ("\ mov r1, %2 \n\ mov r2, #0 \n\
@@ -102,7 +102,7 @@ void feroceon_clear_user_highpage(struct : "=r" (ptr) : "0" (kaddr), "I" (PAGE_SIZE / 32) : "r1", "r2", "r3", "r4", "r5", "r6", "r7", "ip", "lr"); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }struct cpu_user_fns feroceon_user_fns__initdata = {
arch/arm/mm/copypage-v3.c +6 -6
@@ -42,11 +42,11 @@ void v3_copy_user_highpage(struct page * {void *kto, *kfrom; - kto =kmap_atomic (to,KM_USER0 ); - kfrom =kmap_atomic (from,KM_USER1 ); + kto =kmap_atomic (to); + kfrom =kmap_atomic (from);v3_copy_user_page (kto, kfrom); -kunmap_atomic (kfrom,KM_USER1 ); -kunmap_atomic (kto,KM_USER0 ); +kunmap_atomic (kfrom); +kunmap_atomic (kto); }/*
@@ -56,7 +56,7 @@ void v3_copy_user_highpage(struct page **/ void v3_clear_user_highpage (struct page *page,unsigned long vaddr) { -void *ptr, *kaddr =kmap_atomic (page,KM_USER0 ); +void *ptr, *kaddr =kmap_atomic (page); asm volatile("\n\ mov r1, %2 @ 1\n\ mov r2, #0 @ 1\n\
@@ -72,7 +72,7 @@ void v3_clear_user_highpage(struct page : "=r" (ptr) : "0" (kaddr), "I" (PAGE_SIZE / 64) : "r1", "r2", "r3", "ip", "lr"); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }struct cpu_user_fns v3_user_fns__initdata = {
arch/arm/mm/copypage-v4mc.c +4 -4
@@ -71,7 +71,7 @@ mc_copy_user_page(void *from, void *to)void v4_mc_copy_user_highpage (struct page *to,struct page *from,unsigned long vaddr,struct vm_area_struct *vma) { -void *kto =kmap_atomic (to,KM_USER1 ); +void *kto =kmap_atomic (to);if (test_and_clear_bit (PG_dcache_dirty, &from->flags))__flush_dcache_page (page_mapping (from), from);
@@ -85,7 +85,7 @@ void v4_mc_copy_user_highpage(struct pagspin_unlock (&minicache_lock); -kunmap_atomic (kto,KM_USER1 ); +kunmap_atomic (kto); }/*
@@ -93,7 +93,7 @@ void v4_mc_copy_user_highpage(struct pag*/ void v4_mc_clear_user_highpage (struct page *page,unsigned long vaddr) { -void *ptr, *kaddr =kmap_atomic (page,KM_USER0 ); +void *ptr, *kaddr =kmap_atomic (page); asm volatile("\ mov r1, %2 @ 1\n\ mov r2, #0 @ 1\n\
@@ -111,7 +111,7 @@ void v4_mc_clear_user_highpage(struct pa : "=r" (ptr) : "0" (kaddr), "I" (PAGE_SIZE / 64) : "r1", "r2", "r3", "ip", "lr"); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }struct cpu_user_fns v4_mc_user_fns__initdata = {
arch/arm/mm/copypage-v4wb.c +6 -6
@@ -52,12 +52,12 @@ void v4wb_copy_user_highpage(struct page {void *kto, *kfrom; - kto =kmap_atomic (to,KM_USER0 ); - kfrom =kmap_atomic (from,KM_USER1 ); + kto =kmap_atomic (to); + kfrom =kmap_atomic (from);flush_cache_page (vma, vaddr,page_to_pfn (from));v4wb_copy_user_page (kto, kfrom); -kunmap_atomic (kfrom,KM_USER1 ); -kunmap_atomic (kto,KM_USER0 ); +kunmap_atomic (kfrom); +kunmap_atomic (kto); }/*
@@ -67,7 +67,7 @@ void v4wb_copy_user_highpage(struct page*/ void v4wb_clear_user_highpage (struct page *page,unsigned long vaddr) { -void *ptr, *kaddr =kmap_atomic (page,KM_USER0 ); +void *ptr, *kaddr =kmap_atomic (page); asm volatile("\ mov r1, %2 @ 1\n\ mov r2, #0 @ 1\n\
@@ -86,7 +86,7 @@ void v4wb_clear_user_highpage(struct pag : "=r" (ptr) : "0" (kaddr), "I" (PAGE_SIZE / 64) : "r1", "r2", "r3", "ip", "lr"); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }struct cpu_user_fns v4wb_user_fns__initdata = {
arch/arm/mm/copypage-v4wt.c +6 -6
@@ -48,11 +48,11 @@ void v4wt_copy_user_highpage(struct page {void *kto, *kfrom; - kto =kmap_atomic (to,KM_USER0 ); - kfrom =kmap_atomic (from,KM_USER1 ); + kto =kmap_atomic (to); + kfrom =kmap_atomic (from);v4wt_copy_user_page (kto, kfrom); -kunmap_atomic (kfrom,KM_USER1 ); -kunmap_atomic (kto,KM_USER0 ); +kunmap_atomic (kfrom); +kunmap_atomic (kto); }/*
@@ -62,7 +62,7 @@ void v4wt_copy_user_highpage(struct page*/ void v4wt_clear_user_highpage (struct page *page,unsigned long vaddr) { -void *ptr, *kaddr =kmap_atomic (page,KM_USER0 ); +void *ptr, *kaddr =kmap_atomic (page); asm volatile("\ mov r1, %2 @ 1\n\ mov r2, #0 @ 1\n\
@@ -79,7 +79,7 @@ void v4wt_clear_user_highpage(struct pag : "=r" (ptr) : "0" (kaddr), "I" (PAGE_SIZE / 64) : "r1", "r2", "r3", "ip", "lr"); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }struct cpu_user_fns v4wt_user_fns__initdata = {
arch/arm/mm/copypage-v6.c +6 -6
@@ -38,12 +38,12 @@ static void v6_copy_user_highpage_nonali {void *kto, *kfrom; - kfrom =kmap_atomic (from,KM_USER0 ); - kto =kmap_atomic (to,KM_USER1 ); + kfrom =kmap_atomic (from); + kto =kmap_atomic (to);copy_page (kto, kfrom);__cpuc_flush_dcache_area (kto,PAGE_SIZE ); -kunmap_atomic (kto,KM_USER1 ); -kunmap_atomic (kfrom,KM_USER0 ); +kunmap_atomic (kto); +kunmap_atomic (kfrom); }/*
@@ -52,9 +52,9 @@ static void v6_copy_user_highpage_nonali*/ static void v6_clear_user_highpage_nonaliasing (struct page *page,unsigned long vaddr) { -void *kaddr =kmap_atomic (page,KM_USER0 ); +void *kaddr =kmap_atomic (page);clear_page (kaddr); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }/*
arch/arm/mm/copypage-xsc3.c +6 -6
@@ -75,12 +75,12 @@ void xsc3_mc_copy_user_highpage(struct p {void *kto, *kfrom; - kto =kmap_atomic (to,KM_USER0 ); - kfrom =kmap_atomic (from,KM_USER1 ); + kto =kmap_atomic (to); + kfrom =kmap_atomic (from);flush_cache_page (vma, vaddr,page_to_pfn (from));xsc3_mc_copy_user_page (kto, kfrom); -kunmap_atomic (kfrom,KM_USER1 ); -kunmap_atomic (kto,KM_USER0 ); +kunmap_atomic (kfrom); +kunmap_atomic (kto); }/*
@@ -90,7 +90,7 @@ void xsc3_mc_copy_user_highpage(struct p*/ void xsc3_mc_clear_user_highpage (struct page *page,unsigned long vaddr) { -void *ptr, *kaddr =kmap_atomic (page,KM_USER0 ); +void *ptr, *kaddr =kmap_atomic (page); asm volatile ("\ mov r1, %2 \n\ mov r2, #0 \n\
@@ -105,7 +105,7 @@ void xsc3_mc_clear_user_highpage(struct : "=r" (ptr) : "0" (kaddr), "I" (PAGE_SIZE / 32) : "r1", "r2", "r3"); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }struct cpu_user_fns xsc3_mc_user_fns__initdata = {
arch/arm/mm/copypage-xscale.c +4 -4
@@ -93,7 +93,7 @@ mc_copy_user_page(void *from, void *to)void xscale_mc_copy_user_highpage (struct page *to,struct page *from,unsigned long vaddr,struct vm_area_struct *vma) { -void *kto =kmap_atomic (to,KM_USER1 ); +void *kto =kmap_atomic (to);if (test_and_clear_bit (PG_dcache_dirty, &from->flags))__flush_dcache_page (page_mapping (from), from);
@@ -107,7 +107,7 @@ void xscale_mc_copy_user_highpage(structspin_unlock (&minicache_lock); -kunmap_atomic (kto,KM_USER1 ); +kunmap_atomic (kto); }/*
@@ -116,7 +116,7 @@ void xscale_mc_copy_user_highpage(structvoid xscale_mc_clear_user_highpage (struct page *page,unsigned long vaddr) { -void *ptr, *kaddr =kmap_atomic (page,KM_USER0 ); +void *ptr, *kaddr =kmap_atomic (page); asm volatile( "mov r1, %2 \n\ mov r2, #0 \n\
@@ -133,7 +133,7 @@ xscale_mc_clear_user_highpage(struct pag : "=r" (ptr) : "0" (kaddr), "I" (PAGE_SIZE / 32) : "r1", "r2", "r3", "ip"); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }struct cpu_user_fns xscale_mc_user_fns__initdata = {
arch/arm/mm/highmem.c +3 -3
@@ -36,7 +36,7 @@ void kunmap(struct page *page) }EXPORT_SYMBOL (kunmap); -void *kmap_atomic (struct page *page,enum km_type type) +void *kmap_atomic (struct page *page) {unsigned int idx;unsigned long vaddr;
@@ -84,7 +84,7 @@ void *kmap_atomic(struct page *page, enu }EXPORT_SYMBOL (kmap_atomic); -void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) +void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ;unsigned int idx;
@@ -110,7 +110,7 @@ void kunmap_atomic_notypecheck(void *kva }EXPORT_SYMBOL (kunmap_atomic_notypecheck); -void *kmap_atomic_pfn (unsigned long pfn,enum km_type type) +void *kmap_atomic_pfn (unsigned long pfn) {unsigned int idx;unsigned long vaddr;
arch/frv/include/asm/highmem.h +2 -2
@@ -124,8 +124,8 @@ do { \ asmvolatile ("tlbpr %0,gr0,#4,#1" : :"r" (vaddr) :"memory" ); \ } while(0) -void *kmap_atomic(struct page *page, enum km_type type); -void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type); +void *kmap_atomic(struct page *page); +void kunmap_atomic_notypecheck (void *kvaddr);#endif /* !__ASSEMBLY__ */
arch/frv/include/asm/pgtable.h +4 -4
@@ -451,11 +451,11 @@ static inline pte_t pte_modify(pte_t pte#if defined(CONFIG_HIGHPTE )#define pte_offset_map (dir, address) \ - ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE0) + pte_index(address)) + ((pte_t *)kmap_atomic(pmd_page(*(dir))) + pte_index(address))#define pte_offset_map_nested (dir, address) \ - ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE1) + pte_index(address)) -#define pte_unmap (pte) kunmap_atomic(pte, KM_PTE0) -#define pte_unmap_nested (pte) kunmap_atomic((pte), KM_PTE1) + ((pte_t *)kmap_atomic(pmd_page(*(dir))) + pte_index(address)) +#define pte_unmap (pte) kunmap_atomic(pte) +#define pte_unmap_nested (pte) kunmap_atomic((pte))#else #define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + pte_index(address))
arch/frv/mm/highmem.c +2 -2
@@ -37,7 +37,7 @@ struct page *kmap_atomic_to_page(void *preturn virt_to_page (ptr); } -void *kmap_atomic (struct page *page,enum km_type type) +void *kmap_atomic (struct page *page) {unsigned long paddr;
@@ -65,7 +65,7 @@ void *kmap_atomic(struct page *page, enu }EXPORT_SYMBOL (kmap_atomic); -void kunmap_atomic (void *kvaddr,enum km_type type) +void kunmap_atomic (void *kvaddr) { type =kmap_atomic_idx_pop ();switch (type) {
arch/microblaze/include/asm/pgtable.h +4 -4
@@ -497,12 +497,12 @@ static inline pmd_t *pmd_offset(pgd_t *d#define pte_offset_kernel (dir, addr) \ ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(addr))#define pte_offset_map (dir, addr) \ - ((pte_t *) kmap_atomic(pmd_page(*(dir)), KM_PTE0) + pte_index(addr)) + ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr))#define pte_offset_map_nested (dir, addr) \ - ((pte_t *) kmap_atomic(pmd_page(*(dir)), KM_PTE1) + pte_index(addr)) + ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr)) -#define pte_unmap (pte) kunmap_atomic(pte, KM_PTE0) -#define pte_unmap_nested (pte) kunmap_atomic(pte, KM_PTE1) +#define pte_unmap (pte) kunmap_atomic(pte) +#define pte_unmap_nested (pte) kunmap_atomic(pte)/* Encode and decode a nonlinear file mapping entry */ #define PTE_FILE_MAX_BITS 29
arch/mips/include/asm/highmem.h +3 -3
@@ -47,9 +47,9 @@ extern void kunmap_high(struct page *pagextern void *__kmap (struct page *page);extern void __kunmap (struct page *page); -extern void *__kmap_atomic (struct page *page,enum km_type type); -extern void __kunmap_atomic_notypecheck (void *kvaddr,enum km_type type); -extern void *kmap_atomic_pfn (unsigned long pfn,enum km_type type); +extern void *__kmap_atomic (struct page *page); +extern void __kunmap_atomic_notypecheck (void *kvaddr); +extern void *kmap_atomic_pfn (unsigned long pfn);extern struct page *__kmap_atomic_to_page (void *ptr);#define kmap __kmap
arch/mips/mm/c-r4k.c +2 -2
@@ -498,7 +498,7 @@ static inline void local_r4k_flush_cacheif (map_coherent) vaddr =kmap_coherent (page, addr);else - vaddr =kmap_atomic (page,KM_USER0 ); + vaddr =kmap_atomic (page); addr = (unsigned long )vaddr; }
@@ -521,7 +521,7 @@ static inline void local_r4k_flush_cacheif (map_coherent)kunmap_coherent ();else -kunmap_atomic (vaddr,KM_USER0 ); +kunmap_atomic (vaddr); } }
arch/mips/mm/highmem.c +3 -3
@@ -41,7 +41,7 @@ EXPORT_SYMBOL(__kunmap);* kmaps are appropriate for short, tight code paths only. */ -void *__kmap_atomic (struct page *page,enum km_type type) +void *__kmap_atomic (struct page *page) {enum fixed_addresses idx;unsigned long vaddr;
@@ -64,7 +64,7 @@ void *__kmap_atomic(struct page *page, e }EXPORT_SYMBOL (__kmap_atomic); -void __kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) +void __kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ;unsigned int idx;
@@ -95,7 +95,7 @@ EXPORT_SYMBOL(__kunmap_atomic);* This is the same as kmap_atomic() but can map memory that doesn't * have a struct page associated with it. */ -void *kmap_atomic_pfn (unsigned long pfn,enum km_type type) +void *kmap_atomic_pfn (unsigned long pfn) {enum fixed_addresses idx;unsigned long vaddr;
arch/mips/mm/init.c +4 -4
@@ -209,21 +209,21 @@ void copy_user_highpage(struct page *to, {void *vfrom, *vto; - vto =kmap_atomic (to,KM_USER1 ); + vto =kmap_atomic (to);if (cpu_has_dc_aliases &&page_mapped (from) && !Page_dcache_dirty (from)) { vfrom =kmap_coherent (from, vaddr);copy_page (vto, vfrom);kunmap_coherent (); }else { - vfrom =kmap_atomic (from,KM_USER0 ); + vfrom =kmap_atomic (from);copy_page (vto, vfrom); -kunmap_atomic (vfrom,KM_USER0 ); +kunmap_atomic (vfrom); }if ((!cpu_has_ic_fills_f_dc) ||pages_do_alias ((unsigned long )vto, vaddr &PAGE_MASK ))flush_data_cache_page ((unsigned long )vto); -kunmap_atomic (vto,KM_USER1 ); +kunmap_atomic (vto);/* Make sure this page is cleared on other CPU's too before using it */ smp_wmb (); }
arch/mn10300/include/asm/highmem.h +2 -2
@@ -70,7 +70,7 @@ static inline void kunmap(struct page *p* be used in IRQ contexts, so in some (very limited) cases we need * it. */ -static inline unsigned long kmap_atomic (struct page *page,enum km_type type) +static inline unsigned long kmap_atomic (struct page *page) {enum fixed_addresses idx;unsigned long vaddr;
@@ -92,7 +92,7 @@ static inline unsigned long kmap_atomic(return vaddr; } -static inline void kunmap_atomic_notypecheck (unsigned long vaddr,enum km_type type) +static inline void kunmap_atomic_notypecheck (unsigned long vaddr) {if (vaddr <FIXADDR_START ) {/* FIXME */ pagefault_enable ();
arch/powerpc/include/asm/highmem.h +3 -3
@@ -60,9 +60,9 @@ extern pte_t *pkmap_page_table;extern void *kmap_high (struct page *page);extern void kunmap_high (struct page *page); -extern void *kmap_atomic_prot (struct page *page,enum km_type type, +extern void *kmap_atomic_prot (struct page *page,pgprot_t prot); -extern void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type); +extern void kunmap_atomic_notypecheck (void *kvaddr);static inline void *kmap (struct page *page) {
@@ -80,7 +80,7 @@ static inline void kunmap(struct page *pkunmap_high (page); } -static inline void *kmap_atomic (struct page *page,enum km_type type) +static inline void *kmap_atomic (struct page *page) {return kmap_atomic_prot (page, type, kmap_prot); }
arch/powerpc/include/asm/pgtable-ppc32.h +4 -4
@@ -308,12 +308,12 @@ static inline void __ptep_set_access_fla#define pte_offset_kernel (dir, addr) \ ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(addr))#define pte_offset_map (dir, addr) \ - ((pte_t *) kmap_atomic(pmd_page(*(dir)), KM_PTE0) + pte_index(addr)) + ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr))#define pte_offset_map_nested (dir, addr) \ - ((pte_t *) kmap_atomic(pmd_page(*(dir)), KM_PTE1) + pte_index(addr)) + ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr)) -#define pte_unmap (pte) kunmap_atomic(pte, KM_PTE0) -#define pte_unmap_nested (pte) kunmap_atomic(pte, KM_PTE1) +#define pte_unmap (pte) kunmap_atomic(pte) +#define pte_unmap_nested (pte) kunmap_atomic(pte)/* * Encode and decode a swap entry.
arch/powerpc/kvm/book3s.c +2 -2
@@ -423,14 +423,14 @@ static void kvmppc_patch_dcbz(struct kvm hpage_offset /=4 ;get_page (hpage); - page =kmap_atomic (hpage,KM_USER0 ); + page =kmap_atomic (hpage);/* patch dcbz into reserved instruction, so we trap */ for (i=hpage_offset; i < hpage_offset + (HW_PAGE_SIZE /4 ); i++)if ((page[i] &0xff0007ff ) ==INS_DCBZ ) page[i] &=0xfffffff7 ; -kunmap_atomic (page,KM_USER0 ); +kunmap_atomic (page);put_page (hpage); }
arch/powerpc/mm/dma-noncoherent.c +1 -1
@@ -369,7 +369,7 @@ static inline void __dma_sync_page_highm/* Sync this buffer segment */ __dma_sync ((void *)start, seg_size, direction); -kunmap_atomic ((void *)start,KM_PPC_SYNC_PAGE ); +kunmap_atomic ((void *)start); seg_nr++;/* Calculate next buffer segment size */
arch/powerpc/mm/highmem.c +2 -2
@@ -29,7 +29,7 @@* be used in IRQ contexts, so in some (very limited) cases we need * it. */ -void *kmap_atomic_prot (struct page *page,enum km_type type,pgprot_t prot) +void *kmap_atomic_prot (struct page *page,pgprot_t prot) {unsigned int idx;unsigned long vaddr;
@@ -52,7 +52,7 @@ void *kmap_atomic_prot(struct page *page }EXPORT_SYMBOL (kmap_atomic_prot); -void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) +void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ;
arch/powerpc/mm/mem.c +2 -2
@@ -433,9 +433,9 @@ void flush_dcache_icache_page(struct pag#endif #ifdef CONFIG_BOOKE { -void *start =kmap_atomic (page,KM_PPC_SYNC_ICACHE ); +void *start =kmap_atomic (page);__flush_dcache_icache (start); -kunmap_atomic (start,KM_PPC_SYNC_ICACHE ); +kunmap_atomic (start); }#elif defined(CONFIG_8xx) || defined(CONFIG_PPC64 )/* On 8xx there is no need to kmap since highmem is not supported */
arch/s390/crypto/des_s390.c +4 -4
@@ -143,7 +143,7 @@ static int ecb_des_encrypt(struct blkcipstruct blkcipher_walk walk;blkcipher_walk_init (&walk, dst, src, nbytes); -return ecb_desall_crypt (desc,KM_DEA_ENCRYPT , sctx->key, &walk); +return ecb_desall_crypt (desc, sctx->key, &walk); } static int ecb_des_decrypt(struct blkcipher_desc *desc,
@@ -154,7 +154,7 @@ static int ecb_des_decrypt(struct blkcipstruct blkcipher_walk walk;blkcipher_walk_init (&walk, dst, src, nbytes); -return ecb_desall_crypt (desc,KM_DEA_DECRYPT , sctx->key, &walk); +return ecb_desall_crypt (desc, sctx->key, &walk); }static struct crypto_alg ecb_des_alg = {
@@ -296,7 +296,7 @@ static int ecb_des3_192_encrypt(struct bstruct blkcipher_walk walk;blkcipher_walk_init (&walk, dst, src, nbytes); -return ecb_desall_crypt (desc,KM_TDEA_192_ENCRYPT , sctx->key, &walk); +return ecb_desall_crypt (desc, sctx->key, &walk); } static int ecb_des3_192_decrypt(struct blkcipher_desc *desc,
@@ -307,7 +307,7 @@ static int ecb_des3_192_decrypt(struct bstruct blkcipher_walk walk;blkcipher_walk_init (&walk, dst, src, nbytes); -return ecb_desall_crypt (desc,KM_TDEA_192_DECRYPT , sctx->key, &walk); +return ecb_desall_crypt (desc, sctx->key, &walk); }static struct crypto_alg ecb_des3_192_alg = {
arch/sh/mm/cache-sh4.c +2 -2
@@ -244,7 +244,7 @@ static void sh4_flush_cache_page(void *aif (map_coherent) vaddr =kmap_coherent (page, address);else - vaddr =kmap_atomic (page,KM_USER0 ); + vaddr =kmap_atomic (page); address = (unsigned long )vaddr; }
@@ -259,7 +259,7 @@ static void sh4_flush_cache_page(void *aif (map_coherent)kunmap_coherent (vaddr);else -kunmap_atomic (vaddr,KM_USER0 ); +kunmap_atomic (vaddr); } }
arch/sh/mm/cache.c +6 -6
@@ -95,7 +95,7 @@ void copy_user_highpage(struct page *to, {void *vfrom, *vto; - vto =kmap_atomic (to,KM_USER1 ); + vto =kmap_atomic (to);if (boot_cpu_data.dcache.n_aliases &&page_mapped (from) && !test_bit (PG_dcache_dirty, &from->flags)) {
@@ -103,15 +103,15 @@ void copy_user_highpage(struct page *to,copy_page (vto, vfrom);kunmap_coherent (vfrom); }else { - vfrom =kmap_atomic (from,KM_USER0 ); + vfrom =kmap_atomic (from);copy_page (vto, vfrom); -kunmap_atomic (vfrom,KM_USER0 ); +kunmap_atomic (vfrom); }if (pages_do_alias ((unsigned long )vto, vaddr &PAGE_MASK ))__flush_purge_region (vto,PAGE_SIZE ); -kunmap_atomic (vto,KM_USER1 ); +kunmap_atomic (vto);/* Make sure this page is cleared on other CPU's too before using it */ smp_wmb (); }
@@ -119,14 +119,14 @@ EXPORT_SYMBOL(copy_user_highpage);void clear_user_highpage (struct page *page,unsigned long vaddr) { -void *kaddr =kmap_atomic (page,KM_USER0 ); +void *kaddr =kmap_atomic (page);clear_page (kaddr);if (pages_do_alias ((unsigned long )kaddr, vaddr &PAGE_MASK ))__flush_purge_region (kaddr,PAGE_SIZE ); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }EXPORT_SYMBOL (clear_user_highpage);
arch/sparc/include/asm/highmem.h +2 -2
@@ -70,8 +70,8 @@ static inline void kunmap(struct page *pkunmap_high (page); } -extern void *kmap_atomic (struct page *page,enum km_type type); -extern void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type); +extern void *kmap_atomic (struct page *page); +extern void kunmap_atomic_notypecheck (void *kvaddr);extern struct page *kmap_atomic_to_page (void *vaddr);#define flush_cache_kmaps () flush_cache_all()
arch/sparc/mm/highmem.c +2 -2
@@ -29,7 +29,7 @@#include <asm/tlbflush.h> #include <asm/fixmap.h> -void *kmap_atomic (struct page *page,enum km_type type) +void *kmap_atomic (struct page *page) {unsigned long idx;unsigned long vaddr;
@@ -65,7 +65,7 @@ void *kmap_atomic(struct page *page, enu }EXPORT_SYMBOL (kmap_atomic); -void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) +void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ;
arch/tile/include/asm/highmem.h +5 -5
@@ -60,12 +60,12 @@ void *kmap_fix_kpte(struct page *page, i/* This macro is used only in map_new_virtual() to map "page". */ #define kmap_prot page_to_kpgprot(page) -void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type); -void *kmap_atomic_pfn (unsigned long pfn,enum km_type type); -void *kmap_atomic_prot_pfn (unsigned long pfn,enum km_type type,pgprot_t prot); +void kunmap_atomic_notypecheck (void *kvaddr); +void *kmap_atomic_pfn (unsigned long pfn); +void *kmap_atomic_prot_pfn (unsigned long pfn,pgprot_t prot);struct page *kmap_atomic_to_page (void *ptr); -void *kmap_atomic_prot (struct page *page,enum km_type type,pgprot_t prot); -void *kmap_atomic (struct page *page,enum km_type type); +void *kmap_atomic_prot (struct page *page,pgprot_t prot); +void *kmap_atomic (struct page *page);void kmap_atomic_fix_kpte (struct page *page,int finished);#define flush_cache_kmaps () do { } while (0)
arch/tile/include/asm/pgtable.h +4 -4
@@ -346,11 +346,11 @@ static inline pte_t pte_modify(pte_t pte#if defined(CONFIG_HIGHPTE )extern pte_t *_pte_offset_map (pmd_t *,unsigned long address,enum km_type );#define pte_offset_map (dir, address) \ - _pte_offset_map(dir, address, KM_PTE0) + _pte_offset_map(dir, address)#define pte_offset_map_nested (dir, address) \ - _pte_offset_map(dir, address, KM_PTE1) -#define pte_unmap (pte) kunmap_atomic(pte, KM_PTE0) -#define pte_unmap_nested (pte) kunmap_atomic(pte, KM_PTE1) + _pte_offset_map(dir, address) +#define pte_unmap (pte) kunmap_atomic(pte) +#define pte_unmap_nested (pte) kunmap_atomic(pte)#else #define pte_offset_map (dir, address) pte_offset_kernel(dir, address)#define pte_offset_map_nested (dir, address) pte_offset_map(dir, address)
arch/tile/kernel/machine_kexec.c +3 -3
@@ -182,13 +182,13 @@ static void kexec_find_and_set_command_lif ((entry &IND_SOURCE )) {void *va = -kmap_atomic_pfn (entry >>PAGE_SHIFT ,KM_USER0 ); +kmap_atomic_pfn (entry >>PAGE_SHIFT ); r =kexec_bn2cl (va);if (r) { command_line = r;break ; } -kunmap_atomic (va,KM_USER0 ); +kunmap_atomic (va); } }
@@ -198,7 +198,7 @@ static void kexec_find_and_set_command_l hverr =hv_set_command_line ( (HV_VirtAddr ) command_line,strlen (command_line)); -kunmap_atomic (command_line,KM_USER0 ); +kunmap_atomic (command_line); }else {pr_info ("%s: no command line found; making empty\n" , __func__);
arch/tile/mm/highmem.c +6 -6
@@ -137,7 +137,7 @@ static DEFINE_PER_CPU(struct kmap_amps,* If we examine it earlier we are exposed to a race where it looks * writable earlier, but becomes immutable before we write the PTE. */ -static void kmap_atomic_register (struct page *page,enum km_type type, +static void kmap_atomic_register (struct page *page,unsigned long va,pte_t *ptep,pte_t pteval) {unsigned long flags;
@@ -240,7 +240,7 @@ void kmap_atomic_fix_kpte(struct page *p* When holding an atomic kmap is is not legal to sleep, so atomic * kmaps are appropriate for short, tight code paths only. */ -void *kmap_atomic_prot (struct page *page,enum km_type type,pgprot_t prot) +void *kmap_atomic_prot (struct page *page,pgprot_t prot) {enum fixed_addresses idx;unsigned long vaddr;
@@ -269,14 +269,14 @@ void *kmap_atomic_prot(struct page *page }EXPORT_SYMBOL (kmap_atomic_prot); -void *kmap_atomic (struct page *page,enum km_type type) +void *kmap_atomic (struct page *page) {/* PAGE_NONE is a magic value that tells us to check immutability. */ return kmap_atomic_prot (page, type,PAGE_NONE ); }EXPORT_SYMBOL (kmap_atomic); -void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) +void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ;enum fixed_addresses idx = type +KM_TYPE_NR *smp_processor_id ();
@@ -306,11 +306,11 @@ EXPORT_SYMBOL(kunmap_atomic_notypecheck)* This API is supposed to allow us to map memory without a "struct page". * Currently we don't support this, though this may change in the future. */ -void *kmap_atomic_pfn (unsigned long pfn,enum km_type type) +void *kmap_atomic_pfn (unsigned long pfn) {return kmap_atomic (pfn_to_page (pfn), type); } -void *kmap_atomic_prot_pfn (unsigned long pfn,enum km_type type,pgprot_t prot) +void *kmap_atomic_prot_pfn (unsigned long pfn,pgprot_t prot) {return kmap_atomic_prot (pfn_to_page (pfn), type, prot); }
arch/tile/mm/pgtable.c +1 -1
@@ -134,7 +134,7 @@ void __set_fixmap(enum fixed_addresses i }#if defined(CONFIG_HIGHPTE ) -pte_t *_pte_offset_map (pmd_t *dir,unsigned long address,enum km_type type) +pte_t *_pte_offset_map (pmd_t *dir,unsigned long address) {pte_t *pte =kmap_atomic (pmd_page (*dir), type) + (pmd_ptfn (*dir) <<HV_LOG2_PAGE_TABLE_ALIGN ) & ~PAGE_MASK ;
arch/um/kernel/skas/uaccess.c +2 -2
@@ -68,7 +68,7 @@ static int do_op_one_page(unsigned longreturn -1 ; page =pte_page (*pte); - addr = (unsigned long )kmap_atomic (page,KM_UML_USERCOPY ) + + addr = (unsigned long )kmap_atomic (page) + (addr & ~PAGE_MASK ); current->thread.fault_catcher = &buf;
@@ -81,7 +81,7 @@ static int do_op_one_page(unsigned long current->thread.fault_catcher =NULL ; -kunmap_atomic ((void *)addr,KM_UML_USERCOPY ); +kunmap_atomic ((void *)addr);return n; }
arch/x86/include/asm/highmem.h +5 -5
@@ -59,11 +59,11 @@ extern void kunmap_high(struct page *pagvoid *kmap (struct page *page);void kunmap (struct page *page); -void *kmap_atomic_prot (struct page *page,enum km_type type,pgprot_t prot); -void *kmap_atomic (struct page *page,enum km_type type); -void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type); -void *kmap_atomic_pfn (unsigned long pfn,enum km_type type); -void *kmap_atomic_prot_pfn (unsigned long pfn,enum km_type type,pgprot_t prot); +void *kmap_atomic_prot (struct page *page,pgprot_t prot); +void *kmap_atomic (struct page *page); +void kunmap_atomic_notypecheck (void *kvaddr); +void *kmap_atomic_pfn (unsigned long pfn); +void *kmap_atomic_prot_pfn (unsigned long pfn,pgprot_t prot);struct page *kmap_atomic_to_page (void *ptr);#define flush_cache_kmaps () do { } while (0)
arch/x86/include/asm/iomap.h +2 -2
@@ -27,10 +27,10 @@#include <asm/tlbflush.h> void * -iomap_atomic_prot_pfn (unsigned long pfn,enum km_type type,pgprot_t prot); +iomap_atomic_prot_pfn (unsigned long pfn,pgprot_t prot);void -iounmap_atomic (void *kvaddr,enum km_type type); +iounmap_atomic (void *kvaddr);int iomap_create_wc (resource_size_t base,unsigned long size,pgprot_t *prot);
arch/x86/include/asm/pgtable_32.h +2 -2
@@ -57,10 +57,10 @@ extern void set_pmd_pfn(unsigned long, u ((pte_t *)kmap_atomic (pmd_page (*(dir)), __KM_PTE) + \ pte_index((address)))#define pte_offset_map_nested (dir, address) \ - ((pte_t *)kmap_atomic(pmd_page(*(dir)), KM_PTE1) + \ + ((pte_t *)kmap_atomic(pmd_page(*(dir))) + \ pte_index((address)))#define pte_unmap (pte) kunmap_atomic((pte), __KM_PTE) -#define pte_unmap_nested (pte) kunmap_atomic((pte), KM_PTE1) +#define pte_unmap_nested (pte) kunmap_atomic((pte))#else #define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + pte_index((address)))
arch/x86/kernel/crash_dump_32.c +4 -4
@@ -61,20 +61,20 @@ ssize_t copy_oldmem_page(unsigned long pif (!is_crashed_pfn_valid (pfn))return -EFAULT ; - vaddr =kmap_atomic_pfn (pfn,KM_PTE0 ); + vaddr =kmap_atomic_pfn (pfn);if (!userbuf) {memcpy (buf, (vaddr + offset), csize); -kunmap_atomic (vaddr,KM_PTE0 ); +kunmap_atomic (vaddr); }else {if (!kdump_buf_page) {printk (KERN_WARNING "Kdump: Kdump buffer page not" " allocated\n" ); -kunmap_atomic (vaddr,KM_PTE0 ); +kunmap_atomic (vaddr);return -EFAULT ; }copy_page (kdump_buf_page, vaddr); -kunmap_atomic (vaddr,KM_PTE0 ); +kunmap_atomic (vaddr);if (copy_to_user (buf, (kdump_buf_page + offset), csize))return -EFAULT ; }
arch/x86/kvm/lapic.c +4 -4
@@ -1175,9 +1175,9 @@ void kvm_lapic_sync_from_vapic(struct kvif (!irqchip_in_kernel (vcpu->kvm) || !vcpu->arch.apic->vapic_addr)return ; - vapic =kmap_atomic (vcpu->arch.apic->vapic_page,KM_USER0 ); + vapic =kmap_atomic (vcpu->arch.apic->vapic_page); data = *(u32 *)(vapic +offset_in_page (vcpu->arch.apic->vapic_addr)); -kunmap_atomic (vapic,KM_USER0 ); +kunmap_atomic (vapic);apic_set_tpr (vcpu->arch.apic, data &0xff ); }
@@ -1202,9 +1202,9 @@ void kvm_lapic_sync_to_vapic(struct kvm_ max_isr =0 ; data = (tpr &0xff ) | ((max_isr &0xf0 ) <<8 ) | (max_irr <<24 ); - vapic =kmap_atomic (vcpu->arch.apic->vapic_page,KM_USER0 ); + vapic =kmap_atomic (vcpu->arch.apic->vapic_page); *(u32 *)(vapic +offset_in_page (vcpu->arch.apic->vapic_addr)) = data; -kunmap_atomic (vapic,KM_USER0 ); +kunmap_atomic (vapic); }void kvm_lapic_set_vapic_addr (struct kvm_vcpu *vcpu,gpa_t vapic_addr)
arch/x86/kvm/paging_tmpl.h +2 -2
@@ -89,9 +89,9 @@ static bool FNAME(cmpxchg_gpte)(struct k page =gfn_to_page (kvm, table_gfn); - table =kmap_atomic (page,KM_USER0 ); + table =kmap_atomic (page); ret =CMPXCHG (&table[index], orig_pte, new_pte); -kunmap_atomic (table,KM_USER0 ); +kunmap_atomic (table);kvm_release_page_dirty (page);
arch/x86/kvm/x86.c +4 -4
@@ -934,12 +934,12 @@ static void kvm_write_guest_time(struct*/ vcpu->hv_clock.version +=2 ; - shared_kaddr =kmap_atomic (vcpu->time_page,KM_USER0 ); + shared_kaddr =kmap_atomic (vcpu->time_page);memcpy (shared_kaddr + vcpu->time_offset, &vcpu->hv_clock,sizeof (vcpu->hv_clock)); -kunmap_atomic (shared_kaddr,KM_USER0 ); +kunmap_atomic (shared_kaddr);mark_page_dirty (v->kvm, vcpu->time >>PAGE_SHIFT ); }
@@ -3567,7 +3567,7 @@ static int emulator_cmpxchg_emulated(uns goto emul_write; } - kaddr =kmap_atomic (page,KM_USER0 ); + kaddr =kmap_atomic (page); kaddr +=offset_in_page (gpa);switch (bytes) {case 1 :
@@ -3585,7 +3585,7 @@ static int emulator_cmpxchg_emulated(unsdefault :BUG (); } -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr);kvm_release_page_dirty (page);if (!exchanged)
arch/x86/lib/usercopy_32.c +2 -2
@@ -760,9 +760,9 @@ survive:break ; } - maddr =kmap_atomic (pg,KM_USER0 ); + maddr =kmap_atomic (pg);memcpy (maddr + offset, from, len); -kunmap_atomic (maddr,KM_USER0 ); +kunmap_atomic (maddr);set_page_dirty_lock (pg);put_page (pg);up_read (¤t->mm->mmap_sem);
arch/x86/mm/highmem_32.c +4 -4
@@ -27,7 +27,7 @@ void kunmap(struct page *page)* However when holding an atomic kmap it is not legal to sleep, so atomic * kmaps are appropriate for short, tight code paths only. */ -void *kmap_atomic_prot (struct page *page,enum km_type type,pgprot_t prot) +void *kmap_atomic_prot (struct page *page,pgprot_t prot) {enum fixed_addresses idx;unsigned long vaddr;
@@ -47,12 +47,12 @@ void *kmap_atomic_prot(struct page *pagereturn (void *)vaddr; } -void *kmap_atomic (struct page *page,enum km_type type) +void *kmap_atomic (struct page *page) {return kmap_atomic_prot (page, type, kmap_prot); } -void kunmap_atomic_notypecheck (void *kvaddr,enum km_type type) +void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ;enum fixed_addresses idx;
@@ -89,7 +89,7 @@ void kunmap_atomic_notypecheck(void *kva* This is the same as kmap_atomic() but can map memory that doesn't * have a struct page associated with it. */ -void *kmap_atomic_pfn (unsigned long pfn,enum km_type type) +void *kmap_atomic_pfn (unsigned long pfn) {return kmap_atomic_prot_pfn (pfn, type, kmap_prot); }
arch/x86/mm/iomap_32.c +3 -3
@@ -55,7 +55,7 @@ iomap_free(resource_size_t base, unsigne }EXPORT_SYMBOL_GPL (iomap_free); -void *kmap_atomic_prot_pfn (unsigned long pfn,enum km_type type,pgprot_t prot) +void *kmap_atomic_prot_pfn (unsigned long pfn,pgprot_t prot) {enum fixed_addresses idx;unsigned long vaddr;
@@ -75,7 +75,7 @@ void *kmap_atomic_prot_pfn(unsigned long* Map 'pfn' using fixed map 'type' and protections 'prot' */ void * -iomap_atomic_prot_pfn (unsigned long pfn,enum km_type type,pgprot_t prot) +iomap_atomic_prot_pfn (unsigned long pfn,pgprot_t prot) {/* * For non-PAT systems, promote PAGE_KERNEL_WC to PAGE_KERNEL_UC_MINUS.
@@ -91,7 +91,7 @@ iomap_atomic_prot_pfn(unsigned long pfn,EXPORT_SYMBOL_GPL (iomap_atomic_prot_pfn);void -iounmap_atomic (void *kvaddr,enum km_type type) +iounmap_atomic (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ;enum fixed_addresses idx;
crypto/async_tx/async_memcpy.c +4 -4
@@ -78,13 +78,13 @@ async_memcpy(struct page *dest, struct p/* wait for any prerequisite operations */ async_tx_quiesce (&submit->depend_tx); - dest_buf =kmap_atomic (dest,KM_USER0 ) + dest_offset; - src_buf =kmap_atomic (src,KM_USER1 ) + src_offset; + dest_buf =kmap_atomic (dest) + dest_offset; + src_buf =kmap_atomic (src) + src_offset;memcpy (dest_buf, src_buf, len); -kunmap_atomic (src_buf,KM_USER1 ); -kunmap_atomic (dest_buf,KM_USER0 ); +kunmap_atomic (src_buf); +kunmap_atomic (dest_buf);async_tx_sync_epilog (submit); }
drivers/ata/libata-sff.c +4 -4
@@ -716,13 +716,13 @@ static void ata_pio_sector(struct ata_qu/* FIXME: use a bounce buffer */ local_irq_save (flags); - buf =kmap_atomic (page,KM_IRQ0 ); + buf =kmap_atomic (page);/* do the actual data transfer */ ap->ops->sff_data_xfer (qc->dev, buf + offset, qc->sect_size, do_write); -kunmap_atomic (buf,KM_IRQ0 ); +kunmap_atomic (buf);local_irq_restore (flags); }else { buf =page_address (page);
@@ -861,13 +861,13 @@ next_sg:/* FIXME: use bounce buffer */ local_irq_save (flags); - buf =kmap_atomic (page,KM_IRQ0 ); + buf =kmap_atomic (page);/* do the actual data transfer */ consumed = ap->ops->sff_data_xfer (dev, buf + offset, count, rw); -kunmap_atomic (buf,KM_IRQ0 ); +kunmap_atomic (buf);local_irq_restore (flags); }else { buf =page_address (page);
drivers/block/brd.c +10 -10
@@ -245,9 +245,9 @@ static void copy_to_brd(struct brd_devic page =brd_lookup_page (brd, sector);BUG_ON (!page); - dst =kmap_atomic (page,KM_USER1 ); + dst =kmap_atomic (page);memcpy (dst + offset, src, copy); -kunmap_atomic (dst,KM_USER1 ); +kunmap_atomic (dst);if (copy < n) { src += copy;
@@ -256,9 +256,9 @@ static void copy_to_brd(struct brd_devic page =brd_lookup_page (brd, sector);BUG_ON (!page); - dst =kmap_atomic (page,KM_USER1 ); + dst =kmap_atomic (page);memcpy (dst, src, copy); -kunmap_atomic (dst,KM_USER1 ); +kunmap_atomic (dst); } }
@@ -276,9 +276,9 @@ static void copy_from_brd(void *dst, str copy =min_t (size_t, n,PAGE_SIZE - offset); page =brd_lookup_page (brd, sector);if (page) { - src =kmap_atomic (page,KM_USER1 ); + src =kmap_atomic (page);memcpy (dst, src + offset, copy); -kunmap_atomic (src,KM_USER1 ); +kunmap_atomic (src); }else memset (dst,0 , copy);
@@ -288,9 +288,9 @@ static void copy_from_brd(void *dst, str copy = n - copy; page =brd_lookup_page (brd, sector);if (page) { - src =kmap_atomic (page,KM_USER1 ); + src =kmap_atomic (page);memcpy (dst, src, copy); -kunmap_atomic (src,KM_USER1 ); +kunmap_atomic (src); }else memset (dst,0 , copy); }
@@ -312,7 +312,7 @@ static int brd_do_bvec(struct brd_device goto out; } - mem =kmap_atomic (page,KM_USER0 ); + mem =kmap_atomic (page);if (rw ==READ ) {copy_from_brd (mem + off, brd, sector, len);flush_dcache_page (page);
@@ -320,7 +320,7 @@ static int brd_do_bvec(struct brd_deviceflush_dcache_page (page);copy_to_brd (brd, mem + off, sector, len); } -kunmap_atomic (mem,KM_USER0 ); +kunmap_atomic (mem); out:return err;
drivers/block/drbd/drbd_bitmap.c +15 -15
@@ -170,7 +170,7 @@ static unsigned long *__bm_map_paddr(strstatic unsigned long *bm_map_paddr (struct drbd_bitmap *b,unsigned long offset) { -return __bm_map_paddr (b, offset,KM_IRQ1 ); +return __bm_map_paddr (b, offset); }static void __bm_unmap (unsigned long *p_addr,const enum km_type km)
@@ -180,7 +180,7 @@ static void __bm_unmap(unsigned long *p_static void bm_unmap (unsigned long *p_addr) { -return __bm_unmap (p_addr,KM_IRQ1 ); +return __bm_unmap (p_addr); }/* long word offset of _bitmap_ sector */
@@ -379,7 +379,7 @@ static unsigned long __bm_count_bits(strwhile (offset < b->bm_words) { i = do_now =min_t (size_t, b->bm_words-offset,LWPP ); - p_addr =__bm_map_paddr (b, offset,KM_USER0 ); + p_addr =__bm_map_paddr (b, offset); bm = p_addr +MLPP (offset);while (i--) {#ifndef __LITTLE_ENDIAN
@@ -388,7 +388,7 @@ static unsigned long __bm_count_bits(str#endif bits +=hweight_long (*bm++); } -__bm_unmap (p_addr,KM_USER0 ); +__bm_unmap (p_addr); offset += do_now;cond_resched (); }
@@ -799,10 +799,10 @@ static void bm_cpu_to_lel(struct drbd_bi i = 0; }for (; i < b->bm_number_of_pages; i++) { - p_addr =kmap_atomic (b->bm_pages[i],KM_USER0 ); + p_addr =kmap_atomic (b->bm_pages[i]);for (bm = p_addr; bm < p_addr +PAGE_SIZE /sizeof (long ); bm++) *bm =cpu_to_lel (*bm); -kunmap_atomic (p_addr,KM_USER0 ); +kunmap_atomic (p_addr); } }# endif
@@ -983,7 +983,7 @@ static unsigned long bm_find_next(structif (bm_is_locked (b))bm_print_lock_info (mdev); - i =__bm_find_next (mdev, bm_fo, find_zero_bit,KM_IRQ1 ); + i =__bm_find_next (mdev, bm_fo, find_zero_bit);spin_unlock_irq (&b->bm_lock);return i;
@@ -1007,13 +1007,13 @@ unsigned long drbd_bm_find_next_zero(strunsigned long _drbd_bm_find_next (struct drbd_conf *mdev,unsigned long bm_fo) {/* WARN_ON(!bm_is_locked(mdev)); */ -return __bm_find_next (mdev, bm_fo,0 ,KM_USER1 ); +return __bm_find_next (mdev, bm_fo,0 ); }unsigned long _drbd_bm_find_next_zero (struct drbd_conf *mdev,unsigned long bm_fo) {/* WARN_ON(!bm_is_locked(mdev)); */ -return __bm_find_next (mdev, bm_fo,1 ,KM_USER1 ); +return __bm_find_next (mdev, bm_fo,1 ); }/* returns number of bits actually changed.
@@ -1074,7 +1074,7 @@ static int bm_change_bits_to(struct drbdif (bm_is_locked (b))bm_print_lock_info (mdev); - c =__bm_change_bits_to (mdev, s, e, val,KM_IRQ1 ); + c =__bm_change_bits_to (mdev, s, e, val);spin_unlock_irqrestore (&b->bm_lock, flags);return c;
@@ -1099,13 +1099,13 @@ static inline void bm_set_full_words_wit {int i;int bits; -unsigned long *paddr =kmap_atomic (b->bm_pages[page_nr],KM_USER0 ); +unsigned long *paddr =kmap_atomic (b->bm_pages[page_nr]);for (i = first_word; i < last_word; i++) { bits =hweight_long (paddr[i]); paddr[i] = ~0UL ; b->bm_set +=BITS_PER_LONG - bits; } -kunmap_atomic (paddr,KM_USER0 ); +kunmap_atomic (paddr); }/* Same thing as drbd_bm_set_bits, but without taking the spin_lock_irqsave.
@@ -1132,7 +1132,7 @@ void _drbd_bm_set_bits(struct drbd_confif (e - s <=3 *BITS_PER_LONG ) {/* don't bother; el and sl may even be wrong. */ -__bm_change_bits_to (mdev, s, e,1 ,KM_USER0 ); +__bm_change_bits_to (mdev, s, e,1 );return ; }
@@ -1140,7 +1140,7 @@ void _drbd_bm_set_bits(struct drbd_conf/* bits filling the current long */ if (sl) -__bm_change_bits_to (mdev, s, sl-1 ,1 ,KM_USER0 ); +__bm_change_bits_to (mdev, s, sl-1 ,1 ); first_page = sl >> (3 +PAGE_SHIFT ); last_page = el >> (3 +PAGE_SHIFT );
@@ -1167,7 +1167,7 @@ void _drbd_bm_set_bits(struct drbd_conf* it would trigger an assert in __bm_change_bits_to() */ if (el <= e) -__bm_change_bits_to (mdev, el, e,1 ,KM_USER0 ); +__bm_change_bits_to (mdev, el, e,1 ); }/* returns bit state
drivers/block/drbd/drbd_nl.c +2 -2
@@ -2256,10 +2256,10 @@ void drbd_bcast_ee(struct drbd_conf *mde len = e->size; page = e->pages;page_chain_for_each (page) { -void *d =kmap_atomic (page,KM_USER0 ); +void *d =kmap_atomic (page);unsigned l =min_t (unsigned, len,PAGE_SIZE );memcpy (tl, d, l); -kunmap_atomic (d,KM_USER0 ); +kunmap_atomic (d); tl = (unsigned short *)((char *)tl + l); len -= l; }
drivers/block/loop.c +8 -8
@@ -91,16 +91,16 @@ static int transfer_none(struct loop_dev struct page *loop_page, unsigned loop_off, int size, sector_t real_block) { - char *raw_buf = kmap_atomic(raw_page, KM_USER0) + raw_off; -char *loop_buf =kmap_atomic (loop_page,KM_USER1 ) + loop_off; + char *raw_buf = kmap_atomic(raw_page) + raw_off; +char *loop_buf =kmap_atomic (loop_page) + loop_off;if (cmd ==READ )memcpy (loop_buf, raw_buf, size);else memcpy (raw_buf, loop_buf, size); -kunmap_atomic (loop_buf,KM_USER1 ); -kunmap_atomic (raw_buf,KM_USER0 ); +kunmap_atomic (loop_buf); +kunmap_atomic (raw_buf);cond_resched ();return 0 ; }
@@ -110,8 +110,8 @@ static int transfer_xor(struct loop_devi struct page *loop_page, unsigned loop_off, int size, sector_t real_block) { - char *raw_buf = kmap_atomic(raw_page, KM_USER0) + raw_off; -char *loop_buf =kmap_atomic (loop_page,KM_USER1 ) + loop_off; + char *raw_buf = kmap_atomic(raw_page) + raw_off; +char *loop_buf =kmap_atomic (loop_page) + loop_off;char *in, *out, *key;int i, keysize;
@@ -128,8 +128,8 @@ static int transfer_xor(struct loop_devifor (i =0 ; i < size; i++) *out++ = *in++ ^ key[(i &511 ) % keysize]; -kunmap_atomic (loop_buf,KM_USER1 ); -kunmap_atomic (raw_buf,KM_USER0 ); +kunmap_atomic (loop_buf); +kunmap_atomic (raw_buf);cond_resched ();return 0 ; }
drivers/block/pktcdvd.c +4 -4
@@ -988,14 +988,14 @@ static void pkt_copy_bio_data(struct biowhile (copy_size >0 ) {struct bio_vec *src_bvl =bio_iovec_idx (src_bio, seg); -void *vfrom =kmap_atomic (src_bvl->bv_page,KM_USER0 ) + +void *vfrom =kmap_atomic (src_bvl->bv_page) + src_bvl->bv_offset + offs;void *vto =page_address (dst_page) + dst_offs;int len =min_t (int, copy_size, src_bvl->bv_len - offs);BUG_ON (len <0 );memcpy (vto, vfrom, len); -kunmap_atomic (vfrom,KM_USER0 ); +kunmap_atomic (vfrom); seg++; offs =0 ;
@@ -1020,10 +1020,10 @@ static void pkt_make_local_copy(struct p offs =0 ;for (f =0 ; f < pkt->frames; f++) {if (bvec[f].bv_page != pkt->pages[p]) { -void *vfrom =kmap_atomic (bvec[f].bv_page,KM_USER0 ) + bvec[f].bv_offset; +void *vfrom =kmap_atomic (bvec[f].bv_page) + bvec[f].bv_offset;void *vto =page_address (pkt->pages[p]) + offs;memcpy (vto, vfrom,CD_FRAMESIZE ); -kunmap_atomic (vfrom,KM_USER0 ); +kunmap_atomic (vfrom); bvec[f].bv_page = pkt->pages[p]; bvec[f].bv_offset = offs; }else {
drivers/crypto/hifn_795x.c +5 -5
@@ -1731,9 +1731,9 @@ static int ablkcipher_get(void *saddr, uwhile (size) { copy =min (srest,min (dst->length, size)); - daddr =kmap_atomic (sg_page (dst),KM_IRQ0 ); + daddr =kmap_atomic (sg_page (dst));memcpy (daddr + dst->offset + offset, saddr, copy); -kunmap_atomic (daddr,KM_IRQ0 ); +kunmap_atomic (daddr); nbytes -= copy; size -= copy;
@@ -1793,17 +1793,17 @@ static void hifn_process_ready(struct abcontinue ; } - saddr =kmap_atomic (sg_page (t),KM_SOFTIRQ0 ); + saddr =kmap_atomic (sg_page (t)); err =ablkcipher_get (saddr, &t->length, t->offset, dst, nbytes, &nbytes);if (err <0 ) { -kunmap_atomic (saddr,KM_SOFTIRQ0 ); +kunmap_atomic (saddr);break ; } idx += err; -kunmap_atomic (saddr,KM_SOFTIRQ0 ); +kunmap_atomic (saddr); }hifn_cipher_walk_exit (&rctx->walk);
drivers/edac/edac_mc.c +2 -2
@@ -612,13 +612,13 @@ static void edac_mc_scrub_block(unsignedif (PageHighMem (pg))local_irq_save (flags); - virt_addr =kmap_atomic (pg,KM_BOUNCE_READ ); + virt_addr =kmap_atomic (pg);/* Perform architecture specific atomic scrub operation */ atomic_scrub (virt_addr + offset, size);/* Unmap and complete */ -kunmap_atomic (virt_addr,KM_BOUNCE_READ ); +kunmap_atomic (virt_addr);if (PageHighMem (pg))local_irq_restore (flags);
drivers/gpu/drm/drm_cache.c +4 -4
@@ -40,10 +40,10 @@ drm_clflush_page(struct page *page)if (unlikely (page ==NULL ))return ; - page_virtual =kmap_atomic (page,KM_USER0 ); + page_virtual =kmap_atomic (page);for (i =0 ; i <PAGE_SIZE ; i += boot_cpu_data.x86_clflush_size)clflush (page_virtual + i); -kunmap_atomic (page_virtual,KM_USER0 ); +kunmap_atomic (page_virtual); } static void drm_cache_flush_clflush(struct page *pages[],
@@ -86,10 +86,10 @@ drm_clflush_pages(struct page *pages[],if (unlikely (page ==NULL ))continue ; - page_virtual =kmap_atomic (page,KM_USER0 ); + page_virtual =kmap_atomic (page);flush_dcache_range ((unsigned long )page_virtual, (unsigned long )page_virtual +PAGE_SIZE ); - kunmap_atomic(page_virtual, KM_USER0); + kunmap_atomic(page_virtual); }#else printk (KERN_ERR "Architecture has no drm_cache.c support\n" );
drivers/gpu/drm/i915/i915_debugfs.c +2 -2
@@ -270,10 +270,10 @@ static void i915_dump_pages(struct seq_fuint32_t *mem;for (page =0 ; page < page_count; page++) { - mem =kmap_atomic (pages[page],KM_USER0 ); + mem =kmap_atomic (pages[page]);for (i =0 ; i <PAGE_SIZE ; i +=4 )seq_printf (m,"%08x : %08x\n" , i, mem[i /4 ]); -kunmap_atomic (mem,KM_USER0 ); +kunmap_atomic (mem); } }
drivers/gpu/drm/i915/i915_gem.c +11 -11
@@ -146,11 +146,11 @@ fast_shmem_read(struct page **pages,char __iomem *vaddr;int unwritten; - vaddr =kmap_atomic (pages[page_base >>PAGE_SHIFT ],KM_USER0 ); + vaddr =kmap_atomic (pages[page_base >>PAGE_SHIFT ]);if (vaddr ==NULL )return -ENOMEM ; unwritten =__copy_to_user_inatomic (data, vaddr + page_offset, length); -kunmap_atomic (vaddr,KM_USER0 ); +kunmap_atomic (vaddr);if (unwritten)return -EFAULT ;
@@ -496,10 +496,10 @@ fast_user_write(struct io_mapping *mappichar *vaddr_atomic;unsigned long unwritten; - vaddr_atomic =io_mapping_map_atomic_wc (mapping, page_base,KM_USER0 ); + vaddr_atomic =io_mapping_map_atomic_wc (mapping, page_base); unwritten =__copy_from_user_inatomic_nocache (vaddr_atomic + page_offset, user_data, length); -io_mapping_unmap_atomic (vaddr_atomic,KM_USER0 ); +io_mapping_unmap_atomic (vaddr_atomic);if (unwritten)return -EFAULT ;return 0 ;
@@ -538,11 +538,11 @@ fast_shmem_write(struct page **pages,char __iomem *vaddr;unsigned long unwritten; - vaddr =kmap_atomic (pages[page_base >>PAGE_SHIFT ],KM_USER0 ); + vaddr =kmap_atomic (pages[page_base >>PAGE_SHIFT ]);if (vaddr ==NULL )return -ENOMEM ; unwritten =__copy_from_user_inatomic (vaddr + page_offset, data, length); -kunmap_atomic (vaddr,KM_USER0 ); +kunmap_atomic (vaddr);if (unwritten)return -EFAULT ;
@@ -3499,7 +3499,7 @@ i915_gem_object_pin_and_relocate(struct readl(reloc_entry), reloc_val);#endif writel (reloc_val, reloc_entry); -io_mapping_unmap_atomic (reloc_page,KM_USER0 ); +io_mapping_unmap_atomic (reloc_page);/* The updated presumed offset for this entry will be * copied back out to the user.
@@ -4921,11 +4921,11 @@ void i915_gem_detach_phys_object(struct page_count = obj->size /PAGE_SIZE ;for (i =0 ; i < page_count; i++) { -char *dst =kmap_atomic (obj_priv->pages[i],KM_USER0 ); +char *dst =kmap_atomic (obj_priv->pages[i]);char *src = obj_priv->phys_obj->handle->vaddr + (i *PAGE_SIZE );memcpy (dst, src,PAGE_SIZE ); -kunmap_atomic (dst,KM_USER0 ); +kunmap_atomic (dst); }drm_clflush_pages (obj_priv->pages, page_count);drm_agp_chipset_flush (dev);
@@ -4981,11 +4981,11 @@ i915_gem_attach_phys_object(struct drm_d page_count = obj->size /PAGE_SIZE ;for (i =0 ; i < page_count; i++) { -char *src =kmap_atomic (obj_priv->pages[i],KM_USER0 ); +char *src =kmap_atomic (obj_priv->pages[i]);char *dst = obj_priv->phys_obj->handle->vaddr + (i *PAGE_SIZE );memcpy (dst, src,PAGE_SIZE ); -kunmap_atomic (src,KM_USER0 ); +kunmap_atomic (src); }i915_gem_object_put_pages (obj);
drivers/gpu/drm/i915/i915_gem_debug.c +5 -5
@@ -57,13 +57,13 @@ static void i915_gem_dump_page(struct page *page, uint32_t start, uint32_t end, uint32_t bias, uint32_t mark) { - uint32_t *mem = kmap_atomic(page, KM_USER0); + uint32_t *mem = kmap_atomic(page);int i;for (i = start; i < end; i +=4 )DRM_INFO ("%08x: %08x%s\n" , (int ) (bias + i), mem[i /4 ], (bias + i == mark) ?" ********" :"" ); -kunmap_atomic (mem,KM_USER0 ); +kunmap_atomic (mem);/* give syslog time to catch up */ msleep (1 ); }
@@ -157,7 +157,7 @@ i915_gem_object_check_coherency(struct dfor (page =0 ; page < obj->size /PAGE_SIZE ; page++) {int i; - backing_map =kmap_atomic (obj_priv->pages[page],KM_USER0 ); + backing_map =kmap_atomic (obj_priv->pages[page]);if (backing_map ==NULL ) {DRM_ERROR ("failed to map backing page\n" );
@@ -181,13 +181,13 @@ i915_gem_object_check_coherency(struct d } } } -kunmap_atomic (backing_map,KM_USER0 ); +kunmap_atomic (backing_map); backing_map =NULL ; } out:if (backing_map !=NULL ) -kunmap_atomic (backing_map,KM_USER0 ); +kunmap_atomic (backing_map);iounmap (gtt_mapping);/* give syslog time to catch up */
drivers/gpu/drm/i915/i915_irq.c +2 -2
@@ -449,9 +449,9 @@ i915_error_object_create(struct drm_deviif (d ==NULL ) goto unwind;local_irq_save (flags); - s =kmap_atomic (src_priv->pages[page],KM_IRQ0 ); + s =kmap_atomic (src_priv->pages[page]);memcpy (d, s,PAGE_SIZE ); -kunmap_atomic (s,KM_IRQ0 ); +kunmap_atomic (s);local_irq_restore (flags); dst->pages[page] = d; }
drivers/gpu/drm/i915/intel_overlay.c +1 -1
@@ -201,7 +201,7 @@ static struct overlay_registers *intel_ostatic void intel_overlay_unmap_regs_atomic (struct intel_overlay *overlay) {if (OVERLAY_NONPHYSICAL (overlay->dev)) -io_mapping_unmap_atomic (overlay->virt_addr,KM_USER0 ); +io_mapping_unmap_atomic (overlay->virt_addr); overlay->virt_addr =NULL ;
drivers/gpu/drm/nouveau/nouveau_bios.c +4 -4
@@ -2167,11 +2167,11 @@ peek_fb(struct drm_device *dev, struct iif (off <pci_resource_len (dev->pdev,1 )) {uint32_t __iomem *p = -io_mapping_map_atomic_wc (fb, off &PAGE_MASK ,KM_USER0 ); +io_mapping_map_atomic_wc (fb, off &PAGE_MASK ); val =ioread32 (p + (off & ~PAGE_MASK )); -io_mapping_unmap_atomic (p,KM_USER0 ); +io_mapping_unmap_atomic (p); }return val;
@@ -2183,12 +2183,12 @@ poke_fb(struct drm_device *dev, struct i {if (off <pci_resource_len (dev->pdev,1 )) {uint32_t __iomem *p = -io_mapping_map_atomic_wc (fb, off &PAGE_MASK ,KM_USER0 ); +io_mapping_map_atomic_wc (fb, off &PAGE_MASK );iowrite32 (val, p + (off & ~PAGE_MASK ));wmb (); -io_mapping_unmap_atomic (p,KM_USER0 ); +io_mapping_unmap_atomic (p); } }
drivers/gpu/drm/ttm/ttm_bo_util.c +4 -4
@@ -170,7 +170,7 @@ static int ttm_copy_io_ttm_page(struct t src = (void *)((unsigned long )src + (page <<PAGE_SHIFT ));#ifdef CONFIG_X86 - dst =kmap_atomic_prot (d,KM_USER0 , prot); + dst =kmap_atomic_prot (d, prot);#else if (pgprot_val (prot) !=pgprot_val (PAGE_KERNEL )) dst =vmap (&d,1 ,0 , prot);
@@ -183,7 +183,7 @@ static int ttm_copy_io_ttm_page(struct tmemcpy_fromio (dst, src,PAGE_SIZE );#ifdef CONFIG_X86 -kunmap_atomic (dst,KM_USER0 ); +kunmap_atomic (dst);#else if (pgprot_val (prot) !=pgprot_val (PAGE_KERNEL ))vunmap (dst);
@@ -206,7 +206,7 @@ static int ttm_copy_ttm_io_page(struct t dst = (void *)((unsigned long )dst + (page <<PAGE_SHIFT ));#ifdef CONFIG_X86 - src =kmap_atomic_prot (s,KM_USER0 , prot); + src =kmap_atomic_prot (s, prot);#else if (pgprot_val (prot) !=pgprot_val (PAGE_KERNEL )) src =vmap (&s,1 ,0 , prot);
@@ -219,7 +219,7 @@ static int ttm_copy_ttm_io_page(struct tmemcpy_toio (dst, src,PAGE_SIZE );#ifdef CONFIG_X86 -kunmap_atomic (src,KM_USER0 ); +kunmap_atomic (src);#else if (pgprot_val (prot) !=pgprot_val (PAGE_KERNEL ))vunmap (src);
drivers/gpu/drm/ttm/ttm_tt.c +8 -8
@@ -490,11 +490,11 @@ static int ttm_tt_swapin(struct ttm_tt * goto out_err;preempt_disable (); - from_virtual =kmap_atomic (from_page,KM_USER0 ); - to_virtual =kmap_atomic (to_page,KM_USER1 ); + from_virtual =kmap_atomic (from_page); + to_virtual =kmap_atomic (to_page);memcpy (to_virtual, from_virtual,PAGE_SIZE ); -kunmap_atomic (to_virtual,KM_USER1 ); -kunmap_atomic (from_virtual,KM_USER0 ); +kunmap_atomic (to_virtual); +kunmap_atomic (from_virtual);preempt_enable ();page_cache_release (from_page); }
@@ -559,11 +559,11 @@ int ttm_tt_swapout(struct ttm_tt *ttm, s goto out_err; }preempt_disable (); - from_virtual =kmap_atomic (from_page,KM_USER0 ); - to_virtual =kmap_atomic (to_page,KM_USER1 ); + from_virtual =kmap_atomic (from_page); + to_virtual =kmap_atomic (to_page);memcpy (to_virtual, from_virtual,PAGE_SIZE ); -kunmap_atomic (to_virtual,KM_USER1 ); -kunmap_atomic (from_virtual,KM_USER0 ); +kunmap_atomic (to_virtual); +kunmap_atomic (from_virtual);preempt_enable ();set_page_dirty (to_page);mark_page_accessed (to_page);
drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c +3 -3
@@ -65,10 +65,10 @@ static int vmw_gmr_build_descriptors(strif (likely (page_virtual !=NULL )) { desc_virtual->ppn =page_to_pfn (page); -kunmap_atomic (page_virtual,KM_USER0 ); +kunmap_atomic (page_virtual); } - page_virtual =kmap_atomic (page,KM_USER0 ); + page_virtual =kmap_atomic (page); desc_virtual = page_virtual -1 ; prev_pfn = ~(0UL );
@@ -98,7 +98,7 @@ static int vmw_gmr_build_descriptors(str }if (likely (page_virtual !=NULL )) -kunmap_atomic (page_virtual,KM_USER0 ); +kunmap_atomic (page_virtual);return 0 ; out_err:
drivers/ide/ide-taskfile.c +2 -2
@@ -252,7 +252,7 @@ void ide_pio_bytes(ide_drive_t *drive, sif (page_is_high)local_irq_save (flags); - buf =kmap_atomic (page,KM_BIO_SRC_IRQ ) + offset; + buf =kmap_atomic (page) + offset; cmd->nleft -= nr_bytes; cmd->cursg_ofs += nr_bytes;
@@ -268,7 +268,7 @@ void ide_pio_bytes(ide_drive_t *drive, selse hwif->tp_ops->input_data (drive, cmd, buf, nr_bytes); -kunmap_atomic (buf,KM_BIO_SRC_IRQ ); +kunmap_atomic (buf);if (page_is_high)local_irq_restore (flags);
drivers/infiniband/ulp/iser/iser_memory.c +4 -4
@@ -73,11 +73,11 @@ static int iser_start_rdma_unaligned_sg( p = mem;for_each_sg (sgl, sg, data->size, i) { - from =kmap_atomic (sg_page (sg),KM_USER0 ); + from =kmap_atomic (sg_page (sg));memcpy (p, from + sg->offset, sg->length); -kunmap_atomic (from,KM_USER0 ); +kunmap_atomic (from); p += sg->length; } }
@@ -133,11 +133,11 @@ void iser_finalize_rdma_unaligned_sg(str p = mem;for_each_sg (sgl, sg, sg_size, i) { - to =kmap_atomic (sg_page (sg),KM_SOFTIRQ0 ); + to =kmap_atomic (sg_page (sg));memcpy (to + sg->offset, p, sg->length); -kunmap_atomic (to,KM_SOFTIRQ0 ); +kunmap_atomic (to); p += sg->length; } }
drivers/md/bitmap.c +18 -18
@@ -487,7 +487,7 @@ void bitmap_update_sb(struct bitmap *bitreturn ; }spin_unlock_irqrestore (&bitmap->lock, flags); - sb =kmap_atomic (bitmap->sb_page,KM_USER0 ); + sb =kmap_atomic (bitmap->sb_page); sb->events =cpu_to_le64 (bitmap->mddev->events);if (bitmap->mddev->events < bitmap->events_cleared) {/* rocking back to read-only */
@@ -497,7 +497,7 @@ void bitmap_update_sb(struct bitmap *bit/* Just in case these have been changed via sysfs: */ sb->daemon_sleep =cpu_to_le32 (bitmap->mddev->bitmap_info.daemon_sleep/HZ ); sb->write_behind =cpu_to_le32 (bitmap->mddev->bitmap_info.max_write_behind); -kunmap_atomic (sb,KM_USER0 ); +kunmap_atomic (sb);write_page (bitmap, bitmap->sb_page,1 ); }
@@ -508,7 +508,7 @@ void bitmap_print_sb(struct bitmap *bitmif (!bitmap || !bitmap->sb_page)return ; - sb =kmap_atomic (bitmap->sb_page,KM_USER0 ); + sb =kmap_atomic (bitmap->sb_page);printk (KERN_DEBUG "%s: bitmap file superblock:\n" ,bmname (bitmap));printk (KERN_DEBUG " magic: %08x\n" ,le32_to_cpu (sb->magic));printk (KERN_DEBUG " version: %d\n" ,le32_to_cpu (sb->version));
@@ -527,7 +527,7 @@ void bitmap_print_sb(struct bitmap *bitmprintk (KERN_DEBUG " sync size: %llu KB\n" , (unsigned long long )le64_to_cpu (sb->sync_size)/2 );printk (KERN_DEBUG "max write behind: %d\n" ,le32_to_cpu (sb->write_behind)); -kunmap_atomic (sb,KM_USER0 ); +kunmap_atomic (sb); }/* read the superblock from the bitmap file and initialize some bitmap fields */
@@ -557,7 +557,7 @@ static int bitmap_read_sb(struct bitmapreturn err; } - sb =kmap_atomic (bitmap->sb_page,KM_USER0 ); + sb =kmap_atomic (bitmap->sb_page); chunksize =le32_to_cpu (sb->chunksize); daemon_sleep =le32_to_cpu (sb->daemon_sleep) *HZ ;
@@ -618,7 +618,7 @@ success: bitmap->events_cleared = bitmap->mddev->events; err =0 ; out: -kunmap_atomic (sb,KM_USER0 ); +kunmap_atomic (sb);if (err)bitmap_print_sb (bitmap);return err;
@@ -643,7 +643,7 @@ static int bitmap_mask_state(struct bitmreturn 0 ; }spin_unlock_irqrestore (&bitmap->lock, flags); - sb =kmap_atomic (bitmap->sb_page,KM_USER0 ); + sb =kmap_atomic (bitmap->sb_page); old =le32_to_cpu (sb->state) & bits;switch (op) {case MASK_SET :
@@ -655,7 +655,7 @@ static int bitmap_mask_state(struct bitmdefault :BUG (); } -kunmap_atomic (sb,KM_USER0 ); +kunmap_atomic (sb);return old; }
@@ -846,12 +846,12 @@ static void bitmap_file_set_bit(struct b bit =file_page_offset (bitmap, chunk);/* set the bit */ - kaddr =kmap_atomic (page,KM_USER0 ); + kaddr =kmap_atomic (page);if (bitmap->flags &BITMAP_HOSTENDIAN )set_bit (bit, kaddr);else ext2_set_bit (bit, kaddr); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr);PRINTK ("set file bit %lu page %lu\n" , bit, page->index); }/* record page number so it gets flushed to disk when unplug occurs */
@@ -1030,10 +1030,10 @@ static int bitmap_init_from_disk(struct* if bitmap is out of date, dirty the * whole page and write it out */ - paddr =kmap_atomic (page,KM_USER0 ); + paddr =kmap_atomic (page);memset (paddr + offset,0xff ,PAGE_SIZE - offset); -kunmap_atomic (paddr,KM_USER0 ); +kunmap_atomic (paddr);write_page (bitmap, page,1 ); ret = -EIO ;
@@ -1041,12 +1041,12 @@ static int bitmap_init_from_disk(struct goto err; } } - paddr =kmap_atomic (page,KM_USER0 ); + paddr =kmap_atomic (page);if (bitmap->flags &BITMAP_HOSTENDIAN ) b =test_bit (bit, paddr);else b =ext2_test_bit (bit, paddr); -kunmap_atomic (paddr,KM_USER0 ); +kunmap_atomic (paddr);if (b) {/* if the disk bit is set, set the memory bit */ int needed = ((sector_t)(i+1) << (CHUNK_BLOCK_SHIFT(bitmap))
@@ -1187,10 +1187,10 @@ void bitmap_daemon_work(mddev_t *mddev) bitmap->mddev->bitmap_info.external == 0) {bitmap_super_t *sb; bitmap->need_sync =0 ; - sb =kmap_atomic (bitmap->sb_page,KM_USER0 ); + sb =kmap_atomic (bitmap->sb_page); sb->events_cleared =cpu_to_le64 (bitmap->events_cleared); -kunmap_atomic (sb,KM_USER0 ); +kunmap_atomic (sb);write_page (bitmap, bitmap->sb_page,1 ); }spin_lock_irqsave (&bitmap->lock, flags);
@@ -1216,14 +1216,14 @@ void bitmap_daemon_work(mddev_t *mddev)/* clear the bit */ if (page) { - paddr =kmap_atomic (page,KM_USER0 ); + paddr =kmap_atomic (page);if (bitmap->flags &BITMAP_HOSTENDIAN )clear_bit (file_page_offset (bitmap, j), paddr);else ext2_clear_bit (file_page_offset (bitmap, j), paddr); -kunmap_atomic (paddr,KM_USER0 ); +kunmap_atomic (paddr); }else log->type->clear_region (log, j); }
drivers/media/video/ivtv/ivtv-udma.c +2 -2
@@ -57,9 +57,9 @@ int ivtv_udma_fill_sg_list (struct ivtv_if (dma->bouncemap[map_offset] ==NULL )return -1 ;local_irq_save (flags); - src =kmap_atomic (dma->map[map_offset],KM_BOUNCE_READ ) + offset; + src =kmap_atomic (dma->map[map_offset]) + offset;memcpy (page_address (dma->bouncemap[map_offset]) + offset, src, len); -kunmap_atomic (src,KM_BOUNCE_READ ); +kunmap_atomic (src);local_irq_restore (flags);sg_set_page (&dma->SGlist[map_offset], dma->bouncemap[map_offset], len, offset); }
drivers/memstick/host/jmb38x_ms.c +2 -2
@@ -324,7 +324,7 @@ static int jmb38x_ms_transfer_data(struc p_cnt =min (p_cnt, length);local_irq_save (flags); - buf =kmap_atomic (pg,KM_BIO_SRC_IRQ ) + p_off; + buf =kmap_atomic (pg) + p_off; }else { buf = host->req->data + host->block_pos; p_cnt = host->req->data_len - host->block_pos;
@@ -340,7 +340,7 @@ static int jmb38x_ms_transfer_data(struc : jmb38x_ms_read_reg_data(host, buf, p_cnt);if (host->req->long_data) { -kunmap_atomic (buf - p_off,KM_BIO_SRC_IRQ ); +kunmap_atomic (buf - p_off);local_irq_restore (flags); }
drivers/memstick/host/tifm_ms.c +2 -2
@@ -209,7 +209,7 @@ static unsigned int tifm_ms_transfer_dat p_cnt =min (p_cnt, length);local_irq_save (flags); - buf =kmap_atomic (pg,KM_BIO_SRC_IRQ ) + p_off; + buf =kmap_atomic (pg) + p_off; }else { buf = host->req->data + host->block_pos; p_cnt = host->req->data_len - host->block_pos;
@@ -220,7 +220,7 @@ static unsigned int tifm_ms_transfer_dat : tifm_ms_read_data(host, buf, p_cnt);if (host->req->long_data) { -kunmap_atomic (buf - p_off,KM_BIO_SRC_IRQ ); +kunmap_atomic (buf - p_off);local_irq_restore (flags); }
drivers/mmc/host/at91_mci.c +4 -4
@@ -233,7 +233,7 @@ static inline void at91_mci_sg_to_dma(st sg = &data->sg[i]; - sgbuffer =kmap_atomic (sg_page (sg),KM_BIO_SRC_IRQ ) + sg->offset; + sgbuffer =kmap_atomic (sg_page (sg)) + sg->offset; amount =min (size, sg->length); size -= amount;
@@ -249,7 +249,7 @@ static inline void at91_mci_sg_to_dma(st dmabuf = (unsigned *)tmpv; } -kunmap_atomic (sgbuffer,KM_BIO_SRC_IRQ ); +kunmap_atomic (sgbuffer);if (size ==0 )break ;
@@ -299,7 +299,7 @@ static void at91_mci_post_dma_read(struc sg = &data->sg[i]; - sgbuffer =kmap_atomic (sg_page (sg),KM_BIO_SRC_IRQ ) + sg->offset; + sgbuffer =kmap_atomic (sg_page (sg)) + sg->offset; amount =min (size, sg->length); size -= amount;
@@ -315,7 +315,7 @@ static void at91_mci_post_dma_read(struc }flush_kernel_dcache_page (sg_page (sg)); -kunmap_atomic (sgbuffer,KM_BIO_SRC_IRQ ); +kunmap_atomic (sgbuffer); data->bytes_xfered += amount;if (size ==0 )break ;
drivers/mmc/host/msm_sdcc.c +1 -1
@@ -644,7 +644,7 @@ msmsdcc_pio_irq(int irq, void *dev_id) len =msmsdcc_pio_write (host, buffer, remain, status);/* Unmap the buffer */ -kunmap_atomic (buffer,KM_BIO_SRC_IRQ ); +kunmap_atomic (buffer);local_irq_restore (flags); host->pio.sg_off += len;
drivers/mmc/host/sdhci.c +2 -2
@@ -380,12 +380,12 @@ static void sdhci_transfer_pio(struct sdstatic char *sdhci_kmap_atomic (struct scatterlist *sg,unsigned long *flags) {local_irq_save (*flags); -return kmap_atomic (sg_page (sg),KM_BIO_SRC_IRQ ) + sg->offset; +return kmap_atomic (sg_page (sg)) + sg->offset; }static void sdhci_kunmap_atomic (void *buffer,unsigned long *flags) { -kunmap_atomic (buffer,KM_BIO_SRC_IRQ ); +kunmap_atomic (buffer);local_irq_restore (*flags); }
drivers/mmc/host/tifm_sd.c +8 -8
@@ -117,7 +117,7 @@ static void tifm_sd_read_fifo(struct tifunsigned char *buf;unsigned int pos =0 , val; - buf =kmap_atomic (pg,KM_BIO_DST_IRQ ) + off; + buf =kmap_atomic (pg) + off;if (host->cmd_flags &DATA_CARRY ) { buf[pos++] = host->bounce_buf_data[0 ]; host->cmd_flags &= ~DATA_CARRY ;
@@ -133,7 +133,7 @@ static void tifm_sd_read_fifo(struct tif } buf[pos++] = (val >>8 ) &0xff ; } -kunmap_atomic (buf - off,KM_BIO_DST_IRQ ); +kunmap_atomic (buf - off); } static void tifm_sd_write_fifo(struct tifm_sd *host, struct page *pg,
@@ -143,7 +143,7 @@ static void tifm_sd_write_fifo(struct tiunsigned char *buf;unsigned int pos =0 , val; - buf =kmap_atomic (pg,KM_BIO_SRC_IRQ ) + off; + buf =kmap_atomic (pg) + off;if (host->cmd_flags &DATA_CARRY ) { val = host->bounce_buf_data[0 ] | ((buf[pos++] <<8 ) &0xff00 );writel (val, sock->addr +SOCK_MMCSD_DATA );
@@ -160,7 +160,7 @@ static void tifm_sd_write_fifo(struct ti val |= (buf[pos++] <<8 ) &0xff00 ;writel (val, sock->addr +SOCK_MMCSD_DATA ); } -kunmap_atomic (buf - off,KM_BIO_SRC_IRQ ); +kunmap_atomic (buf - off); }static void tifm_sd_transfer_data (struct tifm_sd *host)
@@ -211,13 +211,13 @@ static void tifm_sd_copy_page(struct pag struct page *src, unsigned int src_off, unsigned int count) { - unsigned char *src_buf = kmap_atomic(src, KM_BIO_SRC_IRQ) + src_off; -unsigned char *dst_buf =kmap_atomic (dst,KM_BIO_DST_IRQ ) + dst_off; + unsigned char *src_buf = kmap_atomic(src) + src_off; +unsigned char *dst_buf =kmap_atomic (dst) + dst_off;memcpy (dst_buf, src_buf, count); -kunmap_atomic (dst_buf - dst_off,KM_BIO_DST_IRQ ); -kunmap_atomic (src_buf - src_off,KM_BIO_SRC_IRQ ); +kunmap_atomic (dst_buf - dst_off); +kunmap_atomic (src_buf - src_off); }static void tifm_sd_bounce_block (struct tifm_sd *host,struct mmc_data *r_data)
drivers/mmc/host/tmio_mmc.h +2 -2
@@ -183,13 +183,13 @@ static inline char *tmio_mmc_kmap_atomicstruct scatterlist *sg = host->sg_ptr;local_irq_save (*flags); -return kmap_atomic (sg_page (sg),KM_BIO_SRC_IRQ ) + sg->offset; +return kmap_atomic (sg_page (sg)) + sg->offset; }static inline void tmio_mmc_kunmap_atomic (struct tmio_mmc_host *host,unsigned long *flags) { -kunmap_atomic (sg_page (host->sg_ptr),KM_BIO_SRC_IRQ ); +kunmap_atomic (sg_page (host->sg_ptr));local_irq_restore (*flags); }
drivers/net/cassini.c +2 -2
@@ -103,8 +103,8 @@#include <asm/byteorder.h> #include <asm/uaccess.h> -#define cas_page_map (x) kmap_atomic((x), KM_SKB_DATA_SOFTIRQ) -#define cas_page_unmap (x) kunmap_atomic((x), KM_SKB_DATA_SOFTIRQ) +#define cas_page_map (x) kmap_atomic((x)) +#define cas_page_unmap (x) kunmap_atomic((x))#define CAS_NCPUS num_online_cpus()#define cas_skb_release (x) netif_rx(x)
drivers/net/e1000e/netdev.c +2 -2
@@ -1164,9 +1164,9 @@ static bool e1000_clean_rx_irq_ps(struct*/ dma_sync_single_for_cpu (&pdev->dev, ps_page->dma,PAGE_SIZE ,DMA_FROM_DEVICE ); - vaddr =kmap_atomic (ps_page->page,KM_SKB_DATA_SOFTIRQ ); + vaddr =kmap_atomic (ps_page->page);memcpy (skb_tail_pointer (skb), vaddr, l1); -kunmap_atomic (vaddr,KM_SKB_DATA_SOFTIRQ ); +kunmap_atomic (vaddr);dma_sync_single_for_device (&pdev->dev, ps_page->dma,PAGE_SIZE ,DMA_FROM_DEVICE );
drivers/scsi/arcmsr/arcmsr_hba.c +4 -4
@@ -1761,7 +1761,7 @@ static int arcmsr_iop_message_xfer(struc (uint32_t ) cmd->cmnd[8 ];/* 4 bytes: Areca io control code */ sg =scsi_sglist (cmd); - buffer =kmap_atomic (sg_page (sg),KM_IRQ0 ) + sg->offset; + buffer =kmap_atomic (sg_page (sg)) + sg->offset;if (scsi_sg_count (cmd) >1 ) { retvalue =ARCMSR_MESSAGE_FAIL ; goto message_out;
@@ -2010,7 +2010,7 @@ static int arcmsr_iop_message_xfer(struc } message_out: sg =scsi_sglist (cmd); -kunmap_atomic (buffer - sg->offset,KM_IRQ0 ); +kunmap_atomic (buffer - sg->offset);return retvalue; }
@@ -2060,11 +2060,11 @@ static void arcmsr_handle_virtual_commanstrncpy (&inqdata[32 ],"R001" ,4 );/* Product Revision */ sg =scsi_sglist (cmd); - buffer =kmap_atomic (sg_page (sg),KM_IRQ0 ) + sg->offset; + buffer =kmap_atomic (sg_page (sg)) + sg->offset;memcpy (buffer, inqdata,sizeof (inqdata)); sg =scsi_sglist (cmd); -kunmap_atomic (buffer - sg->offset,KM_IRQ0 ); +kunmap_atomic (buffer - sg->offset); cmd->scsi_done (cmd); }
drivers/scsi/cxgb3i/cxgb3i_pdu.c +1 -1
@@ -325,7 +325,7 @@ int cxgb3i_conn_init_pdu(struct iscsi_tamemcpy (dst, src+frag->page_offset, frag->size); dst += frag->size; -kunmap_atomic (src,KM_SOFTIRQ0 ); +kunmap_atomic (src); }if (padlen) {memset (dst,0 , padlen);
drivers/scsi/fcoe/fcoe.c +3 -3
@@ -1459,7 +1459,7 @@ u32 fcoe_fc_crc(struct fc_frame *fp) data =kmap_atomic (frag->page + (off >>PAGE_SHIFT ),KM_SKB_DATA_SOFTIRQ ); crc =crc32 (crc, data + (off & ~PAGE_MASK ), clen); -kunmap_atomic (data,KM_SKB_DATA_SOFTIRQ ); +kunmap_atomic (data); off += clen; len -= clen; }
@@ -1533,7 +1533,7 @@ int fcoe_xmit(struct fc_lport *lport, streturn -ENOMEM ; } frag = &skb_shinfo (skb)->frags[skb_shinfo (skb)->nr_frags -1 ]; - cp =kmap_atomic (frag->page,KM_SKB_DATA_SOFTIRQ ) + cp =kmap_atomic (frag->page) + frag->page_offset; }else { cp = (struct fcoe_crc_eof *)skb_put (skb, tlen);
@@ -1544,7 +1544,7 @@ int fcoe_xmit(struct fc_lport *lport, st cp->fcoe_crc32 =cpu_to_le32 (~crc);if (skb_is_nonlinear (skb)) { -kunmap_atomic (cp,KM_SKB_DATA_SOFTIRQ ); +kunmap_atomic (cp); cp =NULL ; }
drivers/scsi/gdth.c +2 -2
@@ -2308,10 +2308,10 @@ static void gdth_copy_internal_data(gdthreturn ; }local_irq_save (flags); - address =kmap_atomic (sg_page (sl),KM_BIO_SRC_IRQ ) + sl->offset; + address =kmap_atomic (sg_page (sl)) + sl->offset;memcpy (address, buffer, cpnow);flush_dcache_page (sg_page (sl)); -kunmap_atomic (address,KM_BIO_SRC_IRQ ); +kunmap_atomic (address);local_irq_restore (flags);if (cpsum == cpcount)break ;
drivers/scsi/ips.c +3 -3
@@ -1509,14 +1509,14 @@ static int ips_is_passthru(struct scsi_c/* kmap_atomic() ensures addressability of the user buffer.*/ /* local_irq_save() protects the KM_IRQ0 address slot. */ local_irq_save (flags); - buffer =kmap_atomic (sg_page (sg),KM_IRQ0 ) + sg->offset; + buffer =kmap_atomic (sg_page (sg)) + sg->offset;if (buffer && buffer[0 ] =='C' && buffer[1 ] =='O' && buffer[2 ] =='P' && buffer[3 ] =='P' ) { -kunmap_atomic (buffer - sg->offset,KM_IRQ0 ); +kunmap_atomic (buffer - sg->offset);local_irq_restore (flags);return 1 ; } -kunmap_atomic (buffer - sg->offset,KM_IRQ0 ); +kunmap_atomic (buffer - sg->offset);local_irq_restore (flags); }return 0 ;
drivers/scsi/libfc/fc_fcp.c +4 -4
@@ -473,11 +473,11 @@ static void fc_fcp_recv_data(struct fc_fif (!(fr_flags (fp) &FCPHF_CRC_UNCHECKED )) { copy_len =fc_copy_buffer_to_sglist (buf, len, sg, &nents, - &offset,KM_SOFTIRQ0 ,NULL ); + &offset,NULL ); }else { crc =crc32 (~0 , (u8 *) fh,sizeof (*fh)); copy_len =fc_copy_buffer_to_sglist (buf, len, sg, &nents, - &offset,KM_SOFTIRQ0 , &crc); + &offset, &crc); buf =fc_frame_payload_get (fp,0 );if (len %4 ) crc =crc32 (crc, buf + len,4 - (len %4 ));
@@ -636,10 +636,10 @@ static int fc_fcp_send_data(struct fc_fc* The scatterlist item may be bigger than PAGE_SIZE, * but we must not cross pages inside the kmap. */ - page_addr =kmap_atomic (page,KM_SOFTIRQ0 ); + page_addr =kmap_atomic (page);memcpy (data, (char *)page_addr + (off & ~PAGE_MASK ), sg_bytes); -kunmap_atomic (page_addr,KM_SOFTIRQ0 ); +kunmap_atomic (page_addr); data += sg_bytes; } offset += sg_bytes;
drivers/scsi/libfc/fc_lport.c +1 -1
@@ -1636,7 +1636,7 @@ static void fc_lport_bsg_resp(struct fc_ job->reply->reply_payload_rcv_len +=fc_copy_buffer_to_sglist (buf, len, info->sg, &info->nents, - &info->offset,KM_BIO_SRC_IRQ ,NULL ); + &info->offset,NULL );if (fr_eof (fp) ==FC_EOF_T && (ntoh24(fh->fh_f_ctl) & (FC_FC_LAST_SEQ | FC_FC_END_SEQ)) ==
drivers/scsi/libiscsi_tcp.c +2 -2
@@ -132,14 +132,14 @@ static void iscsi_tcp_segment_map(structif (page_count (sg_page (sg)) >=1 && !recv)return ; - segment->sg_mapped =kmap_atomic (sg_page (sg),KM_SOFTIRQ0 ); + segment->sg_mapped =kmap_atomic (sg_page (sg)); segment->data = segment->sg_mapped + sg->offset + segment->sg_offset; }void iscsi_tcp_segment_unmap (struct iscsi_segment *segment) {if (segment->sg_mapped) { -kunmap_atomic (segment->sg_mapped,KM_SOFTIRQ0 ); +kunmap_atomic (segment->sg_mapped); segment->sg_mapped =NULL ; segment->data =NULL ; }
drivers/scsi/libsas/sas_host_smp.c +4 -4
@@ -160,9 +160,9 @@ int sas_smp_host_handler(struct Scsi_Hos }local_irq_disable (); - buf =kmap_atomic (bio_page (req->bio),KM_USER0 ) +bio_offset (req->bio); + buf =kmap_atomic (bio_page (req->bio)) +bio_offset (req->bio);memcpy (req_data, buf,blk_rq_bytes (req)); -kunmap_atomic (buf -bio_offset (req->bio),KM_USER0 ); +kunmap_atomic (buf -bio_offset (req->bio));local_irq_enable ();if (req_data[0 ] !=SMP_REQUEST )
@@ -261,10 +261,10 @@ int sas_smp_host_handler(struct Scsi_Hos }local_irq_disable (); - buf =kmap_atomic (bio_page (rsp->bio),KM_USER0 ) +bio_offset (rsp->bio); + buf =kmap_atomic (bio_page (rsp->bio)) +bio_offset (rsp->bio);memcpy (buf, resp_data,blk_rq_bytes (rsp));flush_kernel_dcache_page (bio_page (rsp->bio)); -kunmap_atomic (buf -bio_offset (rsp->bio),KM_USER0 ); +kunmap_atomic (buf -bio_offset (rsp->bio));local_irq_enable (); out:
drivers/scsi/megaraid.c +2 -2
@@ -663,10 +663,10 @@ mega_build_cmd(adapter_t *adapter, Scsi_struct scatterlist *sg; sg =scsi_sglist (cmd); - buf =kmap_atomic (sg_page (sg),KM_IRQ0 ) + sg->offset; + buf =kmap_atomic (sg_page (sg)) + sg->offset;memset (buf,0 , cmd->cmnd[4 ]); -kunmap_atomic (buf - sg->offset,KM_IRQ0 ); +kunmap_atomic (buf - sg->offset); cmd->result = (DID_OK <<16 ); cmd->scsi_done (cmd);
drivers/scsi/mvsas/mv_sas.c +4 -4
@@ -554,9 +554,9 @@ static int mvs_task_prep_smp(struct mvs_#if _MV_DUMP/* copy cmd table */ - from =kmap_atomic (sg_page (sg_req),KM_IRQ0 ); + from =kmap_atomic (sg_page (sg_req));memcpy (buf_cmd, from + sg_req->offset, req_len); -kunmap_atomic (from,KM_IRQ0 ); +kunmap_atomic (from);#endif return 0 ;
@@ -1896,11 +1896,11 @@ int mvs_slot_complete(struct mvs_info *mcase SAS_PROTOCOL_SMP : {struct scatterlist *sg_resp = &task->smp_task.smp_resp; tstat->stat =SAM_STAT_GOOD ; - to =kmap_atomic (sg_page (sg_resp),KM_IRQ0 ); + to =kmap_atomic (sg_page (sg_resp));memcpy (to + sg_resp->offset, slot->response +sizeof (struct mvs_err_info ),sg_dma_len (sg_resp)); -kunmap_atomic (to,KM_IRQ0 ); +kunmap_atomic (to);break ; }
drivers/scsi/scsi_debug.c +12 -12
@@ -1746,7 +1746,7 @@ static int prot_verify_read(struct scsi_scsi_for_each_prot_sg (SCpnt, psgl,scsi_prot_sg_count (SCpnt), i) {int len =min (psgl->length, resid); - paddr =kmap_atomic (sg_page (psgl),KM_IRQ0 ) + psgl->offset; + paddr =kmap_atomic (sg_page (psgl)) + psgl->offset;memcpy (paddr, dif_storep +dif_offset (sector), len); sector += len >>3 ;
@@ -1756,7 +1756,7 @@ static int prot_verify_read(struct scsi_ sector =do_div (tmp_sec, sdebug_store_sectors); } resid -= len; -kunmap_atomic (paddr,KM_IRQ0 ); +kunmap_atomic (paddr); } dix_reads++;
@@ -1848,12 +1848,12 @@ static int prot_verify_write(struct scsiBUG_ON (scsi_sg_count (SCpnt) ==0 );BUG_ON (scsi_prot_sg_count (SCpnt) ==0 ); - paddr =kmap_atomic (sg_page (psgl),KM_IRQ1 ) + psgl->offset; + paddr =kmap_atomic (sg_page (psgl)) + psgl->offset; ppage_offset =0 ;/* For each data page */ scsi_for_each_sg (SCpnt, dsgl,scsi_sg_count (SCpnt), i) { - daddr =kmap_atomic (sg_page (dsgl),KM_IRQ0 ) + dsgl->offset; + daddr =kmap_atomic (sg_page (dsgl)) + dsgl->offset;/* For each sector-sized chunk in data page */ for (j =0 ; j < dsgl->length ; j += scsi_debug_sector_size) {
@@ -1862,10 +1862,10 @@ static int prot_verify_write(struct scsi* protection page advance to the next one */ if (ppage_offset >= psgl->length) { -kunmap_atomic (paddr,KM_IRQ1 ); +kunmap_atomic (paddr); psgl =sg_next (psgl);BUG_ON (psgl ==NULL ); - paddr =kmap_atomic (sg_page (psgl),KM_IRQ1 ) + paddr =kmap_atomic (sg_page (psgl)) + psgl->offset; ppage_offset =0 ; }
@@ -1938,10 +1938,10 @@ static int prot_verify_write(struct scsi ppage_offset +=sizeof (struct sd_dif_tuple ); } -kunmap_atomic (daddr,KM_IRQ0 ); +kunmap_atomic (daddr); } -kunmap_atomic (paddr,KM_IRQ1 ); +kunmap_atomic (paddr); dix_writes++;
@@ -1949,8 +1949,8 @@ static int prot_verify_write(struct scsi out: dif_errors++; -kunmap_atomic (daddr,KM_IRQ0 ); -kunmap_atomic (paddr,KM_IRQ1 ); +kunmap_atomic (daddr); +kunmap_atomic (paddr);return ret; }
@@ -2264,7 +2264,7 @@ static int resp_xdwriteread(struct scsi_ offset =0 ;for_each_sg (sdb->table.sgl, sg, sdb->table.nents, i) { - kaddr = (unsigned char *)kmap_atomic (sg_page (sg),KM_USER0 ); + kaddr = (unsigned char *)kmap_atomic (sg_page (sg));if (!kaddr) goto out;
@@ -2272,7 +2272,7 @@ static int resp_xdwriteread(struct scsi_ *(kaddr + sg->offset + j) ^= *(buf + offset + j); offset += sg->length; -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); } ret =0 ; out:
drivers/scsi/scsi_lib.c +2 -2
@@ -2537,7 +2537,7 @@ void *scsi_kmap_atomic_sg(struct scatterif (*len > sg_len) *len = sg_len; -return kmap_atomic (page,KM_BIO_SRC_IRQ ); +return kmap_atomic (page); }EXPORT_SYMBOL (scsi_kmap_atomic_sg);
@@ -2547,6 +2547,6 @@ EXPORT_SYMBOL(scsi_kmap_atomic_sg);*/ void scsi_kunmap_atomic_sg (void *virt) { -kunmap_atomic (virt,KM_BIO_SRC_IRQ ); +kunmap_atomic (virt); }EXPORT_SYMBOL (scsi_kunmap_atomic_sg);
drivers/scsi/sd_dif.c +6 -6
@@ -393,7 +393,7 @@ int sd_dif_prepare(struct request *rq, s virt = bio->bi_integrity->bip_sector &0xffffffff ;bip_for_each_vec (iv, bio->bi_integrity, i) { - sdt =kmap_atomic (iv->bv_page,KM_USER0 ) + sdt =kmap_atomic (iv->bv_page) + iv->bv_offset;for (j =0 ; j < iv->bv_len ; j += tuple_sz, sdt++) {
@@ -406,14 +406,14 @@ int sd_dif_prepare(struct request *rq, s phys++; } -kunmap_atomic (sdt,KM_USER0 ); +kunmap_atomic (sdt); } }return 0 ; error: -kunmap_atomic (sdt,KM_USER0 ); +kunmap_atomic (sdt);sd_printk (KERN_ERR , sdkp,"%s: virt %u, phys %u, ref %u, app %4x\n" , __func__, virt, phys,be32_to_cpu (sdt->ref_tag),be16_to_cpu (sdt->app_tag));
@@ -452,13 +452,13 @@ void sd_dif_complete(struct scsi_cmnd *s virt = bio->bi_integrity->bip_sector &0xffffffff ;bip_for_each_vec (iv, bio->bi_integrity, i) { - sdt =kmap_atomic (iv->bv_page,KM_USER0 ) + sdt =kmap_atomic (iv->bv_page) + iv->bv_offset;for (j =0 ; j < iv->bv_len ; j += tuple_sz, sdt++) {if (sectors ==0 ) { -kunmap_atomic (sdt,KM_USER0 ); +kunmap_atomic (sdt);return ; }
@@ -473,7 +473,7 @@ void sd_dif_complete(struct scsi_cmnd *s sectors--; } -kunmap_atomic (sdt,KM_USER0 ); +kunmap_atomic (sdt); } } }
drivers/staging/hv/netvsc_drv.c +1 -1
@@ -283,7 +283,7 @@ static int netvsc_recv_callback(struct h packet->PageBuffers[i].Length);kunmap_atomic ((void *)((unsigned long )data - - packet->PageBuffers[i].Offset),KM_IRQ1 ); + packet->PageBuffers[i].Offset)); }local_irq_restore (flags);
drivers/staging/hv/rndis_filter.c +2 -2
@@ -396,7 +396,7 @@ static int RndisFilterOnReceive(struct h } rndisHeader = (struct rndis_message *)kmap_atomic ( -pfn_to_page (Packet->PageBuffers[0 ].Pfn),KM_IRQ0 ); +pfn_to_page (Packet->PageBuffers[0 ].Pfn)); rndisHeader = (void *)((unsigned long )rndisHeader + Packet->PageBuffers[0 ].Offset);
@@ -433,7 +433,7 @@ static int RndisFilterOnReceive(struct h sizeof(struct rndis_message) : rndisHeader->MessageLength); -kunmap_atomic (rndisHeader - Packet->PageBuffers[0 ].Offset,KM_IRQ0 ); +kunmap_atomic (rndisHeader - Packet->PageBuffers[0 ].Offset);DumpRndisMessage (&rndisMessage);
drivers/staging/hv/storvsc_drv.c +9 -9
@@ -496,7 +496,7 @@ static unsigned int copy_to_bounce_buffe/* ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); */ if (j ==0 ) - bounce_addr = (unsigned long )kmap_atomic (sg_page ((&bounce_sgl[j])),KM_IRQ0 ); + bounce_addr = (unsigned long )kmap_atomic (sg_page ((&bounce_sgl[j])));while (srclen) {/* assume bounce offset always == 0 */
@@ -513,19 +513,19 @@ static unsigned int copy_to_bounce_buffeif (bounce_sgl[j].length ==PAGE_SIZE ) {/* full..move to next entry */ -kunmap_atomic ((void *)bounce_addr,KM_IRQ0 ); +kunmap_atomic ((void *)bounce_addr); j++;/* if we need to use another bounce buffer */ if (srclen || i != orig_sgl_count -1 ) - bounce_addr = (unsigned long )kmap_atomic (sg_page ((&bounce_sgl[j])),KM_IRQ0 ); + bounce_addr = (unsigned long )kmap_atomic (sg_page ((&bounce_sgl[j]))); }else if (srclen ==0 && i == orig_sgl_count -1 ) {/* unmap the last bounce that is < PAGE_SIZE */ -kunmap_atomic ((void *)bounce_addr,KM_IRQ0 ); +kunmap_atomic ((void *)bounce_addr); } } -kunmap_atomic ((void *)(src_addr - orig_sgl[i].offset),KM_IRQ0 ); +kunmap_atomic ((void *)(src_addr - orig_sgl[i].offset)); }local_irq_restore (flags);
@@ -557,7 +557,7 @@ static unsigned int copy_from_bounce_buf/* ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); */ if (j ==0 ) - bounce_addr = (unsigned long )kmap_atomic (sg_page ((&bounce_sgl[j])),KM_IRQ0 ); + bounce_addr = (unsigned long )kmap_atomic (sg_page ((&bounce_sgl[j])));while (destlen) { src = bounce_addr + bounce_sgl[j].offset;
@@ -573,15 +573,15 @@ static unsigned int copy_from_bounce_bufif (bounce_sgl[j].offset == bounce_sgl[j].length) {/* full */ -kunmap_atomic ((void *)bounce_addr,KM_IRQ0 ); +kunmap_atomic ((void *)bounce_addr); j++;/* if we need to use another bounce buffer */ if (destlen || i != orig_sgl_count -1 ) - bounce_addr = (unsigned long )kmap_atomic (sg_page ((&bounce_sgl[j])),KM_IRQ0 ); + bounce_addr = (unsigned long )kmap_atomic (sg_page ((&bounce_sgl[j]))); }else if (destlen ==0 && i == orig_sgl_count -1 ) {/* unmap the last bounce that is < PAGE_SIZE */ -kunmap_atomic ((void *)bounce_addr,KM_IRQ0 ); +kunmap_atomic ((void *)bounce_addr); } }
drivers/staging/pohmelfs/inode.c +4 -4
@@ -605,11 +605,11 @@ static int pohmelfs_write_begin(struct f }if (len !=PAGE_CACHE_SIZE ) { -void *kaddr =kmap_atomic (page,KM_USER0 ); +void *kaddr =kmap_atomic (page);memset (kaddr + start,0 ,PAGE_CACHE_SIZE - start);flush_dcache_page (page); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }SetPageUptodate (page); }
@@ -635,11 +635,11 @@ static int pohmelfs_write_end(struct filif (copied != len) {unsigned from = pos & (PAGE_CACHE_SIZE -1 ); -void *kaddr =kmap_atomic (page,KM_USER0 ); +void *kaddr =kmap_atomic (page);memset (kaddr + from + copied,0 , len - copied);flush_dcache_page (page); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }SetPageUptodate (page);
drivers/staging/zram/xvmalloc.c +17 -17
@@ -50,7 +50,7 @@ static void clear_flag(struct block_head* This is called from xv_malloc/xv_free path, so it * needs to be fast. */ -static void *get_ptr_atomic (struct page *page,u16 offset,enum km_type type) +static void *get_ptr_atomic (struct page *page,u16 offset) {unsigned char *base;
@@ -58,7 +58,7 @@ static void *get_ptr_atomic(struct pagereturn base + offset; } -static void put_ptr_atomic (void *ptr,enum km_type type) +static void put_ptr_atomic (void *ptr) {kunmap_atomic (ptr, type); }
@@ -196,10 +196,10 @@ static void insert_block(struct xv_poolif (block->link.next_page) { nextblock =get_ptr_atomic (block->link.next_page, - block->link.next_offset,KM_USER1 ); + block->link.next_offset); nextblock->link.prev_page = page; nextblock->link.prev_offset = offset; -put_ptr_atomic (nextblock,KM_USER1 ); +put_ptr_atomic (nextblock); }__set_bit (slindex %BITS_PER_LONG , &pool->slbitmap[flindex]);
@@ -231,10 +231,10 @@ static void remove_block_head(struct xv_* sanity, lets do it. */ tmpblock =get_ptr_atomic (pool->freelist[slindex].page, - pool->freelist[slindex].offset,KM_USER1 ); + pool->freelist[slindex].offset); tmpblock->link.prev_page =0 ; tmpblock->link.prev_offset =0 ; -put_ptr_atomic (tmpblock,KM_USER1 ); +put_ptr_atomic (tmpblock); } }
@@ -257,18 +257,18 @@ static void remove_block(struct xv_poolif (block->link.prev_page) { tmpblock =get_ptr_atomic (block->link.prev_page, - block->link.prev_offset,KM_USER1 ); + block->link.prev_offset); tmpblock->link.next_page = block->link.next_page; tmpblock->link.next_offset = block->link.next_offset; -put_ptr_atomic (tmpblock,KM_USER1 ); +put_ptr_atomic (tmpblock); }if (block->link.next_page) { tmpblock =get_ptr_atomic (block->link.next_page, - block->link.next_offset,KM_USER1 ); + block->link.next_offset); tmpblock->link.prev_page = block->link.prev_page; tmpblock->link.prev_offset = block->link.prev_offset; -put_ptr_atomic (tmpblock,KM_USER1 ); +put_ptr_atomic (tmpblock); } }
@@ -287,7 +287,7 @@ static int grow_pool(struct xv_pool *poostat_inc (&pool->total_pages);spin_lock (&pool->lock); - block =get_ptr_atomic (page,0 ,KM_USER0 ); + block =get_ptr_atomic (page,0 ); block->size =PAGE_SIZE -XV_ALIGN ;set_flag (block,BLOCK_FREE );
@@ -296,7 +296,7 @@ static int grow_pool(struct xv_pool *pooinsert_block (pool, page,0 , block); -put_ptr_atomic (block,KM_USER0 ); +put_ptr_atomic (block);spin_unlock (&pool->lock);return 0 ;
@@ -376,7 +376,7 @@ int xv_malloc(struct xv_pool *pool, u32return -ENOMEM ; } - block =get_ptr_atomic (*page, *offset,KM_USER0 ); + block =get_ptr_atomic (*page, *offset);remove_block_head (pool, block, index);
@@ -406,7 +406,7 @@ int xv_malloc(struct xv_pool *pool, u32 block->size = origsize;clear_flag (block,BLOCK_FREE ); -put_ptr_atomic (block,KM_USER0 ); +put_ptr_atomic (block);spin_unlock (&pool->lock); *offset +=XV_ALIGN ;
@@ -426,7 +426,7 @@ void xv_free(struct xv_pool *pool, strucspin_lock (&pool->lock); - page_start =get_ptr_atomic (page,0 ,KM_USER0 ); + page_start =get_ptr_atomic (page,0 ); block = (struct block_header *)((char *)page_start + offset);/* Catch double free bugs */
@@ -468,7 +468,7 @@ void xv_free(struct xv_pool *pool, struc/* No used objects in this page. Free it. */ if (block->size ==PAGE_SIZE -XV_ALIGN ) { -put_ptr_atomic (page_start,KM_USER0 ); +put_ptr_atomic (page_start);spin_unlock (&pool->lock);__free_page (page);
@@ -486,7 +486,7 @@ void xv_free(struct xv_pool *pool, strucset_blockprev (tmpblock, offset); } -put_ptr_atomic (page_start,KM_USER0 ); +put_ptr_atomic (page_start);spin_unlock (&pool->lock); }
drivers/staging/zram/zram_drv.c +19 -19
@@ -171,9 +171,9 @@ static void zram_free_page(struct zram * goto out; } - obj =kmap_atomic (page,KM_USER0 ) + offset; + obj =kmap_atomic (page) + offset; clen =xv_get_object_size (obj) -sizeof (struct zobj_header ); -kunmap_atomic (obj,KM_USER0 ); +kunmap_atomic (obj);xv_free (zram->mem_pool, page, offset);if (clen <=PAGE_SIZE /2 )
@@ -191,9 +191,9 @@ static void handle_zero_page(struct page {void *user_mem; - user_mem =kmap_atomic (page,KM_USER0 ); + user_mem =kmap_atomic (page);memset (user_mem,0 ,PAGE_SIZE ); -kunmap_atomic (user_mem,KM_USER0 ); +kunmap_atomic (user_mem);flush_dcache_page (page); }
@@ -203,13 +203,13 @@ static void handle_uncompressed_page(str {unsigned char *user_mem, *cmem; - user_mem =kmap_atomic (page,KM_USER0 ); - cmem =kmap_atomic (zram->table[index].page,KM_USER1 ) + + user_mem =kmap_atomic (page); + cmem =kmap_atomic (zram->table[index].page) + zram->table[index].offset;memcpy (user_mem, cmem,PAGE_SIZE ); -kunmap_atomic (user_mem,KM_USER0 ); -kunmap_atomic (cmem,KM_USER1 ); +kunmap_atomic (user_mem); +kunmap_atomic (cmem);flush_dcache_page (page); }
@@ -252,10 +252,10 @@ static int zram_read(struct zram *zram,continue ; } - user_mem =kmap_atomic (page,KM_USER0 ); + user_mem =kmap_atomic (page); clen =PAGE_SIZE ; - cmem =kmap_atomic (zram->table[index].page,KM_USER1 ) + + cmem =kmap_atomic (zram->table[index].page) + zram->table[index].offset; ret = lzo1x_decompress_safe(
@@ -263,8 +263,8 @@ static int zram_read(struct zram *zram,xv_get_object_size (cmem) -sizeof (*zheader), user_mem, &clen); -kunmap_atomic (user_mem,KM_USER0 ); -kunmap_atomic (cmem,KM_USER1 ); +kunmap_atomic (user_mem); +kunmap_atomic (cmem);/* Should NEVER happen. Return bio error if it does. */ if (unlikely (ret !=LZO_E_OK )) {
@@ -318,9 +318,9 @@ static int zram_write(struct zram *zram,mutex_lock (&zram->lock); - user_mem =kmap_atomic (page,KM_USER0 ); + user_mem =kmap_atomic (page);if (page_zero_filled (user_mem)) { -kunmap_atomic (user_mem,KM_USER0 ); +kunmap_atomic (user_mem);mutex_unlock (&zram->lock);zram_stat_inc (&zram->stats.pages_zero);zram_set_flag (zram, index,ZRAM_ZERO );
@@ -330,7 +330,7 @@ static int zram_write(struct zram *zram, ret =lzo1x_1_compress (user_mem,PAGE_SIZE , src, &clen, zram->compress_workmem); -kunmap_atomic (user_mem,KM_USER0 ); +kunmap_atomic (user_mem);if (unlikely (ret !=LZO_E_OK )) {mutex_unlock (&zram->lock);
@@ -360,7 +360,7 @@ static int zram_write(struct zram *zram,zram_set_flag (zram, index,ZRAM_UNCOMPRESSED );zram_stat_inc (&zram->stats.pages_expand); zram->table[index].page = page_store; - src =kmap_atomic (page,KM_USER0 ); + src =kmap_atomic (page); goto memstore; }
@@ -377,7 +377,7 @@ static int zram_write(struct zram *zram, memstore: zram->table[index].offset = offset; - cmem =kmap_atomic (zram->table[index].page,KM_USER1 ) + + cmem =kmap_atomic (zram->table[index].page) + zram->table[index].offset;#if 0
@@ -391,9 +391,9 @@ memstore:memcpy (cmem, src, clen); -kunmap_atomic (cmem,KM_USER1 ); +kunmap_atomic (cmem);if (unlikely (zram_test_flag (zram, index,ZRAM_UNCOMPRESSED ))) -kunmap_atomic (src,KM_USER0 ); +kunmap_atomic (src);/* Update stats */ zram->stats.compr_size += clen;
drivers/vhost/vhost.c +2 -2
@@ -774,9 +774,9 @@ static int set_bit_to_user(int nr, voidif (r <0 )return r;BUG_ON (r !=1 ); - base =kmap_atomic (page,KM_USER0 ); + base =kmap_atomic (page);set_bit (bit, base); -kunmap_atomic (base,KM_USER0 ); +kunmap_atomic (base);set_page_dirty_lock (page);put_page (page);return 0 ;
fs/afs/fsclient.c +4 -4
@@ -364,10 +364,10 @@ static int afs_deliver_fs_fetch_data(str_debug ("extract data" );if (call->count >0 ) { page = call->reply3; - buffer =kmap_atomic (page,KM_USER0 ); + buffer =kmap_atomic (page); ret =afs_extract_data (call, skb, last, buffer, call->count); -kunmap_atomic (buffer,KM_USER0 ); +kunmap_atomic (buffer);switch (ret) {case 0 :break ;case -EAGAIN :return 0 ;
@@ -410,9 +410,9 @@ static int afs_deliver_fs_fetch_data(strif (call->count <PAGE_SIZE ) {_debug ("clear" ); page = call->reply3; - buffer =kmap_atomic (page,KM_USER0 ); + buffer =kmap_atomic (page);memset (buffer + call->count,0 ,PAGE_SIZE - call->count); -kunmap_atomic (buffer,KM_USER0 ); +kunmap_atomic (buffer); }_leave (" = 0 [done]" );
fs/afs/mntpt.c +2 -2
@@ -201,9 +201,9 @@ static struct vfsmount *afs_mntpt_do_autif (PageError (page)) goto error; - buf =kmap_atomic (page,KM_USER0 ); + buf =kmap_atomic (page);memcpy (devname, buf, size); -kunmap_atomic (buf,KM_USER0 ); +kunmap_atomic (buf);page_cache_release (page); page =NULL ; }
fs/aio.c +12 -12
@@ -171,7 +171,7 @@ static int aio_setup_ring(struct kioctx info->nr = nr_events;/* trusted copy */ - ring =kmap_atomic (info->ring_pages[0 ],KM_USER0 ); + ring =kmap_atomic (info->ring_pages[0 ]); ring->nr = nr_events;/* user copy */ ring->id = ctx->user_id; ring->head = ring->tail =0 ;
@@ -179,7 +179,7 @@ static int aio_setup_ring(struct kioctx ring->compat_features =AIO_RING_COMPAT_FEATURES ; ring->incompat_features =AIO_RING_INCOMPAT_FEATURES ; ring->header_length =sizeof (struct aio_ring ); -kunmap_atomic (ring,KM_USER0 ); +kunmap_atomic (ring);return 0 ; }
@@ -466,13 +466,13 @@ static struct kiocb *__aio_get_req(struc* accept an event from this io. */ spin_lock_irq (&ctx->ctx_lock); - ring =kmap_atomic (ctx->ring_info.ring_pages[0 ],KM_USER0 ); + ring =kmap_atomic (ctx->ring_info.ring_pages[0 ]);if (ctx->reqs_active <aio_ring_avail (&ctx->ring_info, ring)) {list_add (&req->ki_list, &ctx->active_reqs); ctx->reqs_active++; okay =1 ; } -kunmap_atomic (ring,KM_USER0 ); +kunmap_atomic (ring);spin_unlock_irq (&ctx->ctx_lock);if (!okay) {
@@ -946,10 +946,10 @@ int aio_complete(struct kiocb *iocb, lonif (kiocbIsCancelled (iocb)) goto put_rq; - ring =kmap_atomic (info->ring_pages[0 ],KM_IRQ1 ); + ring =kmap_atomic (info->ring_pages[0 ]); tail = info->tail; - event =aio_ring_event (info, tail,KM_IRQ0 ); + event =aio_ring_event (info, tail);if (++tail >= info->nr) tail =0 ;
@@ -970,8 +970,8 @@ int aio_complete(struct kiocb *iocb, lon info->tail = tail; ring->tail = tail; -put_aio_ring_event (event,KM_IRQ0 ); -kunmap_atomic (ring,KM_IRQ1 ); +put_aio_ring_event (event); +kunmap_atomic (ring);pr_debug ("added to ring %p at [%lu]\n" , iocb, tail);
@@ -1016,7 +1016,7 @@ static int aio_read_evt(struct kioctx *iunsigned long head;int ret =0 ; - ring =kmap_atomic (info->ring_pages[0 ],KM_USER0 ); + ring =kmap_atomic (info->ring_pages[0 ]);dprintk ("in aio_read_evt h%lu t%lu m%lu\n" , (unsigned long )ring->head, (unsigned long )ring->tail, (unsigned long )ring->nr);
@@ -1028,18 +1028,18 @@ static int aio_read_evt(struct kioctx *i head = ring->head % info->nr;if (head != ring->tail) { -struct io_event *evp =aio_ring_event (info, head,KM_USER1 ); +struct io_event *evp =aio_ring_event (info, head); *ent = *evp; head = (head +1 ) % info->nr;smp_mb ();/* finish reading the event before updatng the head */ ring->head = head; ret =1 ; -put_aio_ring_event (evp,KM_USER1 ); +put_aio_ring_event (evp); }spin_unlock (&info->ring_lock); out: -kunmap_atomic (ring,KM_USER0 ); +kunmap_atomic (ring);dprintk ("leaving aio_read_evt: %d h%lu t%lu\n" , ret, (unsigned long )ring->head, (unsigned long )ring->tail);return ret;
fs/bio-integrity.c +5 -5
@@ -356,7 +356,7 @@ static void bio_integrity_generate(struc bix.sector_size = bi->sector_size;bio_for_each_segment (bv, bio, i) { -void *kaddr =kmap_atomic (bv->bv_page,KM_USER0 ); +void *kaddr =kmap_atomic (bv->bv_page); bix.data_buf = kaddr + bv->bv_offset; bix.data_size = bv->bv_len; bix.prot_buf = prot_buf;
@@ -370,7 +370,7 @@ static void bio_integrity_generate(struc total += sectors * bi->tuple_size;BUG_ON (total > bio->bi_integrity->bip_size); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); } }
@@ -497,7 +497,7 @@ static int bio_integrity_verify(struct b bix.sector_size = bi->sector_size;bio_for_each_segment (bv, bio, i) { -void *kaddr =kmap_atomic (bv->bv_page,KM_USER0 ); +void *kaddr =kmap_atomic (bv->bv_page); bix.data_buf = kaddr + bv->bv_offset; bix.data_size = bv->bv_len; bix.prot_buf = prot_buf;
@@ -506,7 +506,7 @@ static int bio_integrity_verify(struct b ret = bi->verify_fn (&bix);if (ret) { -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr);return ret; }
@@ -516,7 +516,7 @@ static int bio_integrity_verify(struct b total += sectors * bi->tuple_size;BUG_ON (total > bio->bi_integrity->bip_size); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr); }return ret;
fs/btrfs/compression.c +4 -4
@@ -129,10 +129,10 @@ static int check_compressed_csum(struct page = cb->compressed_pages[i]; csum = ~(u32 )0 ; - kaddr =kmap_atomic (page,KM_USER0 ); + kaddr =kmap_atomic (page); csum =btrfs_csum_data (root, kaddr, csum,PAGE_CACHE_SIZE );btrfs_csum_final (csum, (char *)&csum); -kunmap_atomic (kaddr,KM_USER0 ); +kunmap_atomic (kaddr);if (csum != *cb_sum) { printk(KERN_INFO "btrfs csum failed ino %lu "
@@ -518,10 +518,10 @@ static noinline int add_ra_bio_pages(strif (zero_offset) {int zeros; zeros =PAGE_CACHE_SIZE - zero_offset; - userpage =kmap_atomic (page,KM_USER0 ); + userpage =kmap_atomic (page);memset (userpage + zero_offset,0 , zeros);flush_dcache_page (page); -kunmap_atomic (userpage,KM_USER0 ); +kunmap_atomic (userpage); } }
fs/btrfs/ctree.c +15 -15
@@ -885,14 +885,14 @@ static noinline int generic_bin_search(s (offset + sizeof(struct btrfs_disk_key)) > map_start + map_len) {if (map_token) { -unmap_extent_buffer (eb, map_token,KM_USER0 ); +unmap_extent_buffer (eb, map_token); map_token =NULL ; } err =map_private_extent_buffer (eb, offset,sizeof (struct btrfs_disk_key ), &map_token, &kaddr, - &map_start, &map_len,KM_USER0 ); + &map_start, &map_len);if (!err) { tmp = (struct btrfs_disk_key *)(kaddr + offset -
@@ -916,13 +916,13 @@ static noinline int generic_bin_search(selse { *slot = mid;if (map_token) -unmap_extent_buffer (eb, map_token,KM_USER0 ); +unmap_extent_buffer (eb, map_token);return 0 ; } } *slot = low;if (map_token) -unmap_extent_buffer (eb, map_token,KM_USER0 ); +unmap_extent_buffer (eb, map_token);return 1 ; }
@@ -2374,7 +2374,7 @@ static noinline int __push_leaf_right(st i--; }if (left->map_token) { -unmap_extent_buffer (left, left->map_token,KM_USER1 ); +unmap_extent_buffer (left, left->map_token); left->map_token =NULL ; }
@@ -2430,7 +2430,7 @@ static noinline int __push_leaf_right(st }if (right->map_token) { -unmap_extent_buffer (right, right->map_token,KM_USER1 ); +unmap_extent_buffer (right, right->map_token); right->map_token =NULL ; } left_nritems -= push_items;
@@ -2599,7 +2599,7 @@ static noinline int __push_leaf_left(str }if (right->map_token) { -unmap_extent_buffer (right, right->map_token,KM_USER1 ); +unmap_extent_buffer (right, right->map_token); right->map_token =NULL ; }
@@ -2646,7 +2646,7 @@ static noinline int __push_leaf_left(str }btrfs_set_header_nritems (left, old_left_nritems + push_items);if (left->map_token) { -unmap_extent_buffer (left, left->map_token,KM_USER1 ); +unmap_extent_buffer (left, left->map_token); left->map_token =NULL ; }
@@ -2688,7 +2688,7 @@ static noinline int __push_leaf_left(strbtrfs_set_item_offset (right, item, push_space); }if (right->map_token) { -unmap_extent_buffer (right, right->map_token,KM_USER1 ); +unmap_extent_buffer (right, right->map_token); right->map_token =NULL ; }
@@ -2841,7 +2841,7 @@ static noinline int copy_for_split(struc }if (right->map_token) { -unmap_extent_buffer (right, right->map_token,KM_USER1 ); +unmap_extent_buffer (right, right->map_token); right->map_token =NULL ; }
@@ -3379,7 +3379,7 @@ int btrfs_truncate_item(struct btrfs_tra }if (leaf->map_token) { -unmap_extent_buffer (leaf, leaf->map_token,KM_USER1 ); +unmap_extent_buffer (leaf, leaf->map_token); leaf->map_token =NULL ; }
@@ -3495,7 +3495,7 @@ int btrfs_extend_item(struct btrfs_trans }if (leaf->map_token) { -unmap_extent_buffer (leaf, leaf->map_token,KM_USER1 ); +unmap_extent_buffer (leaf, leaf->map_token); leaf->map_token =NULL ; }
@@ -3618,7 +3618,7 @@ int btrfs_insert_some_items(struct btrfsbtrfs_set_item_offset (leaf, item, ioff - total_data); }if (leaf->map_token) { -unmap_extent_buffer (leaf, leaf->map_token,KM_USER1 ); +unmap_extent_buffer (leaf, leaf->map_token); leaf->map_token =NULL ; }
@@ -3733,7 +3733,7 @@ setup_items_for_insert(struct btrfs_tranbtrfs_set_item_offset (leaf, item, ioff - total_data); }if (leaf->map_token) { -unmap_extent_buffer (leaf, leaf->map_token,KM_USER1 ); +unmap_extent_buffer (leaf, leaf->map_token); leaf->map_token =NULL ; }
@@ -3962,7 +3962,7 @@ int btrfs_del_items(struct btrfs_trans_h }if (leaf->map_token) { -unmap_extent_buffer (leaf, leaf->map_token,KM_USER1 ); +unmap_extent_buffer (leaf, leaf->map_token); leaf->map_token =NULL ; }
fs/btrfs/ctree.h +4 -4
@@ -1241,17 +1241,17 @@ void btrfs_set_##name(struct extent_buff#define BTRFS_SETGET_HEADER_FUNCS (name, type, member, bits) \ static inline u##bits btrfs_##name(struct extent_buffer *eb) \ { \ - type *p = kmap_atomic(eb->first_page, KM_USER0); \ + type *p = kmap_atomic(eb->first_page); \ u##bits res = le##bits##_to_cpu(p->member); \ - kunmap_atomic(p, KM_USER0); \ + kunmap_atomic(p); \ return res; \ } \ static inline void btrfs_set_##name(struct extent_buffer *eb, \ u##bits val) \ { \ - type *p = kmap_atomic(eb->first_page, KM_USER0); \ + type *p = kmap_atomic(eb->first_page); \ p->member = cpu_to_le##bits(val); \ - kunmap_atomic(p, KM_USER0); \ + kunmap_atomic(p); \ }#define BTRFS_SETGET_STACK_FUNCS (name, type, member, bits) \
fs/btrfs/disk-io.c +2 -2
@@ -211,7 +211,7 @@ static int csum_tree_block(struct btrfs_while (len >0 ) { err =map_private_extent_buffer (buf, offset,32 , &map_token, &kaddr, - &map_start, &map_len,KM_USER0 ); + &map_start, &map_len);if (err)return 1 ; cur_len =min (len, map_len - (offset - map_start));
@@ -219,7 +219,7 @@ static int csum_tree_block(struct btrfs_ crc, cur_len); len -= cur_len; offset += cur_len; -unmap_extent_buffer (buf, map_token,KM_USER0 ); +unmap_extent_buffer (buf, map_token); }if (csum_size >sizeof (inline_result)) { result =kzalloc (csum_size *sizeof (char ),GFP_NOFS );
fs/btrfs/extent_io.c +28 -28
8 lines not on this page · raw message
fs/nilfs2/cpfile.c +47 -47
94 lines not on this page · raw message
fs/nilfs2/sufile.c +29 -29
58 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Part of the diff is not shown here. View the raw message.
Re: [RFC][PATCH 4/6] mm: Remove all KM_type arguments
Quoted 11 lines · Peter Zijlstra
Do the bulk of the
km_typeandKM_typeremovement by script.git grep -l -e
km_type-eKM_| grep -v xfs | while read file; doquilt add $file; sed -i -e 's/,[[:space:]]*enum km_type type[[:space:]]*//g' \ -e 's/,[[:space:]]*KM_[[:digit:][:upper:]_]*[[:space:]]*//g' \ $file;done
Signed-off-by Peter Zijlstra<[email protected]>
Signature · 7 lines
All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
RFC PATCH 5/6 mm: Fix up KM_type argument removal fallout
In reply to Peter ZijlstraManual fixups of the previous patch
(i386 all{mod,yes}config driven}
--- arch/arm/include/asm/pgtable.h | 8 +++--- arch/arm/lib/uaccess_with_memcpy.c | 1 arch/arm/mm/highmem.c | 8 ++---- arch/frv/mm/highmem.c | 7 +++-- arch/mips/mm/highmem.c | 22 ++++++++++-------- arch/mn10300/include/asm/highmem.h | 4 ++- arch/powerpc/include/asm/highmem.h | 2 - arch/powerpc/mm/highmem.c | 3 +- arch/sparc/mm/highmem.c | 3 +- arch/x86/include/asm/pgtable_32.h | 12 +++------- arch/x86/kernel/cpu/perf_event.c | 5 +--- arch/x86/mm/highmem_32.c | 7 +++-- arch/x86/mm/iomap_32.c | 5 ++-- drivers/block/drbd/drbd_bitmap.c | 24 ++++++++++---------- drivers/gpu/drm/i915/i915_gem.c | 3 -- drivers/gpu/drm/i915/intel_overlay.c | 3 -- drivers/net/e1000/e1000_main.c | 6 +---- drivers/net/e1000e/netdev.c | 6 +---- drivers/scsi/cxgb3i/cxgb3i_pdu.c | 3 -- drivers/scsi/fcoe/fcoe.c | 3 -- drivers/scsi/libfc/fc_libfc.c | 8 ++---- drivers/scsi/libfc/fc_libfc.h | 3 -- drivers/staging/hv/netvsc_drv.c | 3 -- drivers/staging/hv/storvsc_drv.c | 11 ++++----- fs/aio.c | 8 +++--- fs/btrfs/ctree.c | 42 +++++++++++------------------------ fs/btrfs/extent_io.c | 14 +++++------ fs/btrfs/extent_io.h | 6 ++--- include/crypto/scatterwalk.h | 16 +------------ include/linux/highmem.h | 12 +++++----- include/linux/io-mapping.h | 11 ++++----- lib/swiotlb.c | 3 -- net/rds/ib_recv.c | 3 -- net/rds/iw_recv.c | 3 -- net/rds/rds.h | 2 - net/rds/recv.c | 2 - net/rds/tcp_recv.c | 6 +---- net/sunrpc/xprtrdma/rpc_rdma.c | 6 +---- 38 files changed, 126 insertions(+), 168 deletions(-)
arch/arm/mm/highmem.c +3 -5
@@ -38,7 +38,7 @@ EXPORT_SYMBOL(kunmap);void *kmap_atomic (struct page *page) { -unsigned int idx; +unsigned int idx, type;unsigned long vaddr;void *kmap;
@@ -46,8 +46,6 @@ void *kmap_atomic(struct page *page)if (!PageHighMem (page))return page_address (page); -debug_kmap_atomic (type); -#ifdef CONFIG_DEBUG_HIGHMEM /* * There is no cache coherency issue when non VIVT, so force the
@@ -87,7 +85,7 @@ EXPORT_SYMBOL(kmap_atomic);void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -unsigned int idx; +unsigned int idx, type;if (kvaddr >= (void *)FIXADDR_START ) { type =kmap_atomic_idx_pop ();
@@ -112,7 +110,7 @@ EXPORT_SYMBOL(kunmap_atomic_notypecheck)void *kmap_atomic_pfn (unsigned long pfn) { -unsigned int idx; +unsigned int idx, type;unsigned long vaddr;pagefault_disable ();
arch/mips/mm/highmem.c +13 -9
@@ -45,6 +45,7 @@ void *__kmap_atomic(struct page *page) {enum fixed_addresses idx;unsigned long vaddr; +int type;/* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ pagefault_disable ();
@@ -67,7 +68,7 @@ EXPORT_SYMBOL(__kmap_atomic);void __kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -unsigned int idx; +unsigned int type;if (vaddr <FIXADDR_START ) {// FIXME pagefault_enable ();
@@ -76,16 +77,18 @@ void __kunmap_atomic_notypecheck(void *k type =kmap_atomic_idx_pop ();#ifdef CONFIG_DEBUG_HIGHMEM - idx = type +KM_TYPE_NR *smp_processor_id (); + { +unsigned int idx = type +KM_TYPE_NR *smp_processor_id (); -BUG_ON (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN + idx)); +BUG_ON (vaddr !=__fix_to_virt (FIX_KMAP_BEGIN + idx)); -/* -* force other mappings to Oops if they'll try to access -* this pte without first remap it -*/ -pte_clear (&init_mm, vaddr, kmap_pte-idx); -local_flush_tlb_one (vaddr); +/* +* force other mappings to Oops if they'll try to access +* this pte without first remap it +*/ +pte_clear (&init_mm, vaddr, kmap_pte-idx); +local_flush_tlb_one (vaddr); + }#endif pagefault_enable (); }
@@ -99,6 +102,7 @@ void *kmap_atomic_pfn(unsigned long pfn) {enum fixed_addresses idx;unsigned long vaddr; +int type;pagefault_disable ();
arch/x86/include/asm/pgtable_32.h +4 -8
@@ -49,17 +49,13 @@ extern void set_pmd_pfn(unsigned long, u#endif #if defined(CONFIG_HIGHPTE ) -#define __KM_PTE \ - (in_nmi() ? KM_NMI_PTE : \ - in_irq() ? KM_IRQ_PTE : \ - KM_PTE0) -#define pte_offset_map (dir, address) \ - ((pte_t *)kmap_atomic(pmd_page(*(dir)), __KM_PTE) + \ +#define pte_offset_map (dir, address) \ + ((pte_t *)kmap_atomic(pmd_page(*(dir))) + \ pte_index((address))) -#define pte_offset_map_nested (dir, address) \ +#define pte_offset_map_nested (dir, address) \ ((pte_t *)kmap_atomic(pmd_page(*(dir))) + \ pte_index((address))) -#define pte_unmap (pte) kunmap_atomic((pte), __KM_PTE) +#define pte_unmap (pte) kunmap_atomic((pte))#define pte_unmap_nested (pte) kunmap_atomic((pte))#else #define pte_offset_map (dir, address) \
arch/x86/mm/iomap_32.c +3 -2
@@ -59,6 +59,7 @@ void *kmap_atomic_prot_pfn(unsigned long {enum fixed_addresses idx;unsigned long vaddr; +int type;pagefault_disable ();
@@ -86,7 +87,7 @@ iomap_atomic_prot_pfn(unsigned long pfn,if (!pat_enabled &&pgprot_val (prot) ==pgprot_val (PAGE_KERNEL_WC )) prot =PAGE_KERNEL_UC_MINUS ; -return kmap_atomic_prot_pfn (pfn, type, prot); +return kmap_atomic_prot_pfn (pfn, prot); }EXPORT_SYMBOL_GPL (iomap_atomic_prot_pfn);
@@ -94,10 +95,10 @@ void iounmap_atomic(void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -enum fixed_addresses idx;if (vaddr >=__fix_to_virt (FIX_KMAP_END ) && vaddr <=__fix_to_virt (FIX_KMAP_BEGIN )) { +unsigned int idx, type; type =kmap_atomic_idx_pop (); idx = type +KM_TYPE_NR *smp_processor_id ();
arch/mn10300/include/asm/highmem.h +3 -1
@@ -72,8 +72,8 @@ static inline void kunmap(struct page *p*/ static inline unsigned long kmap_atomic (struct page *page) { -enum fixed_addresses idx;unsigned long vaddr; +unsigned int idx, type;pagefault_disable ();if (page < highmem_start_page)
@@ -94,6 +94,8 @@ static inline unsigned long kmap_atomic(static inline void kunmap_atomic_notypecheck (unsigned long vaddr) { +unsigned int type; +if (vaddr <FIXADDR_START ) {/* FIXME */ pagefault_enable ();return ;
drivers/staging/hv/netvsc_drv.c +1 -2
@@ -274,8 +274,7 @@ static int netvsc_recv_callback(struct h* hv_netvsc_packet cannot be deallocated */ for (i =0 ; i < packet->PageBufferCount; i++) { - data =kmap_atomic (pfn_to_page (packet->PageBuffers[i].Pfn), -KM_IRQ1 ); + data =kmap_atomic (pfn_to_page (packet->PageBuffers[i].Pfn)); data = (void *)(unsigned long )data + packet->PageBuffers[i].Offset;
drivers/staging/hv/storvsc_drv.c +5 -6
@@ -488,8 +488,8 @@ static unsigned int copy_to_bounce_buffelocal_irq_save (flags);for (i =0 ; i < orig_sgl_count; i++) { - src_addr = (unsigned long )kmap_atomic (sg_page ((&orig_sgl[i])), -KM_IRQ0 ) + orig_sgl[i].offset; + src_addr = (unsigned long )kmap_atomic (sg_page ((&orig_sgl[i]))) + + orig_sgl[i].offset; src = src_addr; srclen = orig_sgl[i].length;
@@ -550,8 +550,8 @@ static unsigned int copy_from_bounce_buflocal_irq_save (flags);for (i =0 ; i < orig_sgl_count; i++) { - dest_addr = (unsigned long )kmap_atomic (sg_page ((&orig_sgl[i])), -KM_IRQ0 ) + orig_sgl[i].offset; + dest_addr = (unsigned long )kmap_atomic (sg_page ((&orig_sgl[i]))) + + orig_sgl[i].offset; dest = dest_addr; destlen = orig_sgl[i].length;/* ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); */
@@ -585,8 +585,7 @@ static unsigned int copy_from_bounce_buf } } -kunmap_atomic ((void *)(dest_addr - orig_sgl[i].offset), -KM_IRQ0 ); +kunmap_atomic ((void *)(dest_addr - orig_sgl[i].offset)); }local_irq_restore (flags);
net/sunrpc/xprtrdma/rpc_rdma.c +2 -4
@@ -336,8 +336,7 @@ rpcrdma_inline_pullup(struct rpc_rqst *r curlen = copy_len;dprintk ("RPC: %s: page %d destp 0x%p len %d curlen %d\n" , __func__, i, destp, copy_len, curlen); - srcp =kmap_atomic (rqst->rq_snd_buf.pages[i], -KM_SKB_SUNRPC_DATA ); + srcp =kmap_atomic (rqst->rq_snd_buf.pages[i]);if (i ==0 )memcpy (destp, srcp+rqst->rq_snd_buf.page_base, curlen);else
@@ -637,8 +636,7 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqdprintk ("RPC: %s: page %d" " srcp 0x%p len %d curlen %d\n" , __func__, i, srcp, copy_len, curlen); - destp =kmap_atomic (rqst->rq_rcv_buf.pages[i], -KM_SKB_SUNRPC_DATA ); + destp =kmap_atomic (rqst->rq_rcv_buf.pages[i]);if (i ==0 )memcpy (destp + rqst->rq_rcv_buf.page_base, srcp, curlen);
arch/x86/kernel/cpu/perf_event.c +2 -3
@@ -49,7 +49,6 @@ static unsigned long copy_from_user_nmi(void *to, const void __user *from, unsigned long n) {unsigned long offset, addr = (unsigned long )from; -int type =in_nmi () ?KM_NMI :KM_IRQ0 ;unsigned long size, len =0 ;struct page *page;void *map;
@@ -63,9 +62,9 @@ copy_from_user_nmi(void *to, const void offset = addr & (PAGE_SIZE -1 ); size =min (PAGE_SIZE - offset, n - len); - map =kmap_atomic (page, type); + map =kmap_atomic (page);memcpy (to, map+offset, size); -kunmap_atomic (map, type); +kunmap_atomic (map);put_page (page); len += size;
drivers/net/e1000/e1000_main.c +2 -4
@@ -3725,11 +3725,9 @@ static bool e1000_clean_jumbo_rx_irq(strif (length <= copybreak &&skb_tailroom (skb) >= length) {u8 *vaddr; - vaddr =kmap_atomic (buffer_info->page, -KM_SKB_DATA_SOFTIRQ ); + vaddr =kmap_atomic (buffer_info->page);memcpy (skb_tail_pointer (skb), vaddr, length); -kunmap_atomic (vaddr, -KM_SKB_DATA_SOFTIRQ ); +kunmap_atomic (vaddr);/* re-use the page, so don't erase * buffer_info->page */ skb_put (skb, length);
include/crypto/scatterwalk.h +2 -14
@@ -25,26 +25,14 @@#include <linux/scatterlist.h> #include <linux/sched.h> -static inline enum km_type crypto_kmap_type (int out) -{ -enum km_type type; - -if (in_softirq ()) - type = out * (KM_SOFTIRQ1 -KM_SOFTIRQ0 ) +KM_SOFTIRQ0 ; -else - type = out * (KM_USER1 -KM_USER0 ) +KM_USER0 ; - -return type; -} -static inline void *crypto_kmap (struct page *page,int out) { -return kmap_atomic (page,crypto_kmap_type (out)); +return kmap_atomic (page); }static inline void crypto_kunmap (void *vaddr,int out) { -kunmap_atomic (vaddr,crypto_kmap_type (out)); +kunmap_atomic (vaddr); }static inline void crypto_yield (u32 flags)
include/linux/highmem.h +6 -6
@@ -74,19 +74,19 @@ static inline void kunmap(struct page *p { } -static inline void *kmap_atomic (struct page *page,enum km_type idx) +static inline void *kmap_atomic (struct page *page) {pagefault_disable ();return page_address (page); } -#define kmap_atomic_prot (page, idx, prot) kmap_atomic(page, idx) +#define kmap_atomic_prot (page, prot) kmap_atomic(page) -static inline void kunmap_atomic_notypecheck (void *addr,enum km_type idx) +static inline void kunmap_atomic_notypecheck (void *addr) {pagefault_enable (); } -#define kmap_atomic_pfn (pfn, idx) kmap_atomic(pfn_to_page(pfn), (idx)) +#define kmap_atomic_pfn (pfn) kmap_atomic(pfn_to_page(pfn))#define kmap_atomic_to_page (ptr) virt_to_page(ptr)#define kmap_flush_unused () do {} while(0)
@@ -96,9 +96,9 @@ static inline void kunmap_atomic_notypec/* Prevent people trying to call kunmap_atomic() as if it were kunmap() */ /* kunmap_atomic() should get the return value of kmap_atomic, not the page. */ -#define kunmap_atomic (addr, idx) do { \ +#define kunmap_atomic (addr) do { \ BUILD_BUG_ON(__same_type((addr), struct page *)); \ - kunmap_atomic_notypecheck((addr), (idx)); \ + kunmap_atomic_notypecheck(addr); \ } while (0)/* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */
arch/frv/mm/highmem.c +4 -3
@@ -40,6 +40,7 @@ struct page *kmap_atomic_to_page(void *pvoid *kmap_atomic (struct page *page) {unsigned long paddr; +int type;pagefault_disable (); type =kmap_atomic_idx_push ();
@@ -65,9 +66,9 @@ void *kmap_atomic(struct page *page) }EXPORT_SYMBOL (kmap_atomic); -void kunmap_atomic (void *kvaddr) +void kunmap_atomic_notypecheck (void *kvaddr) { - type =kmap_atomic_idx_pop (); +int type =kmap_atomic_idx_pop ();switch (type) {case 0 :__kunmap_atomic_primary (4 ,6 );break ;case 1 :__kunmap_atomic_primary (5 ,7 );break ;
@@ -84,5 +85,5 @@ void kunmap_atomic(void *kvaddr) }pagefault_enable (); } -EXPORT_SYMBOL (kunmap_atomic); +EXPORT_SYMBOL (kunmap_atomic_notypecheck);
fs/btrfs/extent_io.c +7 -7
@@ -3504,7 +3504,7 @@ void read_extent_buffer(struct extent_buint map_private_extent_buffer (struct extent_buffer *eb,unsigned long start,unsigned long min_len,char **token,char **map,unsigned long *map_start, -unsigned long *map_len,int km) +unsigned long *map_len) {size_t offset = start & (PAGE_CACHE_SIZE -1 );char *kaddr;
@@ -3533,7 +3533,7 @@ int map_private_extent_buffer(struct ext } p =extent_buffer_page (eb, i); - kaddr =kmap_atomic (p, km); + kaddr =kmap_atomic (p); *token = kaddr; *map = kaddr + offset; *map_len =PAGE_CACHE_SIZE - offset;
@@ -3544,17 +3544,17 @@ int map_extent_buffer(struct extent_buffunsigned long min_len, char **token, char **map, unsigned long *map_start, - unsigned long *map_len, int km) + unsigned long *map_len) { int err;int save =0 ;if (eb->map_token) { -unmap_extent_buffer (eb, eb->map_token, km); +unmap_extent_buffer (eb, eb->map_token); eb->map_token =NULL ; save =1 ; } err =map_private_extent_buffer (eb, start, min_len, token, map, - map_start, map_len, km); + map_start, map_len);if (!err && save) { eb->map_token = *token; eb->kaddr = *map;
@@ -3564,9 +3564,9 @@ int map_extent_buffer(struct extent_buffreturn err; } -void unmap_extent_buffer (struct extent_buffer *eb,char *token,int km) +void unmap_extent_buffer (struct extent_buffer *eb,char *token) { -kunmap_atomic (token, km); +kunmap_atomic (token); } int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv,
fs/btrfs/extent_io.h +3 -3
@@ -297,12 +297,12 @@ int extent_buffer_uptodate(struct extentint map_extent_buffer (struct extent_buffer *eb,unsigned long offset,unsigned long min_len,char **token,char **map,unsigned long *map_start, -unsigned long *map_len,int km); +unsigned long *map_len);int map_private_extent_buffer (struct extent_buffer *eb,unsigned long offset,unsigned long min_len,char **token,char **map,unsigned long *map_start, -unsigned long *map_len,int km); -void unmap_extent_buffer (struct extent_buffer *eb,char *token,int km); +unsigned long *map_len); +void unmap_extent_buffer (struct extent_buffer *eb,char *token);int release_extent_buffer_tail_pages (struct extent_buffer *eb);int extent_range_uptodate (struct extent_io_tree *tree,u64 start,u64 end);
fs/btrfs/ctree.c +14 -28
126 lines not on this page · raw message
drivers/net/e1000e/netdev.c +2 -4
@@ -1360,12 +1360,10 @@ static bool e1000_clean_jumbo_rx_irq(strif (length <= copybreak &&skb_tailroom (skb) >= length) {u8 *vaddr; - vaddr =kmap_atomic (buffer_info->page, -KM_SKB_DATA_SOFTIRQ ); + vaddr =kmap_atomic (buffer_info->page);memcpy (skb_tail_pointer (skb), vaddr, length); -kunmap_atomic (vaddr, -KM_SKB_DATA_SOFTIRQ ); +kunmap_atomic (vaddr);/* re-use the page, so don't erase * buffer_info->page */ skb_put (skb, length);
drivers/scsi/cxgb3i/cxgb3i_pdu.c +1 -2
@@ -320,8 +320,7 @@ int cxgb3i_conn_init_pdu(struct iscsi_ta/* data fits in the skb's headroom */ for (i =0 ; i < tdata->nr_frags; i++, frag++) { -char *src =kmap_atomic (frag->page, -KM_SOFTIRQ0 ); +char *src =kmap_atomic (frag->page);memcpy (dst, src+frag->page_offset, frag->size); dst += frag->size;
fs/aio.c +4 -4
@@ -192,19 +192,19 @@ static int aio_setup_ring(struct kioctx#define AIO_EVENTS_FIRST_PAGE ((PAGE_SIZE - sizeof(struct aio_ring)) / sizeof(struct io_event))#define AIO_EVENTS_OFFSET (AIO_EVENTS_PER_PAGE - AIO_EVENTS_FIRST_PAGE) -#define aio_ring_event (info, nr, km) ({ \ +#define aio_ring_event (info, nr) ({ \ unsigned pos = (nr) + AIO_EVENTS_OFFSET; \ struct io_event *__event; \ __event = kmap_atomic( \ - (info)->ring_pages[pos / AIO_EVENTS_PER_PAGE], km); \ + (info)->ring_pages[pos / AIO_EVENTS_PER_PAGE]); \ __event += pos % AIO_EVENTS_PER_PAGE; \ __event; \ }) -#define put_aio_ring_event (event, km) do { \ +#define put_aio_ring_event (event) do { \ struct io_event *__event = (event); \ (void)__event; \ - kunmap_atomic((void *)((unsigned long)__event & PAGE_MASK), km); \ + kunmap_atomic((void *)((unsigned long)__event & PAGE_MASK)); \ } while(0)static void ctx_rcu_free (struct rcu_head *head)
lib/swiotlb.c +1 -2
@@ -343,8 +343,7 @@ void swiotlb_bounce(phys_addr_t phys, ch sz =min_t (size_t,PAGE_SIZE - offset, size);local_irq_save (flags); - buffer =kmap_atomic (pfn_to_page (pfn), -KM_BOUNCE_READ ); + buffer =kmap_atomic (pfn_to_page (pfn));if (dir ==DMA_TO_DEVICE )memcpy (dma_addr, buffer + offset, sz);else
net/rds/rds.h +1 -1
@@ -617,7 +617,7 @@ void rds_inc_init(struct rds_incoming *ivoid rds_inc_addref (struct rds_incoming *inc);void rds_inc_put (struct rds_incoming *inc);void rds_recv_incoming (struct rds_connection *conn,__be32 saddr,__be32 daddr, -struct rds_incoming *inc,gfp_t gfp,enum km_type km); +struct rds_incoming *inc,gfp_t gfp);int rds_recvmsg (struct kiocb *iocb,struct socket *sock,struct msghdr *msg,size_t size,int msg_flags);void rds_clear_recv_queue (struct rds_sock *rs);
net/rds/recv.c +1 -1
@@ -156,7 +156,7 @@ static void rds_recv_incoming_exthdrs(st* tell us which roles the addrs in the conn are playing for this message. */ void rds_recv_incoming (struct rds_connection *conn,__be32 saddr,__be32 daddr, -struct rds_incoming *inc,gfp_t gfp,enum km_type km) +struct rds_incoming *inc,gfp_t gfp) {struct rds_sock *rs =NULL ;struct sock *sk;
drivers/scsi/fcoe/fcoe.c +1 -2
@@ -1456,8 +1456,7 @@ u32 fcoe_fc_crc(struct fc_frame *fp) len = frag->size;while (len >0 ) { clen =min (len,PAGE_SIZE - (off & ~PAGE_MASK )); - data =kmap_atomic (frag->page + (off >>PAGE_SHIFT ), -KM_SKB_DATA_SOFTIRQ ); + data =kmap_atomic (frag->page + (off >>PAGE_SHIFT )); crc =crc32 (crc, data + (off & ~PAGE_MASK ), clen);kunmap_atomic (data); off += clen;
drivers/scsi/libfc/fc_libfc.c +3 -5
@@ -89,8 +89,7 @@ module_exit(libfc_exit);*/ u32 fc_copy_buffer_to_sglist (void *buf,size_t len,struct scatterlist *sg, -u32 *nents,size_t *offset, -enum km_type km_type,u32 *crc) +u32 *nents,size_t *offset,u32 *crc) {size_t remaining = len;u32 copy_len =0 ;
@@ -120,12 +119,11 @@ u32 fc_copy_buffer_to_sglist(void *buf, off = *offset + sg->offset; sg_bytes =min (sg_bytes, (size_t )(PAGE_SIZE - (off & ~PAGE_MASK ))); - page_addr =kmap_atomic (sg_page (sg) + (off >>PAGE_SHIFT ), - km_type); + page_addr =kmap_atomic (sg_page (sg) + (off >>PAGE_SHIFT ));if (crc) *crc =crc32 (*crc, buf, sg_bytes);memcpy ((char *)page_addr + (off & ~PAGE_MASK ), buf, sg_bytes); -kunmap_atomic (page_addr, km_type); +kunmap_atomic (page_addr); buf += sg_bytes; *offset += sg_bytes; remaining -= sg_bytes;
drivers/scsi/libfc/fc_libfc.h +1 -2
@@ -106,7 +106,6 @@ const char *fc_els_resp_type(struct fc_f*/ u32 fc_copy_buffer_to_sglist (void *buf,size_t len,struct scatterlist *sg, -u32 *nents,size_t *offset, -enum km_type km_type,u32 *crc); +u32 *nents,size_t *offset,u32 *crc);#endif /* _FC_LIBFC_H_ */
net/rds/ib_recv.c +1 -2
@@ -795,8 +795,7 @@ static void rds_ib_process_recv(struct rrds_ib_cong_recv (conn, ibinc); else {rds_recv_incoming (conn, conn->c_faddr, conn->c_laddr, - &ibinc->ii_inc,GFP_ATOMIC , -KM_SOFTIRQ0 ); + &ibinc->ii_inc,GFP_ATOMIC ); state->ack_next =be64_to_cpu (hdr->h_sequence); state->ack_next_valid =1 ; }
net/rds/iw_recv.c +1 -2
@@ -754,8 +754,7 @@ static void rds_iw_process_recv(struct rrds_iw_cong_recv (conn, iwinc); else {rds_recv_incoming (conn, conn->c_faddr, conn->c_laddr, - &iwinc->ii_inc,GFP_ATOMIC , -KM_SOFTIRQ0 ); + &iwinc->ii_inc,GFP_ATOMIC ); state->ack_next =be64_to_cpu (hdr->h_sequence); state->ack_next_valid =1 ; }
net/rds/tcp_recv.c +2 -4
@@ -169,7 +169,6 @@ static void rds_tcp_cong_recv(struct rdsstruct rds_tcp_desc_arg {struct rds_connection *conn;gfp_t gfp; -enum km_type km; }; static int rds_tcp_data_recv(read_descriptor_t *desc, struct sk_buff *skb,
@@ -255,7 +254,7 @@ static int rds_tcp_data_recv(read_descrielse rds_recv_incoming (conn, conn->c_faddr, conn->c_laddr, &tinc->ti_inc, - arg->gfp, arg->km); + arg->gfp); tc->t_tinc_hdr_rem =sizeof (struct rds_header ); tc->t_tinc_data_rem =0 ;
@@ -272,7 +271,7 @@ out: }/* the caller has to hold the sock lock */ -int rds_tcp_read_sock (struct rds_connection *conn,gfp_t gfp,enum km_type km) +int rds_tcp_read_sock (struct rds_connection *conn,gfp_t gfp) {struct rds_tcp_connection *tc = conn->c_transport_data;struct socket *sock = tc->t_sock;
@@ -282,7 +281,6 @@ int rds_tcp_read_sock(struct rds_connect/* It's like glib in the kernel! */ arg.conn = conn; arg.gfp = gfp; - arg.km = km; desc.arg.data = &arg; desc.error =0 ; desc.count =1 ;/* give more than one skb per call */
arch/x86/mm/highmem_32.c +4 -3
@@ -31,6 +31,7 @@ void *kmap_atomic_prot(struct page *page {enum fixed_addresses idx;unsigned long vaddr; +int type;/* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ pagefault_disable ();
@@ -49,16 +50,16 @@ void *kmap_atomic_prot(struct page *pagevoid *kmap_atomic (struct page *page) { -return kmap_atomic_prot (page, type, kmap_prot); +return kmap_atomic_prot (page, kmap_prot); }void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; -enum fixed_addresses idx;if (vaddr >=__fix_to_virt (FIX_KMAP_END ) && vaddr <=__fix_to_virt (FIX_KMAP_BEGIN )) { +unsigned int idx, type; type =kmap_atomic_idx_pop (); idx = type +KM_TYPE_NR *smp_processor_id ();
@@ -91,7 +92,7 @@ void kunmap_atomic_notypecheck(void *kva*/ void *kmap_atomic_pfn (unsigned long pfn) { -return kmap_atomic_prot_pfn (pfn, type, kmap_prot); +return kmap_atomic_prot_pfn (pfn, kmap_prot); }EXPORT_SYMBOL_GPL (kmap_atomic_pfn);/* temporarily in use by i915 GEM until vmap */
drivers/block/drbd/drbd_bitmap.c +12 -12
@@ -85,7 +85,7 @@ struct drbd_bitmap {#define BM_P_VMALLOCED 2static int __bm_change_bits_to (struct drbd_conf *mdev,const unsigned long s, -unsigned long e,int val,const enum km_type km); +unsigned long e,int val);static int bm_is_locked (struct drbd_bitmap *b) {
@@ -155,7 +155,7 @@ void drbd_bm_unlock(struct drbd_conf *md }/* word offset to long pointer */ -static unsigned long *__bm_map_paddr (struct drbd_bitmap *b,unsigned long offset,const enum km_type km) +static unsigned long *__bm_map_paddr (struct drbd_bitmap *b,unsigned long offset) {struct page *page;unsigned long page_nr;
@@ -165,7 +165,7 @@ static unsigned long *__bm_map_paddr(strBUG_ON (page_nr >= b->bm_number_of_pages); page = b->bm_pages[page_nr]; -return (unsigned long *)kmap_atomic (page, km); +return (unsigned long *)kmap_atomic (page); }static unsigned long *bm_map_paddr (struct drbd_bitmap *b,unsigned long offset)
@@ -173,9 +173,9 @@ static unsigned long * bm_map_paddr(strureturn __bm_map_paddr (b, offset); } -static void __bm_unmap (unsigned long *p_addr,const enum km_type km) +static void __bm_unmap (unsigned long *p_addr) { -kunmap_atomic (p_addr, km); +kunmap_atomic (p_addr); };static void bm_unmap (unsigned long *p_addr)
@@ -934,7 +934,7 @@ int drbd_bm_write_sect(struct drbd_conf*/ #define BPP_MASK ((1UL << (PAGE_SHIFT+3)) - 1)static unsigned long __bm_find_next (struct drbd_conf *mdev,unsigned long bm_fo, -const int find_zero_bit,const enum km_type km) +const int find_zero_bit) {struct drbd_bitmap *b = mdev->bitmap;unsigned long i =-1UL ;
@@ -948,14 +948,14 @@ static unsigned long __bm_find_next(struunsigned long offset; bit_offset = bm_fo & ~BPP_MASK ;/* bit offset of the page */ offset = bit_offset >>LN2_BPL ;/* word offset of the page */ - p_addr =__bm_map_paddr (b, offset, km); + p_addr =__bm_map_paddr (b, offset);if (find_zero_bit) i =find_next_zero_bit (p_addr,PAGE_SIZE *8 , bm_fo &BPP_MASK );else i =find_next_bit (p_addr,PAGE_SIZE *8 , bm_fo &BPP_MASK ); -__bm_unmap (p_addr, km); +__bm_unmap (p_addr);if (i <PAGE_SIZE *8 ) { i = bit_offset + i;if (i >= b->bm_bits)
@@ -1023,7 +1023,7 @@ unsigned long _drbd_bm_find_next_zero(st* expected to be called for only a few bits (e - s about BITS_PER_LONG). * Must hold bitmap lock already. */ static int __bm_change_bits_to (struct drbd_conf *mdev,const unsigned long s, -unsigned long e,int val,const enum km_type km) +unsigned long e,int val) {struct drbd_bitmap *b = mdev->bitmap;unsigned long *p_addr =NULL ;
@@ -1041,8 +1041,8 @@ static int __bm_change_bits_to(struct drunsigned long page_nr = offset >> (PAGE_SHIFT -LN2_BPL +3 );if (page_nr != last_page_nr) {if (p_addr) -__bm_unmap (p_addr, km); - p_addr =__bm_map_paddr (b, offset, km); +__bm_unmap (p_addr); + p_addr =__bm_map_paddr (b, offset); last_page_nr = page_nr; }if (val)
@@ -1051,7 +1051,7 @@ static int __bm_change_bits_to(struct dr c -= (0 !=__test_and_clear_bit (bitnr &BPP_MASK , p_addr)); }if (p_addr) -__bm_unmap (p_addr, km); +__bm_unmap (p_addr); b->bm_set += c;return c; }
include/linux/io-mapping.h +5 -6
@@ -81,8 +81,7 @@ io_mapping_free(struct io_mapping *mappi/* Atomic map/unmap */ static inline void *io_mapping_map_atomic_wc (struct io_mapping *mapping, -unsigned long offset, -int slot) +unsigned long offset) {resource_size_t phys_addr;unsigned long pfn;
@@ -90,13 +89,13 @@ io_mapping_map_atomic_wc(struct io_mappiBUG_ON (offset >= mapping->size); phys_addr = mapping->base + offset; pfn = (unsigned long ) (phys_addr >>PAGE_SHIFT ); -return iomap_atomic_prot_pfn (pfn, slot, mapping->prot); +return iomap_atomic_prot_pfn (pfn, mapping->prot); }static inline void -io_mapping_unmap_atomic (void *vaddr,int slot) +io_mapping_unmap_atomic (void *vaddr) { -iounmap_atomic (vaddr, slot); +iounmap_atomic (vaddr); } static inline void *
@@ -144,7 +143,7 @@ io_mapping_map_atomic_wc(struct io_mappi }static inline void -io_mapping_unmap_atomic (void *vaddr,int slot) +io_mapping_unmap_atomic (void *vaddr) { }
drivers/gpu/drm/i915/i915_gem.c +1 -2
@@ -3487,8 +3487,7 @@ i915_gem_object_pin_and_relocate(struct reloc_offset = obj_priv->gtt_offset + reloc->offset; reloc_page =io_mapping_map_atomic_wc (dev_priv->mm.gtt_mapping, (reloc_offset & - ~(PAGE_SIZE -1 )), -KM_USER0 ); + ~(PAGE_SIZE -1 ))); reloc_entry = (uint32_t __iomem *)(reloc_page + (reloc_offset & (PAGE_SIZE -1 ))); reloc_val = target_obj_priv->gtt_offset + reloc->delta;
arch/arm/lib/uaccess_with_memcpy.c +1 -0
@@ -17,6 +17,7 @@#include <linux/sched.h> #include <linux/hardirq.h> /* for in_atomic() */ #include <linux/gfp.h> +#include <linux/highmem.h> #include <asm/current.h> #include <asm/page.h>
drivers/gpu/drm/i915/intel_overlay.c +1 -2
@@ -185,8 +185,7 @@ static struct overlay_registers *intel_oif (OVERLAY_NONPHYSICAL (overlay->dev)) { regs =io_mapping_map_atomic_wc (dev_priv->mm.gtt_mapping, - overlay->reg_bo->gtt_offset, -KM_USER0 ); + overlay->reg_bo->gtt_offset);if (!regs) {DRM_ERROR ("failed to map overlay regs in GTT\n" );
arch/arm/include/asm/pgtable.h +4 -4
@@ -269,11 +269,11 @@ extern struct page *empty_zero_page;#define pte_unmap_nested (pte) __pte_unmap(pte)#ifndef CONFIG_HIGHPTE -#define __pte_map (dir,km) pmd_page_vaddr(*(dir)) -#define __pte_unmap (pte,km) do { } while (0) +#define __pte_map (dir) pmd_page_vaddr(*(dir)) +#define __pte_unmap (pte) do { } while (0)#else -#define __pte_map (dir,km) ((pte_t *)kmap_atomic(pmd_page(*(dir)), km) + PTRS_PER_PTE) -#define __pte_unmap (pte,km) kunmap_atomic((pte - PTRS_PER_PTE), km) +#define __pte_map (dir) ((pte_t *)kmap_atomic(pmd_page(*(dir))) + PTRS_PER_PTE) +#define __pte_unmap (pte) kunmap_atomic((pte - PTRS_PER_PTE))#endif #define set_pte_ext (ptep,pte,ext) cpu_set_pte_ext(ptep,pte,ext)
arch/powerpc/include/asm/highmem.h +1 -1
@@ -82,7 +82,7 @@ static inline void kunmap(struct page *pstatic inline void *kmap_atomic (struct page *page) { -return kmap_atomic_prot (page, type, kmap_prot); +return kmap_atomic_prot (page, kmap_prot); }static inline struct page *kmap_atomic_to_page (void *ptr)
arch/powerpc/mm/highmem.c +2 -1
@@ -31,7 +31,7 @@*/ void *kmap_atomic_prot (struct page *page,pgprot_t prot) { -unsigned int idx; +unsigned int idx, type;unsigned long vaddr;/* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */
@@ -55,6 +55,7 @@ EXPORT_SYMBOL(kmap_atomic_prot);void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; +unsigned int type;if (vaddr <__fix_to_virt (FIX_KMAP_END )) {pagefault_enable ();
arch/sparc/mm/highmem.c +2 -1
@@ -31,7 +31,7 @@void *kmap_atomic (struct page *page) { -unsigned long idx; +unsigned long idx, type;unsigned long vaddr;/* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */
@@ -68,6 +68,7 @@ EXPORT_SYMBOL(kmap_atomic);void kunmap_atomic_notypecheck (void *kvaddr) {unsigned long vaddr = (unsigned long ) kvaddr &PAGE_MASK ; +unsigned long type;if (vaddr <FIXADDR_START ) {// FIXME pagefault_enable ();
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [RFC][PATCH 5/6] mm: Fix up KM_type argument removal fallout
Quoted 5 lines · Peter Zijlstra
Manual fixups of the previous patch
(i386 all{mod,yes}config driven}
Signed-off-by Peter Zijlstra<[email protected]>
Signature · 7 lines
All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
RFC PATCH 6/6 mm: Remove pte_*map_nested()
In reply to Peter ZijlstraSince we no longer need to provide KM_type, the whole pte_*map_nested() API is now redundant, remove it.
--- arch/alpha/include/asm/pgtable.h | 2 -- arch/arm/include/asm/pgtable.h | 2 -- arch/arm/mm/fault-armv.c | 4 ++-- arch/arm/mm/pgd.c | 4 ++-- arch/avr32/include/asm/pgtable.h | 2 -- arch/cris/include/asm/pgtable.h | 2 -- arch/frv/include/asm/pgtable.h | 5 ----- arch/ia64/include/asm/pgtable.h | 2 -- arch/m32r/include/asm/pgtable.h | 2 -- arch/m68k/include/asm/motorola_pgtable.h | 2 -- arch/m68k/include/asm/sun3_pgtable.h | 2 -- arch/microblaze/include/asm/pgtable.h | 3 --- arch/mips/include/asm/pgtable-32.h | 3 --- arch/mips/include/asm/pgtable-64.h | 3 --- arch/mn10300/include/asm/pgtable.h | 2 -- arch/parisc/include/asm/pgtable.h | 2 -- arch/powerpc/include/asm/pgtable-ppc32.h | 4 ---- arch/powerpc/include/asm/pgtable-ppc64.h | 2 -- arch/s390/include/asm/pgtable.h | 2 -- arch/score/include/asm/pgtable.h | 3 --- arch/sh/include/asm/pgtable_32.h | 3 --- arch/sh/include/asm/pgtable_64.h | 2 -- arch/sparc/include/asm/pgtable_32.h | 3 --- arch/sparc/include/asm/pgtable_64.h | 2 -- arch/um/include/asm/pgtable.h | 2 -- arch/x86/include/asm/pgtable_32.h | 6 ------ arch/x86/include/asm/pgtable_64.h | 2 -- arch/xtensa/include/asm/pgtable.h | 3 --- mm/memory.c | 4 ++-- mm/mremap.c | 4 ++-- 30 files changed, 8 insertions(+), 76 deletions(-)
arch/alpha/include/asm/pgtable.h +0 -2
@@ -318,9 +318,7 @@ extern inline pte_t * pte_offset_kernel( }#define pte_offset_map (dir,addr) pte_offset_kernel((dir),(addr)) -#define pte_offset_map_nested (dir,addr) pte_offset_kernel((dir),(addr))#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)extern pgd_t swapper_pg_dir[1024 ];
arch/arm/include/asm/pgtable.h +0 -2
@@ -264,9 +264,7 @@ extern struct page *empty_zero_page;#define pte_offset_kernel (dir,addr) (pmd_page_vaddr(*(dir)) + __pte_index(addr))#define pte_offset_map (dir,addr) (__pte_map(dir) + __pte_index(addr)) -#define pte_offset_map_nested (dir,addr) (__pte_map(dir) + __pte_index(addr))#define pte_unmap (pte) __pte_unmap(pte) -#define pte_unmap_nested (pte) __pte_unmap(pte)#ifndef CONFIG_HIGHPTE #define __pte_map (dir) pmd_page_vaddr(*(dir))
arch/arm/mm/fault-armv.c +2 -2
@@ -88,13 +88,13 @@ static int adjust_pte(struct vm_area_str* open-code the spin-locking. */ ptl =pte_lockptr (vma->vm_mm, pmd); - pte =pte_offset_map_nested (pmd, address); + pte =pte_offset_map (pmd, address);spin_lock (ptl); ret =do_adjust_pte (vma, address, pfn, pte);spin_unlock (ptl); -pte_unmap_nested (pte); +pte_unmap (pte);return ret; }
arch/arm/mm/pgd.c +2 -2
@@ -57,9 +57,9 @@ pgd_t *get_pgd_slow(struct mm_struct *mm goto no_pte; init_pmd =pmd_offset (init_pgd,0 ); - init_pte =pte_offset_map_nested (init_pmd,0 ); + init_pte =pte_offset_map (init_pmd,0 );set_pte_ext (new_pte, *init_pte,0 ); -pte_unmap_nested (init_pte); +pte_unmap (init_pte);pte_unmap (new_pte); }
arch/avr32/include/asm/pgtable.h +0 -2
@@ -319,9 +319,7 @@ static inline pte_t pte_modify(pte_t pte#define pte_offset_kernel (dir, address) \ ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(address))#define pte_offset_map (dir, address) pte_offset_kernel(dir, address) -#define pte_offset_map_nested (dir, address) pte_offset_kernel(dir, address)#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)struct vm_area_struct ; extern void update_mmu_cache(struct vm_area_struct * vma,
arch/cris/include/asm/pgtable.h +0 -2
@@ -248,10 +248,8 @@ static inline pgd_t * pgd_offset(const s ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address))#define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) -#define pte_offset_map_nested (dir, address) pte_offset_map(dir, address)#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)#define pte_pfn (x) ((unsigned long)(__va((x).pte)) >> PAGE_SHIFT)#define pfn_pte (pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
arch/frv/include/asm/pgtable.h +0 -5
@@ -452,16 +452,11 @@ static inline pte_t pte_modify(pte_t pte#if defined(CONFIG_HIGHPTE )#define pte_offset_map (dir, address) \ ((pte_t *)kmap_atomic(pmd_page(*(dir))) + pte_index(address)) -#define pte_offset_map_nested (dir, address) \ - ((pte_t *)kmap_atomic(pmd_page(*(dir))) + pte_index(address))#define pte_unmap (pte) kunmap_atomic(pte) -#define pte_unmap_nested (pte) kunmap_atomic((pte))#else #define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + pte_index(address)) -#define pte_offset_map_nested (dir, address) pte_offset_map((dir), (address))#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)#endif /*
arch/ia64/include/asm/pgtable.h +0 -2
@@ -406,9 +406,7 @@ pgd_offset (const struct mm_struct *mm,#define pte_index (addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))#define pte_offset_kernel (dir,addr) ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(addr))#define pte_offset_map (dir,addr) pte_offset_kernel(dir, addr) -#define pte_offset_map_nested (dir,addr) pte_offset_map(dir, addr)#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)/* atomic versions of the some PTE manipulations: */
arch/m32r/include/asm/pgtable.h +0 -2
@@ -332,9 +332,7 @@ static inline void pmd_set(pmd_t * pmdp, ((pte_t *)pmd_page_vaddr(*(dir)) + pte_index(address))#define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + pte_index(address)) -#define pte_offset_map_nested (dir, address) pte_offset_map(dir, address)#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)/* Encode and de-code a swap entry */ #define __swp_type (x) (((x).val >> 2) & 0x1f)
arch/m68k/include/asm/motorola_pgtable.h +0 -2
@@ -221,9 +221,7 @@ static inline pte_t *pte_offset_kernel(p }#define pte_offset_map (pmdp,address) ((pte_t *)__pmd_page(*pmdp) + (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) -#define pte_offset_map_nested (pmdp, address) pte_offset_map(pmdp, address)#define pte_unmap (pte) ((void)0) -#define pte_unmap_nested (pte) ((void)0)/* * Allocate and free page tables. The xxx_kernel() versions are
arch/m68k/include/asm/sun3_pgtable.h +0 -2
@@ -219,9 +219,7 @@ static inline pte_t pgoff_to_pte(unsigne#define pte_offset_kernel (pmd, address) ((pte_t *) __pmd_page(*pmd) + pte_index(address))/* FIXME: should we bother with kmap() here? */ #define pte_offset_map (pmd, address) ((pte_t *)kmap(pmd_page(*pmd)) + pte_index(address)) -#define pte_offset_map_nested (pmd, address) pte_offset_map(pmd, address)#define pte_unmap (pte) kunmap(pte) -#define pte_unmap_nested (pte) kunmap(pte)/* Macros to (de)construct the fake PTEs representing swap pages. */ #define __swp_type (x) ((x).val & 0x7F)
arch/microblaze/include/asm/pgtable.h +0 -3
@@ -498,11 +498,8 @@ static inline pmd_t *pmd_offset(pgd_t *d ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(addr))#define pte_offset_map (dir, addr) \ ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr)) -#define pte_offset_map_nested (dir, addr) \ - ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr))#define pte_unmap (pte) kunmap_atomic(pte) -#define pte_unmap_nested (pte) kunmap_atomic(pte)/* Encode and decode a nonlinear file mapping entry */ #define PTE_FILE_MAX_BITS 29
arch/mips/include/asm/pgtable-32.h +0 -3
@@ -154,10 +154,7 @@ pfn_pte(unsigned long pfn, pgprot_t prot#define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) -#define pte_offset_map_nested (dir, address) \ - ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address))#define pte_unmap (pte) ((void)(pte)) -#define pte_unmap_nested (pte) ((void)(pte))#if defined(CONFIG_CPU_R3000 ) || defined(CONFIG_CPU_TX39XX )
arch/mips/include/asm/pgtable-64.h +0 -3
@@ -257,10 +257,7 @@ static inline pmd_t *pmd_offset(pud_t * ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address))#define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) -#define pte_offset_map_nested (dir, address) \ - ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address))#define pte_unmap (pte) ((void)(pte)) -#define pte_unmap_nested (pte) ((void)(pte))/* * Initialize a new pgd / pmd table with invalid pointers.
arch/mn10300/include/asm/pgtable.h +0 -2
@@ -457,9 +457,7 @@ static inline int set_kernel_exec(unsign#define pte_offset_map (dir, address) \ ((pte_t *) page_address(pmd_page(*(dir))) + pte_index(address)) -#define pte_offset_map_nested (dir, address) pte_offset_map(dir, address)#define pte_unmap (pte) do {} while (0) -#define pte_unmap_nested (pte) do {} while (0)/* * The MN10300 has external MMU info in the form of a TLB: this is adapted from
arch/parisc/include/asm/pgtable.h +0 -2
@@ -397,9 +397,7 @@ static inline pte_t pte_modify(pte_t pte#define pte_offset_kernel (pmd, address) \ ((pte_t *) pmd_page_vaddr(*(pmd)) + pte_index(address))#define pte_offset_map (pmd, address) pte_offset_kernel(pmd, address) -#define pte_offset_map_nested (pmd, address) pte_offset_kernel(pmd, address)#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)#define pte_unmap (pte) do { } while (0)#define pte_unmap_nested (pte) do { } while (0)
arch/powerpc/include/asm/pgtable-ppc32.h +0 -4
@@ -309,11 +309,7 @@ static inline void __ptep_set_access_fla ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(addr))#define pte_offset_map (dir, addr) \ ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr)) -#define pte_offset_map_nested (dir, addr) \ - ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr)) -#define pte_unmap (pte) kunmap_atomic(pte) -#define pte_unmap_nested (pte) kunmap_atomic(pte)/* * Encode and decode a swap entry.
arch/powerpc/include/asm/pgtable-ppc64.h +0 -2
@@ -193,9 +193,7 @@ (((pte_t *) pmd_page_vaddr(*(dir))) + (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)))#define pte_offset_map (dir,addr) pte_offset_kernel((dir), (addr)) -#define pte_offset_map_nested (dir,addr) pte_offset_kernel((dir), (addr))#define pte_unmap (pte) do { } while(0) -#define pte_unmap_nested (pte) do { } while(0)/* to find an entry in a kernel page-table-directory */ /* This now only contains the vmalloc pages */
arch/s390/include/asm/pgtable.h +0 -2
@@ -1046,9 +1046,7 @@ static inline pmd_t *pmd_offset(pud_t *p#define pte_offset (pmd, addr) ((pte_t *) pmd_deref(*(pmd)) + pte_index(addr))#define pte_offset_kernel (pmd, address) pte_offset(pmd,address)#define pte_offset_map (pmd, address) pte_offset_kernel(pmd, address) -#define pte_offset_map_nested (pmd, address) pte_offset_kernel(pmd, address)#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)/* * 31 bit swap entry format:
arch/score/include/asm/pgtable.h +0 -3
@@ -88,10 +88,7 @@ static inline void pmd_clear(pmd_t *pmdp#define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) -#define pte_offset_map_nested (dir, address) \ - ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address))#define pte_unmap (pte) ((void)(pte)) -#define pte_unmap_nested (pte) ((void)(pte))/* * Bits 9(_PAGE_PRESENT) and 10(_PAGE_FILE)are taken,
arch/sh/include/asm/pgtable_32.h +0 -3
@@ -429,10 +429,7 @@ static inline pte_t pte_modify(pte_t pte#define pte_offset_kernel (dir, address) \ ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(address))#define pte_offset_map (dir, address) pte_offset_kernel(dir, address) -#define pte_offset_map_nested (dir, address) pte_offset_kernel(dir, address) -#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)#ifdef CONFIG_X2TLB #define pte_ERROR (e) \
arch/sh/include/asm/pgtable_64.h +0 -2
@@ -84,9 +84,7 @@ static __inline__ void set_pte(pte_t *pt ((pte_t *) ((pmd_val(*(dir))) & PAGE_MASK) + pte_index((addr)))#define pte_offset_map (dir,addr) pte_offset_kernel(dir, addr) -#define pte_offset_map_nested (dir,addr) pte_offset_kernel(dir, addr)#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)#ifndef __ASSEMBLY__#define IOBASE_VADDR 0xff000000
arch/sparc/include/asm/pgtable_32.h +0 -3
@@ -304,10 +304,7 @@ BTFIXUPDEF_CALL(pte_t *, pte_offset_kern* and sun4c is guaranteed to have no highmem anyway. */ #define pte_offset_map (d, a) pte_offset_kernel(d,a) -#define pte_offset_map_nested (d, a) pte_offset_kernel(d,a) -#define pte_unmap (pte) do{}while(0) -#define pte_unmap_nested (pte) do{}while(0)/* Certain architectures need to do special things when pte's * within a page table are directly modified. Thus, the following
arch/sparc/include/asm/pgtable_64.h +0 -2
@@ -652,9 +652,7 @@ static inline int pte_special(pte_t pte) ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)))#define pte_offset_kernel pte_index#define pte_offset_map pte_index -#define pte_offset_map_nested pte_index#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)/* Actual page table PTE updates. */ extern void tlb_batch_add (struct mm_struct *mm,unsigned long vaddr,pte_t *ptep,pte_t orig);
arch/um/include/asm/pgtable.h +0 -2
@@ -338,9 +338,7 @@ static inline pte_t pte_modify(pte_t pte ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(address))#define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + pte_index(address)) -#define pte_offset_map_nested (dir, address) pte_offset_map(dir, address)#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)struct mm_struct ;extern pte_t *virt_to_pte (struct mm_struct *mm,unsigned long addr);
arch/x86/include/asm/pgtable_32.h +0 -6
@@ -52,17 +52,11 @@ extern void set_pmd_pfn(unsigned long, u#define pte_offset_map (dir, address) \ ((pte_t *)kmap_atomic(pmd_page(*(dir))) + \ pte_index((address))) -#define pte_offset_map_nested (dir, address) \ - ((pte_t *)kmap_atomic(pmd_page(*(dir))) + \ - pte_index((address)))#define pte_unmap (pte) kunmap_atomic((pte)) -#define pte_unmap_nested (pte) kunmap_atomic((pte))#else #define pte_offset_map (dir, address) \ ((pte_t *)page_address(pmd_page(*(dir))) + pte_index((address))) -#define pte_offset_map_nested (dir, address) pte_offset_map((dir), (address))#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)#endif /* Clear a kernel PTE and flush it from the TLB */
arch/x86/include/asm/pgtable_64.h +0 -2
@@ -125,9 +125,7 @@ static inline int pgd_large(pgd_t pgd) {/* x86-64 always has all page tables mapped. */ #define pte_offset_map (dir, address) pte_offset_kernel((dir), (address)) -#define pte_offset_map_nested (dir, address) pte_offset_kernel((dir), (address))#define pte_unmap (pte) ((void)(pte))/* NOP */ -#define pte_unmap_nested (pte) ((void)(pte))/* NOP */ #define update_mmu_cache (vma, address, ptep) do { } while (0)
arch/xtensa/include/asm/pgtable.h +0 -3
@@ -324,10 +324,7 @@ ptep_set_wrprotect(struct mm_struct *mm,#define pte_offset_kernel (dir,addr) \ ((pte_t*) pmd_page_vaddr(*(dir)) + pte_index(addr))#define pte_offset_map (dir,addr) pte_offset_kernel((dir),(addr)) -#define pte_offset_map_nested (dir,addr) pte_offset_kernel((dir),(addr)) -#define pte_unmap (pte) do { } while (0) -#define pte_unmap_nested (pte) do { } while (0)/*
mm/memory.c +2 -2
@@ -736,7 +736,7 @@ again: dst_pte =pte_alloc_map_lock (dst_mm, dst_pmd, addr, &dst_ptl);if (!dst_pte)return -ENOMEM ; - src_pte =pte_offset_map_nested (src_pmd, addr); + src_pte =pte_offset_map (src_pmd, addr); src_ptl =pte_lockptr (src_mm, src_pmd);spin_lock_nested (src_ptl,SINGLE_DEPTH_NESTING ); orig_src_pte = src_pte;
@@ -767,7 +767,7 @@ again:arch_leave_lazy_mmu_mode ();spin_unlock (src_ptl); -pte_unmap_nested (orig_src_pte); +pte_unmap (orig_src_pte);add_mm_rss_vec (dst_mm, rss);pte_unmap_unlock (orig_dst_pte, dst_ptl);cond_resched ();
mm/mremap.c +2 -2
@@ -101,7 +101,7 @@ static void move_ptes(struct vm_area_str* pte locks because exclusive mmap_sem prevents deadlock. */ old_pte =pte_offset_map_lock (mm, old_pmd, old_addr, &old_ptl); - new_pte =pte_offset_map_nested (new_pmd, new_addr); + new_pte =pte_offset_map (new_pmd, new_addr); new_ptl =pte_lockptr (mm, new_pmd);if (new_ptl != old_ptl)spin_lock_nested (new_ptl,SINGLE_DEPTH_NESTING );
@@ -119,7 +119,7 @@ static void move_ptes(struct vm_area_strarch_leave_lazy_mmu_mode ();if (new_ptl != old_ptl)spin_unlock (new_ptl); -pte_unmap_nested (new_pte -1 ); +pte_unmap (new_pte -1 );pte_unmap_unlock (old_pte -1 , old_ptl);if (mapping)spin_unlock (&mapping->i_mmap_lock);
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [RFC][PATCH 6/6] mm: Remove pte_*map_nested()
Quoted 4 lines · Peter Zijlstra
Since we no longer need to provide
KM_type, the whole pte_*map_nested() API is now redundant, remove it.Signed-off-by Peter Zijlstra<[email protected]>
Signature · 7 lines
All rights reversed -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Andrew Morton
maintainerQuoted 8 lines · On Thu, 19 Aug 2010 22:13:17 +0200 Peter Zijlstra <[email protected]>…
This patch-set reworks the
kmap_atomicAPI to be a stack based, instead of static slot based. Some might remember this from last year, some not ;-)The advantage is that you no longer need to worry about
KM_foo, the disadvantage is that kmap_atomic/kunmap_atomic now needs to be strictly nested (CONFIG_HIGHMEM_DEBUGshould complain in case its not) -- and of course its a big massive patch changing a widely used API.
Nice. That fixes the "use of irq-only slots from interrupts-on context" bugs which people keep adding.
We don't have any checks in there for the stack overflowing?
Did you add every runtime check you could possibly think of? kmap_atomic_idx_push() and pop() don't have much in there. It'd be good to lard it up with runtime checks for at least a few weeks.
Quoted 10 lines
The patch-set is currently based on tip/master as of today, and compile tested on: i386-all{mod,yes}config, mips-yosemite_defconfig, sparc-sparc32_defconfig, powerpc-ppc6xx_defconfig, and some arm config.
(Sorry dhowells, I again couldn't find frv/mn10300 compilers)
Boot tested with i386-defconfig on kvm.
Since its a rather large set, and somewhat tedious to rebase, I wanted to ask how to go about getting this merged?
Well, there's that monster conversion patch. How's about you temporarily do
#define kmap_atomic(x, arg...) __kmap_atomic(x)
so for a while, both kmap_atomic(a, KM_foo) and kmap_atomic(a) are turned into __kmap_atomic(a). Once all the dust has settled, pull that out again?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Peter Zijlstra
maintainerQuoted 7 lines · Andrew Morton
Quoted 4 lines · On Thu, 19 Aug 2010 22:13:17 +0200 Peter Zijlstra <[email protected]>…
This patch-set reworks the
kmap_atomicAPI to be a stack based, instead of static slot based. Some might remember this from last year, some not ;-)
Quoted 7 lines
Quoted 4 lines
The advantage is that you no longer need to worry about
KM_foo, the disadvantage is that kmap_atomic/kunmap_atomic now needs to be strictly nested (CONFIG_HIGHMEM_DEBUGshould complain in case its not) -- and of course its a big massive patch changing a widely used API.Nice. That fixes the "use of irq-only slots from interrupts-on context" bugs which people keep adding.
Ah, I should add a:
WARN_ON_ONCE(in_irq() && !irqs_disabled());
like check to ensure people don't use kmap_atomic() in nestable IRQ contexts (nestable IRQ context is bad anyway) the old debug code I deleted did something similar.
Quoted 1 line
We don't have any checks in there for the stack overflowing?
+#ifdef CONFIG_DEBUG_HIGHMEM
+ BUG_ON(idx > KM_TYPE_NR);
+#endif
Seems to be that.
Quoted 3 lines
Did you add every runtime check you could possibly think of?
kmap_atomic_idx_push()andpop()don't have much in there. It'd be good to lard it up with runtime checks for at least a few weeks.
Right, so I currently have:
- stack size check in push/pop
- proper nesting check in pop (verifies that the vaddr you try to unmap is indeed the top most on the stack)
Aside from the proposed no irq-nesting thing to avoid unbounded recursion I can't really come up with more creative abuse.
Quoted 8 lines
Well, there's that monster conversion patch. How's about you temporarily do
#define
kmap_atomic(x, arg...)__kmap_atomic(x)so for a while, both
kmap_atomic(a, KM_foo)andkmap_atomic(a)are turned into__kmap_atomic(a). Once all the dust has settled, pull that out again?
Ah, that's a nifty trick, let me try that.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>