• A
    x86: Detect use of extended APIC ID for AMD CPUs · 42937e81
    Andreas Herrmann 提交于
    Booting a 32-bit kernel on Magny-Cours results in the following panic:
    
      ...
      Using APIC driver default
      ...
      Overriding APIC driver with bigsmp
      ...
      Getting VERSION: 80050010
      Getting VERSION: 80050010
      Getting ID: 10000000
      Getting ID: ef000000
      Getting LVT0: 700
      Getting LVT1: 10000
      Kernel panic - not syncing: Boot APIC ID in local APIC unexpected (16 vs 0)
      Pid: 1, comm: swapper Not tainted 2.6.30-rcX #2
      Call Trace:
       [<c05194da>] ? panic+0x38/0xd3
       [<c0743102>] ? native_smp_prepare_cpus+0x259/0x31f
       [<c073b19d>] ? kernel_init+0x3e/0x141
       [<c073b15f>] ? kernel_init+0x0/0x141
       [<c020325f>] ? kernel_thread_helper+0x7/0x10
    
    The reason is that default_get_apic_id handled extension of local APIC
    ID field just in case of XAPIC.
    
    Thus for this AMD CPU, default_get_apic_id() returns 0 and
    bigsmp_get_apic_id() returns 16 which leads to the respective kernel
    panic.
    
    This patch introduces a Linux specific feature flag to indicate
    support for extended APIC id (8 bits instead of 4 bits width) and sets
    the flag on AMD CPUs if applicable.
    Signed-off-by: NAndreas Herrmann <andreas.herrmann3@amd.com>
    Cc: <stable@kernel.org>
    LKML-Reference: <20090608135509.GA12431@alberich.amd.com>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    42937e81
apic.h 13.3 KB