#ifndef clear_user_highpage
 static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
 {
-       void *addr = kmap_atomic(page);
+       void *addr = kmap_local_page(page);
        clear_user_page(addr, vaddr, page);
-       kunmap_atomic(addr);
+       kunmap_local(addr);
 }
 #endif
 
 
 static inline void clear_highpage(struct page *page)
 {
-       void *kaddr = kmap_atomic(page);
+       void *kaddr = kmap_local_page(page);
        clear_page(kaddr);
-       kunmap_atomic(kaddr);
+       kunmap_local(kaddr);
 }
 
 #ifndef __HAVE_ARCH_TAG_CLEAR_HIGHPAGE
                unsigned start1, unsigned end1,
                unsigned start2, unsigned end2)
 {
-       void *kaddr = kmap_atomic(page);
+       void *kaddr = kmap_local_page(page);
        unsigned int i;
 
        BUG_ON(end1 > page_size(page) || end2 > page_size(page));
        if (end2 > start2)
                memset(kaddr + start2, 0, end2 - start2);
 
-       kunmap_atomic(kaddr);
+       kunmap_local(kaddr);
        for (i = 0; i < compound_nr(page); i++)
                flush_dcache_page(page + i);
 }
 {
        char *vfrom, *vto;
 
-       vfrom = kmap_atomic(from);
-       vto = kmap_atomic(to);
+       vfrom = kmap_local_page(from);
+       vto = kmap_local_page(to);
        copy_user_page(vto, vfrom, vaddr, to);
-       kunmap_atomic(vto);
-       kunmap_atomic(vfrom);
+       kunmap_local(vto);
+       kunmap_local(vfrom);
 }
 
 #endif
 {
        char *vfrom, *vto;
 
-       vfrom = kmap_atomic(from);
-       vto = kmap_atomic(to);
+       vfrom = kmap_local_page(from);
+       vto = kmap_local_page(to);
        copy_page(vto, vfrom);
-       kunmap_atomic(vto);
-       kunmap_atomic(vfrom);
+       kunmap_local(vto);
+       kunmap_local(vfrom);
 }
 
 #endif
 
                        unsigned this_end = min_t(unsigned, end1, PAGE_SIZE);
 
                        if (end1 > start1) {
-                               kaddr = kmap_atomic(page + i);
+                               kaddr = kmap_local_page(page + i);
                                memset(kaddr + start1, 0, this_end - start1);
                        }
                        end1 -= this_end;
 
                        if (end2 > start2) {
                                if (!kaddr)
-                                       kaddr = kmap_atomic(page + i);
+                                       kaddr = kmap_local_page(page + i);
                                memset(kaddr + start2, 0, this_end - start2);
                        }
                        end2 -= this_end;
                }
 
                if (kaddr) {
-                       kunmap_atomic(kaddr);
+                       kunmap_local(kaddr);
                        flush_dcache_page(page + i);
                }