]> git.karo-electronics.de Git - linux-beck.git/commitdiff
x86/apic, ACPI: Remove the repeated lapic address override entry parsing
authorBaoquan He <bhe@redhat.com>
Fri, 12 Aug 2016 06:57:13 +0000 (14:57 +0800)
committerIngo Molnar <mingo@kernel.org>
Mon, 15 Aug 2016 06:53:37 +0000 (08:53 +0200)
The ACPI MADT has a 32-bit field providing lapic address at which
each processor can access its lapic information. MADT also contains
an optional entry to provide a 64-bit address to override the 32-bit
one. However the current code does the lapic address override entry
parsing twice. One is in early_acpi_boot_init() because AMD NUMA need
get boot_cpu_id earlier. The other is in acpi_boot_init() which parses
all MADT entries.

So in this patch we remove the repeated code in the 2nd part.

Meanwhile print lapic override entry information like other MADT entry,
this will be added to boot log.

This patch is not supposed to change any runtime behavior, other than
improving kernel messages.

Signed-off-by: Baoquan He <bhe@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-acpi@vger.kernel.org
Cc: rjw@rjwysocki.net
Link: http://lkml.kernel.org/r/1470985033-22493-2-git-send-email-bhe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/apic/apic.c

index 90d84c3eee53a323a775ebd8ab4055f777b81c1d..2087bea6b46116fc72fdb545c0fd8a5fb07c6378 100644 (file)
@@ -282,6 +282,8 @@ acpi_parse_lapic_addr_ovr(struct acpi_subtable_header * header,
        if (BAD_MADT_ENTRY(lapic_addr_ovr, end))
                return -EINVAL;
 
+       acpi_table_print_madt_entry(header);
+
        acpi_lapic_addr = lapic_addr_ovr->address;
 
        return 0;
@@ -998,21 +1000,6 @@ static int __init acpi_parse_madt_lapic_entries(void)
        if (!boot_cpu_has(X86_FEATURE_APIC))
                return -ENODEV;
 
-       /*
-        * Note that the LAPIC address is obtained from the MADT (32-bit value)
-        * and (optionally) overridden by a LAPIC_ADDR_OVR entry (64-bit value).
-        */
-
-       count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE,
-                                     acpi_parse_lapic_addr_ovr, 0);
-       if (count < 0) {
-               printk(KERN_ERR PREFIX
-                      "Error parsing LAPIC address override entry\n");
-               return count;
-       }
-
-       register_lapic_address(acpi_lapic_addr);
-
        count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC,
                                      acpi_parse_sapic, MAX_LOCAL_APIC);
 
index cea4fc19e8447d14fd6dcba5df94aa91f7a2332d..63b7484448805883b0848d61b132d7634368e0b9 100644 (file)
@@ -1825,7 +1825,7 @@ void __init register_lapic_address(unsigned long address)
        if (!x2apic_mode) {
                set_fixmap_nocache(FIX_APIC_BASE, address);
                apic_printk(APIC_VERBOSE, "mapped APIC to %16lx (%16lx)\n",
-                           APIC_BASE, mp_lapic_addr);
+                           APIC_BASE, address);
        }
        if (boot_cpu_physical_apicid == -1U) {
                boot_cpu_physical_apicid  = read_apic_id();