MutliProcessor Specification Support in Linux 2.4 Randy Dunlap 2002-May-22 Linux supports MPS (MP spec.) versions 1.1 and 1.4. Linux doesn't have full support for all of MPS version 1.4. Experience has shown that Linux usually works best when the BIOS is configured for MP Spec. version 1.1 if that is an option in your system's BIOS. I don't see why the MP Spec. version should matter to Linux, but it would be an interesting exercise to find out the differences as presented by BIOS tables, to determine why Linux fails with MP Spec. version 1.4 in some cases, and to fix Linux so that this wouldn't matter. This document summarizes the major changes in MP spec. version 1.4 and their support status in Linux. 1. Section 3.6.2.3, Symmetric I/O Mode: new paragraph: The hardware must support a mode of operation in which the system can switch easily to Symmetric I/O mode from PIC or Virtual Wire mode. When the operating system is ready to switch to MP operation, it writes a 01H to the IMCR register, if that register is implemented, and enables I/O APIC Redirection Table entries. The hardware must not require any other action on the part of software to make the transition to Symmetric I/O mode. Linux recognizes and supports this MP configuration mode. 2. Section 3.6.4, Floating Point Exception Interrupt (partial text): For PC/AT compatibility, the bootstrap processor must support DOS-compatible FPU execution and exception handling while running in either of the PC/AT-compatible modes. This means that floating point error signals from the BSP must be routed to the interrupt request 13 signal, IRQ13, when the system is in PIC or virtual wire mode. While floating point error signals from an application processor need not be routed to IRQ13, platform designers may choose to connect the two. For example, connecting the floating point error signal from application processors to IRQ13 can be useful in the case of a platform that supports dynamic choice of BSP during boot. In symmetric mode, a compliant system supports only on-chip floating point units, with error signaling via interrupt vector 16. Operating systems must use interrupt vector 16 to manage floating point exceptions when the system is in symmetric mode. | Linux does not use the floating point interrupt at all except in | genuine i386 processor systems which are not SMP-capable. [In these | systems, if they wire the FPU exception line in the PC/AT-compatible | way, a run-time check for #MF exception availability is performed. | If the #MF exception is available, then Linux handles this interrupt | if it happens. [Maciej W. Rozycki] 3. Section 3.6.8, Multiple I/O APIC Configurations: Multiple I/O APICs are supported in Linux. 4. MP Configuration Table This table was made optional in MPS version 1.4. If the table isn't present, one of the default configurations should be used. An extended section was also added to it for new table entry types. Linux supports the optional MP Configuration Table and uses a default configuration if the MP Config. Table is not present. Linux tolerates extended section table entries by skipping over them if they are found. Data in the extended table entries is not used. 5. Table 4-2: MP Configuration Table Header Fields: New or changed fields for MP Spec. version 1.4: OEM Table Pointer: supported in Linux. Extended Table Length: supported (tolerated, skipped) in Linux. Extended Table Checksum: supported (tolerated, skipped) in Linux. 6. Table 4-10: I/O Interrupt Entry Fields: and Table 4-12: Local Interrupt Entry Fields: New or changed fields for MP Spec. version 1.4: Source Bus IRQ: Section D.3 specifies new PCI bus semantics for this field. This field is used by Linux. 7. Section 4.4, Extended MP Configuration Table Entries: Entry types for System Address Space Mapping, Bus Hierarchy Descriptor, and Compatibility Bus Address Space Modifier are defined. Linux skips over (does not use) these extended MP Config. table entries. Apparently this isn't critical to any shipping systems. ###