hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/nds32/mm/highmem.c
....@@ -6,49 +6,22 @@
66 #include <linux/sched.h>
77 #include <linux/smp.h>
88 #include <linux/interrupt.h>
9
-#include <linux/bootmem.h>
9
+#include <linux/memblock.h>
1010 #include <asm/fixmap.h>
1111 #include <asm/tlbflush.h>
1212
13
-void *kmap(struct page *page)
14
-{
15
- unsigned long vaddr;
16
- might_sleep();
17
- if (!PageHighMem(page))
18
- return page_address(page);
19
- vaddr = (unsigned long)kmap_high(page);
20
- return (void *)vaddr;
21
-}
22
-
23
-EXPORT_SYMBOL(kmap);
24
-
25
-void kunmap(struct page *page)
26
-{
27
- BUG_ON(in_interrupt());
28
- if (!PageHighMem(page))
29
- return;
30
- kunmap_high(page);
31
-}
32
-
33
-EXPORT_SYMBOL(kunmap);
34
-
35
-void *kmap_atomic(struct page *page)
13
+void *kmap_atomic_high_prot(struct page *page, pgprot_t prot)
3614 {
3715 unsigned int idx;
3816 unsigned long vaddr, pte;
3917 int type;
4018 pte_t *ptep;
4119
42
- preempt_disable();
43
- pagefault_disable();
44
- if (!PageHighMem(page))
45
- return page_address(page);
46
-
4720 type = kmap_atomic_idx_push();
4821
4922 idx = type + KM_TYPE_NR * smp_processor_id();
5023 vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
51
- pte = (page_to_pfn(page) << PAGE_SHIFT) | (PAGE_KERNEL);
24
+ pte = (page_to_pfn(page) << PAGE_SHIFT) | prot;
5225 ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr);
5326 set_pte(ptep, pte);
5427
....@@ -58,10 +31,9 @@
5831 __nds32__isb();
5932 return (void *)vaddr;
6033 }
34
+EXPORT_SYMBOL(kmap_atomic_high_prot);
6135
62
-EXPORT_SYMBOL(kmap_atomic);
63
-
64
-void __kunmap_atomic(void *kvaddr)
36
+void kunmap_atomic_high(void *kvaddr)
6537 {
6638 if (kvaddr >= (void *)FIXADDR_START) {
6739 unsigned long vaddr = (unsigned long)kvaddr;
....@@ -72,8 +44,5 @@
7244 ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr);
7345 set_pte(ptep, 0);
7446 }
75
- pagefault_enable();
76
- preempt_enable();
7747 }
78
-
79
-EXPORT_SYMBOL(__kunmap_atomic);
48
+EXPORT_SYMBOL(kunmap_atomic_high);