• Andrew Morton's avatar
    [PATCH] generic subarchitecture for ia32 · 441d6fd9
    Andrew Morton authored
    From: Andi Kleen <ak@muc.de>
    
    This patch adds an generic x86 subarchitecture. It is intended to provide
    an dynamic interface for APIC drivers. There are already three subarchitectures
    (bigsmp, summit, default) that only differ in how they drive the local APIC.
    A fourth - Unisys ES7000 - is scheduled to be merged soon.
    
    The subarchitecture concept separated this nicely, but it has the big
    drawback that they are compile time options. A Linux vendor cannot
    ship own binary kernel rpms for all of these machines. Runtime probing
    is needed instead.
    
    This patch adds a new "generic" subarchitecture that just acts as a
    dynamic switching layer for APIC drivers. It only tries to virtualize
    the APICs, no attempt is made to cover further incompatiblities.
    This means machines like the Visual Workstation, pc9800 or
    Voyager are not covered; but these are unlikely to be supported by
    binary distributions anyways.
    
    The generic arch reuses the existing interface in mach_ipi / mach_mpparse.h /
    mach_apic.h and just pulls it using some macros into an "struct genapic"
    object. The main APIC code does not recognize it, it is all hidden
    in the mach-generic include files.
    
    Auto detection of APIC types is supported in the usual way used by
    existing ports like Summit - checking ACPI or mptables for specific
    signatures - or it can be specified by the user using a new "apic="
    boot option. I also moved the DMI scan to before the generic
    subarchitecture probe, so DMI could be used in future too to probe
    specific machines.
    
    Some minor hacks were needed to avoid circular declaration of a few
    symbols, but overall it's fairly clean.
    
    The patch has been tested on a Summit machine, an generic 4 virtual CPUs
    Xeon and on an ES7000.
    441d6fd9
mpspec.h 5.97 KB