diff options
Diffstat (limited to 'arch/arm/mm/highmem.c')
-rw-r--r-- | arch/arm/mm/highmem.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/arch/arm/mm/highmem.c b/arch/arm/mm/highmem.c index e17ed00828d7..b98895d9fe57 100644 --- a/arch/arm/mm/highmem.c +++ b/arch/arm/mm/highmem.c | |||
@@ -18,19 +18,20 @@ | |||
18 | #include <asm/tlbflush.h> | 18 | #include <asm/tlbflush.h> |
19 | #include "mm.h" | 19 | #include "mm.h" |
20 | 20 | ||
21 | pte_t *fixmap_page_table; | ||
22 | |||
23 | static inline void set_fixmap_pte(int idx, pte_t pte) | 21 | static inline void set_fixmap_pte(int idx, pte_t pte) |
24 | { | 22 | { |
25 | unsigned long vaddr = __fix_to_virt(idx); | 23 | unsigned long vaddr = __fix_to_virt(idx); |
26 | set_pte_ext(fixmap_page_table + idx, pte, 0); | 24 | pte_t *ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr); |
25 | |||
26 | set_pte_ext(ptep, pte, 0); | ||
27 | local_flush_tlb_kernel_page(vaddr); | 27 | local_flush_tlb_kernel_page(vaddr); |
28 | } | 28 | } |
29 | 29 | ||
30 | static inline pte_t get_fixmap_pte(unsigned long vaddr) | 30 | static inline pte_t get_fixmap_pte(unsigned long vaddr) |
31 | { | 31 | { |
32 | unsigned long idx = __virt_to_fix(vaddr); | 32 | pte_t *ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr); |
33 | return *(fixmap_page_table + idx); | 33 | |
34 | return *ptep; | ||
34 | } | 35 | } |
35 | 36 | ||
36 | void *kmap(struct page *page) | 37 | void *kmap(struct page *page) |
@@ -84,7 +85,7 @@ void *kmap_atomic(struct page *page) | |||
84 | * With debugging enabled, kunmap_atomic forces that entry to 0. | 85 | * With debugging enabled, kunmap_atomic forces that entry to 0. |
85 | * Make sure it was indeed properly unmapped. | 86 | * Make sure it was indeed properly unmapped. |
86 | */ | 87 | */ |
87 | BUG_ON(!pte_none(*(fixmap_page_table + idx))); | 88 | BUG_ON(!pte_none(get_fixmap_pte(vaddr))); |
88 | #endif | 89 | #endif |
89 | /* | 90 | /* |
90 | * When debugging is off, kunmap_atomic leaves the previous mapping | 91 | * When debugging is off, kunmap_atomic leaves the previous mapping |
@@ -137,7 +138,7 @@ void *kmap_atomic_pfn(unsigned long pfn) | |||
137 | idx = type + KM_TYPE_NR * smp_processor_id(); | 138 | idx = type + KM_TYPE_NR * smp_processor_id(); |
138 | vaddr = __fix_to_virt(idx); | 139 | vaddr = __fix_to_virt(idx); |
139 | #ifdef CONFIG_DEBUG_HIGHMEM | 140 | #ifdef CONFIG_DEBUG_HIGHMEM |
140 | BUG_ON(!pte_none(*(fixmap_page_table + idx))); | 141 | BUG_ON(!pte_none(get_fixmap_pte(vaddr))); |
141 | #endif | 142 | #endif |
142 | set_fixmap_pte(idx, pfn_pte(pfn, kmap_prot)); | 143 | set_fixmap_pte(idx, pfn_pte(pfn, kmap_prot)); |
143 | 144 | ||