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.
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.
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.
Use 2.0.14 or earlier!
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.
Use 2.0.1 or later!
#define idle_task (task[this_cpu])...to...
#define idle_task (task[cpu_number_map[this_cpu]])
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.
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...
I thought I'd have a fix, but the problem was more serious than I thought, so none for now...
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.
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.
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.
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. :-(
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:
Back to the Linux-SMP page, or the page on Intel SMP (via MultiProcessor Specification) for Free OS's.