forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/arch/arm/mm/highmem.c
....@@ -1,13 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * arch/arm/mm/highmem.c -- ARM highmem support
34 *
45 * Author: Nicolas Pitre
56 * Created: september 8, 2008
67 * Copyright: Marvell Semiconductors Inc.
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License version 2 as
10
- * published by the Free Software Foundation.
118 */
129
1310 #include <linux/module.h>
....@@ -21,7 +18,7 @@
2118 static inline void set_fixmap_pte(int idx, pte_t pte)
2219 {
2320 unsigned long vaddr = __fix_to_virt(idx);
24
- pte_t *ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr);
21
+ pte_t *ptep = virt_to_kpte(vaddr);
2522
2623 set_pte_ext(ptep, pte, 0);
2724 local_flush_tlb_kernel_page(vaddr);
....@@ -29,40 +26,17 @@
2926
3027 static inline pte_t get_fixmap_pte(unsigned long vaddr)
3128 {
32
- pte_t *ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr);
29
+ pte_t *ptep = virt_to_kpte(vaddr);
3330
3431 return *ptep;
3532 }
3633
37
-void *kmap(struct page *page)
38
-{
39
- might_sleep();
40
- if (!PageHighMem(page))
41
- return page_address(page);
42
- return kmap_high(page);
43
-}
44
-EXPORT_SYMBOL(kmap);
45
-
46
-void kunmap(struct page *page)
47
-{
48
- BUG_ON(in_interrupt());
49
- if (!PageHighMem(page))
50
- return;
51
- kunmap_high(page);
52
-}
53
-EXPORT_SYMBOL(kunmap);
54
-
55
-void *kmap_atomic(struct page *page)
34
+void *kmap_atomic_high_prot(struct page *page, pgprot_t prot)
5635 {
5736 unsigned int idx;
5837 unsigned long vaddr;
5938 void *kmap;
6039 int type;
61
-
62
- preempt_disable();
63
- pagefault_disable();
64
- if (!PageHighMem(page))
65
- return page_address(page);
6640
6741 #ifdef CONFIG_DEBUG_HIGHMEM
6842 /*
....@@ -93,13 +67,13 @@
9367 * in place, so the contained TLB flush ensures the TLB is updated
9468 * with the new mapping.
9569 */
96
- set_fixmap_pte(idx, mk_pte(page, kmap_prot));
70
+ set_fixmap_pte(idx, mk_pte(page, prot));
9771
9872 return (void *)vaddr;
9973 }
100
-EXPORT_SYMBOL(kmap_atomic);
74
+EXPORT_SYMBOL(kmap_atomic_high_prot);
10175
102
-void __kunmap_atomic(void *kvaddr)
76
+void kunmap_atomic_high(void *kvaddr)
10377 {
10478 unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK;
10579 int idx, type;
....@@ -121,10 +95,8 @@
12195 /* this address was obtained through kmap_high_get() */
12296 kunmap_high(pte_page(pkmap_page_table[PKMAP_NR(vaddr)]));
12397 }
124
- pagefault_enable();
125
- preempt_enable();
12698 }
127
-EXPORT_SYMBOL(__kunmap_atomic);
99
+EXPORT_SYMBOL(kunmap_atomic_high);
128100
129101 void *kmap_atomic_pfn(unsigned long pfn)
130102 {