kvaddr = TLBTEMP_BASE_1 +
                                (page_to_phys(page) & DCACHE_ALIAS_MASK);
 
+                       preempt_disable();
                        __invalidate_dcache_page_alias(kvaddr,
                                                       page_to_phys(page));
+                       preempt_enable();
                }
        }
 }
                if (!alias && !mapping)
                        return;
 
+               preempt_disable();
                virt = TLBTEMP_BASE_1 + (phys & DCACHE_ALIAS_MASK);
                __flush_invalidate_dcache_page_alias(virt, phys);
 
 
                if (mapping)
                        __invalidate_icache_page_alias(virt, phys);
+               preempt_enable();
        }
 
        /* There shouldn't be an entry in the cache for this page anymore. */
        unsigned long phys = page_to_phys(pfn_to_page(pfn));
        unsigned long virt = TLBTEMP_BASE_1 + (address & DCACHE_ALIAS_MASK);
 
+       preempt_disable();
        __flush_invalidate_dcache_page_alias(virt, phys);
        __invalidate_icache_page_alias(virt, phys);
+       preempt_enable();
 }
 EXPORT_SYMBOL(local_flush_cache_page);
 
                unsigned long phys = page_to_phys(page);
                unsigned long tmp;
 
+               preempt_disable();
                tmp = TLBTEMP_BASE_1 + (phys & DCACHE_ALIAS_MASK);
                __flush_invalidate_dcache_page_alias(tmp, phys);
                tmp = TLBTEMP_BASE_1 + (addr & DCACHE_ALIAS_MASK);
                __flush_invalidate_dcache_page_alias(tmp, phys);
                __invalidate_icache_page_alias(tmp, phys);
+               preempt_enable();
 
                clear_bit(PG_arch_1, &page->flags);
        }
 
        if (alias) {
                unsigned long t = TLBTEMP_BASE_1 + (vaddr & DCACHE_ALIAS_MASK);
+               preempt_disable();
                __flush_invalidate_dcache_page_alias(t, phys);
+               preempt_enable();
        }
 
        /* Copy data */
        if (alias) {
                unsigned long t = TLBTEMP_BASE_1 + (vaddr & DCACHE_ALIAS_MASK);
 
+               preempt_disable();
                __flush_invalidate_dcache_range((unsigned long) dst, len);
                if ((vma->vm_flags & VM_EXEC) != 0)
                        __invalidate_icache_page_alias(t, phys);
+               preempt_enable();
 
        } else if ((vma->vm_flags & VM_EXEC) != 0) {
                __flush_dcache_range((unsigned long)dst,len);
 
        if (alias) {
                unsigned long t = TLBTEMP_BASE_1 + (vaddr & DCACHE_ALIAS_MASK);
+               preempt_disable();
                __flush_invalidate_dcache_page_alias(t, phys);
+               preempt_enable();
        }
 
        memcpy(dst, src, len);