Systems which fully comply to the Intel MultiProcessing Specification (IMPS) should be supported. Since some of the code is based on Linux 2.0, some features (such as dual I/O APICs) are not fully supported. The APIC (Advanced Programmable Interrupt Controller) is not yet used for general interrupt delivery. Instead, all hardware interrupts are sent to the BootStrap Processor (BSP).
If a machine works with Linux 2.0 it should work with the OSKit; however, testing has been limited to a few dual-processor machines.
The SMP code must be compiled with a compiler that supports .code16 for full functionality. The smp library will compile without it, but it will only support a single processor.
Inter-processor interrupts (IPIs) are implemented. These are currently the only interrupts received by the Application Processors (APs). IPIs allow the client OS to implement TLB-shoot-down and reschedule requests.
It is important to note that if more than one processor wishes to run in ``user mode,'' that the per-processor data structures in libkern (such as base_tss, base_idt, and base_gdt) will have to be made per-processor.
The OSKit code has not been tested with more than two processors. Success (and failure) reports for systems with three or more processors would be appreciated.
smp_apic_ack mentions a potential pitfall with Intel x86 SMPs. If more than one processor tries to send an IPI to a target processor, or if a processor sends multiple IPIs without waiting for them to be processed, IPIs can get lost. It is up to the programmer to deal with this limitation.