x86, es7000: fix ACPI table mappings
authorYinghai Lu <yhlu.kernel@gmail.com>
Sat, 7 Feb 2009 23:39:41 +0000 (15:39 -0800)
committerIngo Molnar <mingo@elte.hu>
Mon, 9 Feb 2009 12:35:37 +0000 (13:35 +0100)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/es7000_32.c

index 53699c931ad41ebdaee8594cdb17f4464fcc986f..71d7be624d461a649d66ad63dcd74281e2a49e94 100644 (file)
@@ -292,24 +292,31 @@ int __init find_unisys_acpi_oem_table(unsigned long *oem_addr)
 {
        struct acpi_table_header *header = NULL;
        int i = 0;
+       acpi_size tbl_size;
 
-       while (ACPI_SUCCESS(acpi_get_table("OEM1", i++, &header))) {
+       while (ACPI_SUCCESS(acpi_get_table_with_size("OEM1", i++, &header, &tbl_size))) {
                if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) {
                        struct oem_table *t = (struct oem_table *)header;
 
                        oem_addrX = t->OEMTableAddr;
                        oem_size = t->OEMTableSize;
+                       early_acpi_os_unmap_memory(header, tbl_size);
 
                        *oem_addr = (unsigned long)__acpi_map_table(oem_addrX,
                                                                    oem_size);
                        return 0;
                }
+               early_acpi_os_unmap_memory(header, tbl_size);
        }
        return -1;
 }
 
 void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr)
 {
+       if (!oem_addr)
+               return;
+
+       __acpi_unmap_table((char *)oem_addr, oem_size);
 }
 #endif