Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / arch / ia64 / mm / ioremap.c
index 0c08ce1..643ccc6 100644 (file)
 #include <linux/module.h>
 #include <linux/efi.h>
 #include <asm/io.h>
-#include <asm/meminit.h>
 
 static inline void __iomem *
 __ioremap (unsigned long offset, unsigned long size)
 {
-#ifdef CONFIG_XEN
-       offset = HYPERVISOR_ioremap(offset, size);
-#endif
        return (void __iomem *) (__IA64_UNCACHED_OFFSET | offset);
 }
 
 void __iomem *
 ioremap (unsigned long offset, unsigned long size)
 {
-       u64 attr;
-       unsigned long gran_base, gran_size;
+       if (efi_mem_attribute_range(offset, size, EFI_MEMORY_WB))
+               return phys_to_virt(offset);
 
-       /*
-        * For things in kern_memmap, we must use the same attribute
-        * as the rest of the kernel.  For more details, see
-        * Documentation/ia64/aliasing.txt.
-        */
-       attr = kern_mem_attribute(offset, size);
-       if (attr & EFI_MEMORY_WB)
-               return (void __iomem *) phys_to_virt(offset);
-       else if (attr & EFI_MEMORY_UC)
+       if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC))
                return __ioremap(offset, size);
 
        /*
-        * Some chipsets don't support UC access to memory.  If
-        * WB is supported for the whole granule, we prefer that.
+        * Someday this should check ACPI resources so we
+        * can do the right thing for hot-plugged regions.
         */
-       gran_base = GRANULEROUNDDOWN(offset);
-       gran_size = GRANULEROUNDUP(offset + size) - gran_base;
-       if (efi_mem_attribute(gran_base, gran_size) & EFI_MEMORY_WB)
-               return (void __iomem *) phys_to_virt(offset);
-
        return __ioremap(offset, size);
 }
 EXPORT_SYMBOL(ioremap);
@@ -55,9 +38,6 @@ EXPORT_SYMBOL(ioremap);
 void __iomem *
 ioremap_nocache (unsigned long offset, unsigned long size)
 {
-       if (kern_mem_attribute(offset, size) & EFI_MEMORY_WB)
-               return NULL;
-
        return __ioremap(offset, size);
 }
 EXPORT_SYMBOL(ioremap_nocache);