Linux-SMP status for Intel MPS


You can find most these machines/motherboards listed on the Intel MPS-compatible hardware page.

For more information about SMP work for free OSes, or the Intel MP Spec itself, see my page on Intel SMP (via MultiProcessor Specification) for Free OS's.

No special variation should have to take place vs. the varieties of kernel that must be run, simply uncomment the "SMP = 1" line in the top-level makefile after a "make clean". NOTE that the modules must be recompiled as well.

If fixes are described below as necessary, here is my Linux-SMP fixes FTP area.

Kernel Version Listing

This is a quick summary of which kernel versions work. For details, see the announcement listing.

Last updated: 11 AM 2/26/1997.

WARNING: to those who don't already know, don't run the "setserial" program at all when using the SMP kernel. What I did was go into the "init.d" scripts and disable using "setserial" at all.

IMO Best Version(s) To Use Version 2.0.1 through 2.0.14 (I have been running 2.0.8 for very long periods, so I can report that one as pretty solid on a 4-CPU box). Every Pentium Pro and most Pentium multiprocessor machines compliant with the Intel MPS standard version 1.1 or 1.4 should work correctly.

2.1.X: No information yet...

2.0.21+: Some strange intermittent problems reported, no conclusions yet, though.

2.0.15 to .20: Problem in the IRQ handlers... don't use!

1.3.98 to 2.0.14: Stock versions should need no changes except the missing part of the MPS probe where it should check the EBDA.

1.3.94 to .97: Stock versions need to have one line in "kernel/sched.c" changed. Some machines would still work, but most won't. See the 5/1/96 announcement for details.

1.3.82 to .93: Stock versions have all SMP fixes!! (.84 needs a the "include/smp_lock.h" header file added to "fs/nfs/inode.c" for SMP compilation, but otherwise all is well). The only machines which may not work are those with a local APIC version less than 16. This is fortunately extremely rare, with only a few Pentium machines like this, and no Pentium Pro machines.

1.3.78/.79/.80/.81: Stock versions have all but SMP_PROF patches, as far as I can tell, so should work on most any machine. There is a patch for the SMP_PROF code (and "/proc/smp" device) on my FTP site, in the 1.3.79 subdirectory, for file "irq.c", which should work on all of them.

