diff options
Diffstat (limited to 'arch/mips/mm/highmem.c')
-rw-r--r-- | arch/mips/mm/highmem.c | 5 |
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 | } |
96 | EXPORT_SYMBOL(__kunmap_atomic); | 98 | EXPORT_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(); |