--- arch/ia64/kernel/efi.c 22 Mar 2002 23:39:30 -0000 1.5 +++ arch/ia64/kernel/efi.c 13 May 2002 14:51:24 -0000 @@ -137,7 +137,7 @@ efi_memmap_walk (efi_freemem_callback_t u64 start; u64 end; } prev, curr; - void *efi_map_start, *efi_map_end, *p; + void *efi_map_start, *efi_map_end, *p, *p_next; efi_memory_desc_t *md; u64 efi_desc_size, start, end; @@ -164,6 +164,19 @@ efi_memmap_walk (efi_freemem_callback_t printk("efi_memmap_walk: ignoring empty region at 0x%lx", md->phys_addr); continue; + } + + p_next = (p + efi_desc_size); + + if (p_next < efi_map_end) { + efi_memory_desc_t *md_next = p_next; + + if ((md_next->type == EFI_MEMORY_MAPPED_IO) && + (md_next->phys_addr == (md->phys_addr + + (md->num_pages << 12)))) { + + md->num_pages--; + } } curr.start = PAGE_OFFSET + md->phys_addr;