Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm
[pandora-kernel.git] / arch / arm / mm / highmem.c
index a34954d..73cae57 100644 (file)
@@ -40,11 +40,16 @@ void *kmap_atomic(struct page *page, enum km_type type)
 {
        unsigned int idx;
        unsigned long vaddr;
+       void *kmap;
 
        pagefault_disable();
        if (!PageHighMem(page))
                return page_address(page);
 
+       kmap = kmap_high_get(page);
+       if (kmap)
+               return kmap;
+
        idx = type + KM_TYPE_NR * smp_processor_id();
        vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
 #ifdef CONFIG_DEBUG_HIGHMEM
@@ -80,6 +85,9 @@ void kunmap_atomic(void *kvaddr, enum km_type type)
 #else
                (void) idx;  /* to kill a warning */
 #endif
+       } else if (vaddr >= PKMAP_ADDR(0) && vaddr < PKMAP_ADDR(LAST_PKMAP)) {
+               /* this address was obtained through kmap_high_get() */
+               kunmap_high(pte_page(pkmap_page_table[PKMAP_NR(vaddr)]));
        }
        pagefault_enable();
 }