[IA64] ioremap() should prefer WB over UC
authorBjorn Helgaas <bjorn.helgaas@hp.com>
Thu, 30 Mar 2006 16:53:39 +0000 (09:53 -0700)
committerTony Luck <tony.luck@intel.com>
Thu, 30 Mar 2006 17:05:41 +0000 (09:05 -0800)
efi_memmap_init() collects full granules of WB memory, without
regard for whether they also support UC.  So in order for ioremap()
to work for main memory, it must prefer WB mappings when possible.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/mm/ioremap.c

index 62328621f99cb6300545098549e6f83ab92dcb6c..643ccc6960ced30c6fdba1e34042d8def73969bd 100644 (file)
@@ -21,12 +21,12 @@ __ioremap (unsigned long offset, unsigned long size)
 void __iomem *
 ioremap (unsigned long offset, unsigned long size)
 {
-       if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC))
-               return __ioremap(offset, size);
-
        if (efi_mem_attribute_range(offset, size, EFI_MEMORY_WB))
                return phys_to_virt(offset);
 
+       if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC))
+               return __ioremap(offset, size);
+
        /*
         * Someday this should check ACPI resources so we
         * can do the right thing for hot-plugged regions.