Some(most?) BIOS have a hard-coded MP table in ROM, meaning that bridged PCI cards and other complex PCI setups will NOT be properly described in the MP table. As such, insufficient info exists in the table to properly setup the APIC for these cards.
Solution:
See the page on bridged PCI cards for details of a workaround. The long term solution will be a pass where we build a MP table incore based on information received from the PCI sub-system, ie, we will toss certain sections of the motherboard provided MP table!
Initial startup of APs via "sysctl kern.smp_active=x" ignores the actual value of 'x' and starts all the APs. Not really a problem as much as it is just unexpected behaviour.
Solution:
When we get the auto-start code working this section of code goes away...
Certains motherboards (Neptune/EISA based) randomly report INT 13 as used by the FPU during the npx0 probe code. This seems to be benign behaviour in most cases, but still needs to be fixed. It is sometimes exhibited as "stray irq13" messages.
Solution:
Since external FPUs are NOT allowed by the MP spec, I propose putting a huge #ifdef SMP/#endif wrapper around the npx0 probe code so that for the case of SMP it never decides to use INT 13. In other words, the npx0 probe shouls always report "npx0: INT 16 interface" for the SMP kernel. Volunteers?
PnP boards can cause problems as I have not yet implimented code to "undirect" PCI INTs when sent to the APIC. Since an upper ( >15 ) INT is registered in place of the original ( <=15 ) the original may be assigned later by a PnP card. BUT the lower INT line is NOT un-redirected. This means both the PCI hardware (via the redirect hardware) AND the PnP card are yanking on the same lower INT line, causing random problems.
Solution:
We have discoverd that some BIOS have a setting for which version of the MP spec to use: 1.1 or 1.4. When such a setting is available 1.4 should be used.
Solution:
Set BIOS to MP spec 1.4 when available.
Some machines have a 2nd IO APIC available. If it is enabled in the BIOS the mptable will have references to it which confuse the SMP kernel.
Solution:
Set BIOS to disable the 2nd IO APIC
On some motherboards the 8254 timer ouput is not connected to the IO APIC. If the MP table correctly shows this fact by lack of an INT entry for the 8254 timer the kernel will enable "mixed-mode" programming, getting around the problem. However not all MP tables do so. Instead they declare that the 8254 timer is connected, usually to INT2. This prevents the kernel from taking corrective action, and a kernel lockup results.
Solution:
A kernel option to override the offending MP table entry is available, see this page for details.