x86: make c_p_a unconditional in ioremap
[linux-2.6-microblaze.git] / arch / x86 / mm / ioremap_64.c
index 8862a19..bb9246c 100644 (file)
@@ -31,7 +31,7 @@ EXPORT_SYMBOL(__phys_addr);
  * conflicts.
  */
 static int ioremap_change_attr(unsigned long phys_addr, unsigned long size,
-                              unsigned long flags)
+                              pgprot_t prot)
 {
        int err = 0;
        if (phys_addr + size - 1 < (end_pfn_map << PAGE_SHIFT)) {
@@ -50,8 +50,8 @@ static int ioremap_change_attr(unsigned long phys_addr, unsigned long size,
                 * the phys addr can be a in hole between nodes and
                 * not have an memmap entry.
                 */
-               err = change_page_attr_addr(vaddr,npages,
-                                           MAKE_GLOBAL(__PAGE_KERNEL|flags));
+               err = change_page_attr_addr(vaddr, npages, prot);
+
                if (!err)
                        global_flush_tlb();
        }
@@ -97,7 +97,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
        /*
         * Ok, go for it..
         */
-       area = get_vm_area(size, VM_IOREMAP | (flags << 20));
+       area = get_vm_area(size, VM_IOREMAP);
        if (!area)
                return NULL;
        area->phys_addr = phys_addr;
@@ -107,8 +107,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
                remove_vm_area((void *)(PAGE_MASK & (unsigned long) addr));
                return NULL;
        }
-       if (flags && ioremap_change_attr(phys_addr, size, flags) < 0) {
-               area->flags &= 0xffffff;
+       if (ioremap_change_attr(phys_addr, size, pgprot) < 0) {
                vunmap(addr);
                return NULL;
        }
@@ -180,8 +179,7 @@ void iounmap(volatile void __iomem *addr)
        }
 
        /* Reset the direct mapping. Can block */
-       if (p->flags >> 20)
-               ioremap_change_attr(p->phys_addr, p->size, 0);
+       ioremap_change_attr(p->phys_addr, p->size, PAGE_KERNEL);
 
        /* Finally remove it */
        o = remove_vm_area((void *)addr);