diff -r 4e78528e3480 xen/arch/ia64/linux-xen/efi.c --- a/xen/arch/ia64/linux-xen/efi.c Tue Jun 06 09:11:25 2006 -0600 +++ b/xen/arch/ia64/linux-xen/efi.c Wed Jun 07 09:36:51 2006 -0600 @@ -273,8 +273,13 @@ trim_bottom (efi_memory_desc_t *md, u64 * descriptor list to become unsorted. In such a case, md->num_pages will be * zero, so the Right Thing will happen. */ - md->phys_addr += num_skipped_pages << EFI_PAGE_SHIFT; - md->num_pages -= num_skipped_pages; + if (!(md->attribute & EFI_MEMORY_UC)) { + md->phys_addr += num_skipped_pages << EFI_PAGE_SHIFT; + md->num_pages -= num_skipped_pages; + } else { + /* If range supports multiple attributes, turn off WB */ + md->attribute &= ~EFI_MEMORY_WB; + } } static void @@ -296,7 +301,10 @@ trim_top (efi_memory_desc_t *md, u64 end "at 0x%lx\n", __FUNCTION__, (num_dropped_pages << EFI_PAGE_SHIFT) >> 10, md->phys_addr, end_addr); - md->num_pages -= num_dropped_pages; + if (!(md->attribute & EFI_MEMORY_UC)) + md->num_pages -= num_dropped_pages; + else + md->attribute &= ~EFI_MEMORY_WB; } /*