Intel MP Specification compatibility

NOTE as of 12/18/2003: While the Intel MP Spec v1.4 is still supported for legacy MP capability and is the simpler mechanism, all new Intel/AMD MP systems have been primarily been designed with ACPI in mind. It's a huge spec that is overcomplex, but it's the way things are going for now if you want complete support covering all the corner cases.

Below this is currently unchanged, but some links have been fixed so the info is still there.

Last (partial) update: Wed 8 AM 4/30/1997.



The Intel MP Specification is a hardware compatibility guide for machine hardware designers and OS software writers to produce SMP-capable machines and OSes in a vendor-independent manner.

My two primary tasks on this topic are: (1) helping to get the SMP code in various free OSes correctly and efficiently supporting this standardized kind of hardware, and (2) Example Code/Clarifications of the Spec, which includes extra documentation.

I don't warrant any of this material, as it is free. I do want to help people out, so please feel free to e-mail me if you have problems with my code/documentation, successes, or just want to comment on it or some related point.

Thanks go to Intel for the use of some equipment for cursory validation and for a few intense debug sessions. This included several different Pentium Pro MP boxes (one with a hardware debugger attached) and a few Pentium MP boxes. Of course all this REALLY means is that it worked on some internal test-bed, but it has been very helpful in finding my stupid mistakes.

My main test machine is currently an Intel Alder with 4 Pentium Pro 150MHz (w/256K L2 cache) CPUs.

Free OS's supporting the Intel MP Spec

I'm only listing the freely available OSes which support the Intel MP Spec, since there's enough advertisement of the others elsewhere.

Linux has an ongoing SMP project called Linux-SMP, headed by Alan Cox. Configuration is done in the normal fashion, except for uncommenting the "SMP = 1" in the top makefile (if there are multiple CPUs on the machine, it will activate them automatically... if not, then it should still boot and run). Several versions are very stable, and can be used for production work. There's a Linux-SMP status for Intel MPS page, which has been kept reasonably up-to-date on which versions work or not, patches, etc. The status page may go away sometime soon.

FreeBSD has made a lot of progress in the last few months with their FreeBSD Symmeteric MultiProcessor Kernel, much of it done by (I believe, though I'm sure they'll correct me if I'm wrong) Peter Wemm and Steve Passe. The SMP kernel is now merged into the mainline 3.0-current source tree. Important fixes have been made lately that make it much more stable.

Example Code/Clarifications of the Spec

The Intel spec doesn't include many code sequences, and though it includes all of the appropriate information which is not in the APIC documentation but relevant to the MPS architecture, many things are not immediately obvious. This section is for example code and clarifications of the spec (of course, these are not officially sanctioned by Intel) to help the prospective SMP OS writer and/or debugger.

(This will be expanded) Relevant documents are of course the Intel MP Specification itself, the "Multiple Processor Management" sections of both the Pentium and Pentium Pro programmer's/OS writer's guides, the 82489DX User's Manual (AP-388, was part of the "Pentium Processors and Related Products" manual), and finally a general link Intel Developer's Page.

As mentioned above, the spec is really not enough to write an SMP OS. Information on the Intel APIC parts and how to program them must be read through very carefully, plus some errata. Here are a list of features/limitations/results of the spec and APIC documents which may not be obvious from the first read:

Here are the 3 source files for a Intel MPS-compatible recognition sequence suitable for a kernel: Limitations/info about the source files:

Back to my Home Page.