|
From: Daniel R. <cos...@gm...> - 2006-04-20 19:19:33
|
> I had a look at the MP specification and it says that there should > always be an INIT IPI at the beginning. I've tried that, too - without > any effect... Hi Manuel, I just looked it up and, according to the multiprocessor specifications, you are right here: A INIT IPI really seems to be needed before the AP may even accept a STARTUP IPI. Unless we want to support 486 processors, it's however not necessary to set the CMOS' warm reboot vector, as modern processors don't really reset on an INIT IPI. All they do is to return to real-mode, before they enter a wait-for-SIPI state. Apart from that the STARTUP IPI obviously has to be sent twice in a row (Intel Reference Manual, 7.5) ? The code I just added to the CVS now send an INIT-SIPI-SIPI sequence exactly as specified by the documentation. Apart from that I also fixed a possible bug in SendStartupIPI() by explicitly setting the assert-flag. Actually all IPI's, except for INIT de-assert, must have this flag set, although the Intel reference manual also states that modern CPUs should ignore it. If we're lucky AMD is just a bit more picky then the rest.. regards, cosmo86 |