Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Define kmap_atomic_pfn() for MIPS.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

+21
+19
arch/mips/mm/highmem.c
··· 83 83 preempt_check_resched(); 84 84 } 85 85 86 + /* 87 + * This is the same as kmap_atomic() but can map memory that doesn't 88 + * have a struct page associated with it. 89 + */ 90 + void *kmap_atomic_pfn(unsigned long pfn, enum km_type type) 91 + { 92 + enum fixed_addresses idx; 93 + unsigned long vaddr; 94 + 95 + inc_preempt_count(); 96 + 97 + idx = type + KM_TYPE_NR*smp_processor_id(); 98 + vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); 99 + set_pte(kmap_pte-idx, pfn_pte(pfn, kmap_prot)); 100 + flush_tlb_one(vaddr); 101 + 102 + return (void*) vaddr; 103 + } 104 + 86 105 struct page *__kmap_atomic_to_page(void *ptr) 87 106 { 88 107 unsigned long idx, vaddr = (unsigned long)ptr;
+2
include/asm-mips/highmem.h
··· 75 75 } 76 76 77 77 static inline void kunmap_atomic(void *kvaddr, enum km_type type) { } 78 + #define kmap_atomic_pfn(pfn, idx) page_address(pfn_to_page(pfn)) 78 79 79 80 #define kmap_atomic_to_page(ptr) virt_to_page(ptr) 80 81 ··· 87 86 extern void __kunmap(struct page *page); 88 87 extern void *__kmap_atomic(struct page *page, enum km_type type); 89 88 extern void __kunmap_atomic(void *kvaddr, enum km_type type); 89 + extern void *kmap_atomic_pfn(unsigned long pfn, enum km_type type); 90 90 extern struct page *__kmap_atomic_to_page(void *ptr); 91 91 92 92 #define kmap __kmap