From: "Tolentino, Matthew E" Here's a patch that fixes EFI boot for x86 on 2.6.16-rc5-mm3. The off-by-one is admittedly my fault, but the other two fix up the rest. Cc: Bjorn Helgaas Cc: Matt Domsch Cc: "Tolentino, Matthew E" Cc: "Brown, Len" Cc: Andi Kleen Cc: "Luck, Tony" Signed-off-by: Andrew Morton --- arch/i386/kernel/dmi_scan.c | 2 +- arch/i386/kernel/setup.c | 6 +++--- drivers/acpi/tables.c | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff -puN arch/i386/kernel/dmi_scan.c~efi-fixes arch/i386/kernel/dmi_scan.c --- 25/arch/i386/kernel/dmi_scan.c~efi-fixes Fri Mar 17 16:43:04 2006 +++ 25-akpm/arch/i386/kernel/dmi_scan.c Fri Mar 17 16:43:04 2006 @@ -229,7 +229,7 @@ void __init dmi_scan_machine(void) goto out; rc = dmi_present(p + 0x10); /* offset of _DMI_ string */ - iounmap(p); + dmi_iounmap(p, 32); if (!rc) return; } diff -puN arch/i386/kernel/setup.c~efi-fixes arch/i386/kernel/setup.c --- 25/arch/i386/kernel/setup.c~efi-fixes Fri Mar 17 16:43:04 2006 +++ 25-akpm/arch/i386/kernel/setup.c Fri Mar 17 16:43:04 2006 @@ -1059,10 +1059,10 @@ static int __init free_available_memory(unsigned long start, unsigned long end, void *arg) { /* check max_low_pfn */ - if (start >= ((max_low_pfn + 1) << PAGE_SHIFT)) + if (start >= (max_low_pfn << PAGE_SHIFT)) return 0; - if (end >= ((max_low_pfn + 1) << PAGE_SHIFT)) - end = (max_low_pfn + 1) << PAGE_SHIFT; + if (end >= (max_low_pfn << PAGE_SHIFT)) + end = max_low_pfn << PAGE_SHIFT; if (start < end) free_bootmem(start, end - start); diff -puN drivers/acpi/tables.c~efi-fixes drivers/acpi/tables.c --- 25/drivers/acpi/tables.c~efi-fixes Fri Mar 17 16:43:04 2006 +++ 25-akpm/drivers/acpi/tables.c Fri Mar 17 16:43:04 2006 @@ -587,7 +587,8 @@ int __init acpi_table_init(void) return -ENODEV; } - rsdp = (struct acpi_table_rsdp *)__va(rsdp_phys); + rsdp = (struct acpi_table_rsdp *)__acpi_map_table(rsdp_phys, + sizeof(struct acpi_table_rsdp)); if (!rsdp) { printk(KERN_WARNING PREFIX "Unable to map RSDP\n"); return -ENODEV; _