aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/mm/highmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/mm/highmem.c')
-rw-r--r--arch/mips/mm/highmem.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/mips/mm/highmem.c b/arch/mips/mm/highmem.c
index da815d295239..11661cbc11a8 100644
--- a/arch/mips/mm/highmem.c
+++ b/arch/mips/mm/highmem.c
@@ -47,7 +47,7 @@ void *kmap_atomic(struct page *page)
47 unsigned long vaddr; 47 unsigned long vaddr;
48 int idx, type; 48 int idx, type;
49 49
50 /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ 50 preempt_disable();
51 pagefault_disable(); 51 pagefault_disable();
52 if (!PageHighMem(page)) 52 if (!PageHighMem(page))
53 return page_address(page); 53 return page_address(page);
@@ -72,6 +72,7 @@ void __kunmap_atomic(void *kvaddr)
72 72
73 if (vaddr < FIXADDR_START) { // FIXME 73 if (vaddr < FIXADDR_START) { // FIXME
74 pagefault_enable(); 74 pagefault_enable();
75 preempt_enable();
75 return; 76 return;
76 } 77 }
77 78
@@ -92,6 +93,7 @@ void __kunmap_atomic(void *kvaddr)
92#endif 93#endif
93 kmap_atomic_idx_pop(); 94 kmap_atomic_idx_pop();
94 pagefault_enable(); 95 pagefault_enable();
96 preempt_enable();
95} 97}
96EXPORT_SYMBOL(__kunmap_atomic); 98EXPORT_SYMBOL(__kunmap_atomic);
97 99
@@ -104,6 +106,7 @@ void *kmap_atomic_pfn(unsigned long pfn)
104 unsigned long vaddr; 106 unsigned long vaddr;
105 int idx, type; 107 int idx, type;
106 108
109 preempt_disable();
107 pagefault_disable(); 110 pagefault_disable();
108 111
109 type = kmap_atomic_idx_push(); 112 type = kmap_atomic_idx_push();