Skip to content
  • Yinghai Lu's avatar
    x86: read apic ID in the !acpi_lapic case · 4401da61
    Yinghai Lu authored
    
    
    Ed found that on 32-bit, boot_cpu_physical_apicid is not read right,
    when the mptable is broken.
    
    Interestingly, actually three paths use/set it:
    
     1. acpi: at that time that is already read from reg
     2. mptable: only read from mptable
     3. no madt, and no mptable, that use default apic id 0 for 64-bit, -1 for 32-bit
    
    so we could read the apic id for the 2/3 path. We trust the hardware
    register more than we trust a BIOS data structure (the mptable).
    
    We can also avoid the double set_fixmap() when acpi_lapic
    is used, and also need to move cpu_has_apic earlier and
    call apic_disable().
    
    Also when need to update the apic id, we'd better read and
    set the apic version as well - so that quirks are applied precisely.
    
    v2: make path 3 with 64bit, use -1 as apic id, so could read it later.
    v3: fix whitespace problem pointed out by Ed Swierk
    
    [ Impact: get correct apic id for bsp other than acpi path ]
    
    Reported-by: default avatarEd Swierk <eswierk@aristanetworks.com>
    Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
    Acked-by: default avatarCyrill Gorcunov <gorcunov@openvz.org>
    LKML-Reference: <49FC85A9.2070702@kernel.org>
    [ v4: sanity-check in the ACPI case too ]
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    4401da61