Merge branch 'torvalds/master'
[firefly-linux-kernel-4.4.55.git] / arch / mn10300 / include / asm / highmem.h
index 7c137cd8aa37490e07e2e9b7e917785e63236f5b..1ddea5afba09344ba8e807e6ce8f5edc5c26241f 100644 (file)
@@ -70,11 +70,12 @@ static inline void kunmap(struct page *page)
  * be used in IRQ contexts, so in some (very limited) cases we need
  * it.
  */
-static inline unsigned long kmap_atomic(struct page *page)
+static inline void *kmap_atomic(struct page *page)
 {
        unsigned long vaddr;
        int idx, type;
 
+       preempt_disable();
        pagefault_disable();
        if (page < highmem_start_page)
                return page_address(page);
@@ -89,7 +90,7 @@ static inline unsigned long kmap_atomic(struct page *page)
        set_pte(kmap_pte - idx, mk_pte(page, kmap_prot));
        local_flush_tlb_one(vaddr);
 
-       return vaddr;
+       return (void *)vaddr;
 }
 
 static inline void __kunmap_atomic(unsigned long vaddr)
@@ -98,6 +99,7 @@ static inline void __kunmap_atomic(unsigned long vaddr)
 
        if (vaddr < FIXADDR_START) { /* FIXME */
                pagefault_enable();
+               preempt_enable();
                return;
        }
 
@@ -122,6 +124,7 @@ static inline void __kunmap_atomic(unsigned long vaddr)
 
        kmap_atomic_idx_pop();
        pagefault_enable();
+       preempt_enable();
 }
 #endif /* __KERNEL__ */