hc
2024-05-10 748e4f3d702def1a4bff191e0cf93b6a05340f01
kernel/arch/sparc/mm/highmem.c
....@@ -29,35 +29,22 @@
2929
3030 #include <asm/cacheflush.h>
3131 #include <asm/tlbflush.h>
32
-#include <asm/pgalloc.h>
3332 #include <asm/vaddrs.h>
34
-
35
-pgprot_t kmap_prot;
3633
3734 static pte_t *kmap_pte;
3835
3936 void __init kmap_init(void)
4037 {
41
- unsigned long address;
42
- pmd_t *dir;
43
-
44
- address = __fix_to_virt(FIX_KMAP_BEGIN);
45
- dir = pmd_offset(pgd_offset_k(address), address);
38
+ unsigned long address = __fix_to_virt(FIX_KMAP_BEGIN);
4639
4740 /* cache the first kmap pte */
48
- kmap_pte = pte_offset_kernel(dir, address);
49
- kmap_prot = __pgprot(SRMMU_ET_PTE | SRMMU_PRIV | SRMMU_CACHE);
41
+ kmap_pte = virt_to_kpte(address);
5042 }
5143
52
-void *kmap_atomic(struct page *page)
44
+void *kmap_atomic_high_prot(struct page *page, pgprot_t prot)
5345 {
5446 unsigned long vaddr;
5547 long idx, type;
56
-
57
- preempt_disable();
58
- pagefault_disable();
59
- if (!PageHighMem(page))
60
- return page_address(page);
6148
6249 type = kmap_atomic_idx_push();
6350 idx = type + KM_TYPE_NR*smp_processor_id();
....@@ -73,7 +60,7 @@
7360 #ifdef CONFIG_DEBUG_HIGHMEM
7461 BUG_ON(!pte_none(*(kmap_pte-idx)));
7562 #endif
76
- set_pte(kmap_pte-idx, mk_pte(page, kmap_prot));
63
+ set_pte(kmap_pte-idx, mk_pte(page, prot));
7764 /* XXX Fix - Anton */
7865 #if 0
7966 __flush_tlb_one(vaddr);
....@@ -83,18 +70,15 @@
8370
8471 return (void*) vaddr;
8572 }
86
-EXPORT_SYMBOL(kmap_atomic);
73
+EXPORT_SYMBOL(kmap_atomic_high_prot);
8774
88
-void __kunmap_atomic(void *kvaddr)
75
+void kunmap_atomic_high(void *kvaddr)
8976 {
9077 unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK;
9178 int type;
9279
93
- if (vaddr < FIXADDR_START) { // FIXME
94
- pagefault_enable();
95
- preempt_enable();
80
+ if (vaddr < FIXADDR_START)
9681 return;
97
- }
9882
9983 type = kmap_atomic_idx();
10084
....@@ -127,7 +111,5 @@
127111 #endif
128112
129113 kmap_atomic_idx_pop();
130
- pagefault_enable();
131
- preempt_enable();
132114 }
133
-EXPORT_SYMBOL(__kunmap_atomic);
115
+EXPORT_SYMBOL(kunmap_atomic_high);