1.3.77 + my patches: Should work on all machines 1.3.71 + my earlier patches, but also has scheduler improvements, so should be notably faster. It is really noticable the more CPUs you have... so my 4-CPU test box is about 7-10% faster completing a 4-process parallel make according to elapsed time. :-) SMP_PROF code (and the "smp" device) now works for non-consecutive CPUs (didn't work before).

1.3.76/.77: Work on some boards, but many earlier fixes were broken.

1.3.73/.74/.75: Interrupt handling code changes breaks all SMP operation, so the boot freezes after it tries to mount the root partition. No fix available.

1.3.71/.72: This stock version of the kernel has all the the fixes written for 1.3.68 in it right out of the box, plus more work by Alan and others. There are a new set of fixes (listed for 1.3.71, but works for both) in my FTP area that will make most "default" configurations work now.

1.3.69/.70: Same problems as stock 1.3.68.

1.3.68 + my patches: Solves most problems. Many machines with "default" configurations will still not work with this version.

stock 1.3.68 and any earlier kernels: Most motherboards will be detected, though most of those won't boot correctly.


This consists mainly of a set of announcements and other status information that is dated. The newer information supercedes the old.

From Erich Boleyn, 2/26/1997

There have been some reports of instability in the kernels newer than 2.0.20 (and the kernels between 2.0.14 and 2.0.19 or so have a major flaw in the interrupt handlers for SMP).

I still don't have good information for the 2.1.X kernels, and the best results I've heard (i.e. no complaints) were from 2.0.1 to 2.0.14, with my personal experience using 2.0.8 for long periods.

From Erich Boleyn, 9/9/96

The 2.0.15 or later kernels have a problem in the interrupt handlers with SMP.

Use 2.0.14 or earlier!

From Erich Boleyn, 7/21/96

Linux-SMP didn't do the probe to determine Intel MPS compatibility correctly. In particular, some systems that were compatible might not be detected (it should be checking the EBDA, or Extended BIOS Data Area). Some patches (against 2.0.8) and a precompiled test kernel (only IDE drivers are there, no SCSI) are available to try it out for those who have had problems getting their systems to be recognized as SMP systems by Linux-SMP. The patches should work with newer versions of the kernel until they are included in the official releases.

NOTE: Of the three files in my FTP area, only "init.c.diff" is important for this, the other two being for adding SMP boot command options for disabling CPUs.

From Erich Boleyn, 7/19/96

The 2.0 or later kernels seem to fix some minor instability problems which were present in some earlier versions (and 2.0.1 fixes a CPU usage statistics bug).

Use 2.0.1 or later!

From Erich Boleyn, 5/1/96

The kernel versions 1.3.94 through 1.3.97 (possibly .98) are broken for most types of Intel-MPS-compatible SMP machines. A single-line fix is needed. In "kernel/sched.c", change:
	#define idle_task (task[this_cpu])
	#define idle_task (task[cpu_number_map[this_cpu]])

From Erich Boleyn, 3/28/96

Goofed on my 1.3.77 fixes, and had some of them backwards (though people seemed to be able to figure it out OK in most instances). They are fixed.

1.3.78 and 1.3.79 seem to work great for all but the SMP_PROF code. I think the "irq.c" patch didn't make it in because it was backward, and otherwise confusing to the harried maintainers. A patch file is available on my FTP site.

From Erich Boleyn, 3/24/96

Just finished looking through the SMP_PROF code, and it looks good, with an extra one-liner fix to get the "smp" device to work (already added into the fixes on my FTP site as of 4 PM today).

From Erich Boleyn, 3/23/96

1.3.77 + my patches: Should run on at least as many machines as 1.3.71 + earlier patches, but is notably faster... please try it out!

SMP_PROF for non-consecutive CPU numbering is broken in everything prior to this version... though I didn't test it very thoroughly yet, so the numbering might get crossed in some places.

In-between versions til this one don't work well...

From Erich Boleyn, 3/19/96

At least one person whose machine uses an APIC version which appears to be less than 16 (I haven't been able to test any machine like this myself) claims the fixed versions of the kernel don't work with it. This might be a good test of the 486-equivalent code, as that's the situation a 486 uses. (there is a distinction in the code depending on the APIC version being 16 or greater and 15 or less). Anyway, I'm looking into it...

From Erich Boleyn, 3/14/96

1.3.73/.74: interrupt handlers broken, so no SMP system works.

I thought I'd have a fix, but the problem was more serious than I thought, so none for now...

From Erich Boleyn, 3/13/96

1.3.72: apparently works much like 1.3.71 for SMP operation, though I hadn't tested it carefully myself. My "smp.c.diff" patch for 1.3.71 still works here.

1.3.73: crashes during bootup (grumble) on my test box. Some changes to the inter-processor scheduler/timer was made to speed everything up, but it appears to have broken Linux-SMP for non-consecutive CPU numbering, like my box has. There's also a typo on line 185 of "i386/arch/kernel/irq.c"... I think there should be a semicolon at the line instead of the colon (certainly the compiler doesn't like it).

I'll have a fix for 1.3.73 on my FTP site ASAP.

From Erich Boleyn, 3/9/96

Yet another patch to the CPU startup code. This patch should be on my FTP site for kernel 1.3.71 only. I'm not updating my 1.3.68 patches any more, and will likely write a README file to the effect of which patches are depreciated.

I think I fixed the problem with the non-zero boot CPU and no MP Configuration table.

There was another problem I didn't realize with any motherboard using no MP Configuration table (several dual-Pentium motherboards are this way). It would fail to start up some of them, as the local APIC version number wasn't being set. This should also be fixed.

From Erich Boleyn, 3/7/96

Whoops! I apparently broke something in my changes to fix the non-zero boot CPU and no MPC table case, so I backed those out of the patches on my FTP site listed below. Instead of fixing the intended case, it broke all non-zero boot CPU cases.

1.3.71: Looks like all of my previous fixes are there, and Alan's fixed the interrupt handling bug. It still won't handle the case of boot CPU != 0 and no MP Config table, but that's pretty rare and Alan and I will have a fix soon. Anyway, it's better to go with this version, if you can, as it apparently fixes almost all the other major problems.

From Erich Boleyn (lots of info from Alan Cox), 3/4/96

Good news:

For those interested, I have a 4-CPU Pentium Pro 200 MHz boot log from one of our test machines, an Intel Alder. This was from before I got the part in calling a CPU family 6 a Pentium Pro, and debugging was enabled, but you get the drift. Just under 800 BogoMIPs...

1.3.68 + my patches: Several more successes reported. No problems reported.

The patches from my ftp site should now work on all classes of Pentium and Pentium Pro machines. The only potential problem, the one about a non-zero boot CPU on a machine without an MPC configuration table (this only happens in a few dual-CPU systems), should be fixed now!

Bad news:

1.3.69: Has many of same problems as earlier kernels.

1.3.70: Some of my patches are there, but a few very important parts are missing. Even worse, Alan Cox discovered that a serious problem in the interrupt handling code was introduced in some other (non-SMP) patch from 1.3.69 to 1.3.70 that completely breaks SMP support. :-(

From Erich Boleyn, 2/25/96

Linux is now booting 4-way MP on the Intel Xtended Xpress test box I'm working on. Here are copies of the boot log and the CPU info.

The patches against kernel 1.3.68 plus a README file and a test boot disk image (for 3 1/2" disk) are on my FTP site. I think they will make it into the main releases for version 1.3.71. I tried the same code on several different Pentium and Pentium Pro test boxes we have, and it seems to work well on all of them.

IMPORTANT! Kernel versions other than (1.3.68 + my patches) won't work on several classes of Pentium and Pentium Pro machines!!!

Problems solved by my patches:

I tried compiling GCC (which has correct parallel makefiles) with 1, 2, and 4 jobs running in parallel (always on the same 4-CPU kernel), showing elapsed times of 10:28 (minutes:seconds), 6:37, and 4:48 respectively... not bad considering the relative maturity of the code. This was also running with an IDE disk, which spends a lot of time in the kernel, blocking the other CPUs from getting there.

Back to the Linux-SMP page, or the page on Intel SMP (via MultiProcessor Specification) for Free OS's.