diff options
Diffstat (limited to 'arch/mips/mm/highmem.c')
-rw-r--r-- | arch/mips/mm/highmem.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/mips/mm/highmem.c b/arch/mips/mm/highmem.c index dd5e2e31885b..1f7b37b38f5c 100644 --- a/arch/mips/mm/highmem.c +++ b/arch/mips/mm/highmem.c | |||
@@ -83,6 +83,25 @@ void __kunmap_atomic(void *kvaddr, enum km_type type) | |||
83 | preempt_check_resched(); | 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 | struct page *__kmap_atomic_to_page(void *ptr) | 105 | struct page *__kmap_atomic_to_page(void *ptr) |
87 | { | 106 | { |
88 | unsigned long idx, vaddr = (unsigned long)ptr; | 107 | unsigned long idx, vaddr = (unsigned long)ptr; |