Hi,
devsau wrote:Thanks, that was pretty much my guess. Question though about IPI (all except self). You mentioned it could potentially wake factory disabled cores and I presume these aren't reported in ACPI/MP tables. So that makes me curious, how does the firmware determine if it's supposed to be "disabled."?
It won't wake factory disabled cores.
When you turn a computer on the CPUs do a self test; then the firmware starts all of them (to setup things like the MTRRs, SMM area, etc) and the CPU tells the firmware if it failed its self test. If the CPU failed its self test then the firmware doesn't include it in the ACPI table (and/or MP specification table) so that the OS won't use it. If the OS broadcasts the startup sequence, then faulty CPUs get started/used.
Also, for some systems there's a BIOS option to enable/disable hyper-threading (where the user may have disabled it because it doesn't help performance, especially on older Pentium4/Netburst systems). For some of these systems (also Pentium4/Netburst systems) hyper-threading isn't "fully disabled" and the firmware just doesn't include them in the ACPI table (and/or MP specification table) so that the OS won't use it. If the OS broadcasts the startup sequence, then "deliberately disabled for performance reasons" CPUs get started/used.
In addition to both these problems; a CPU that does exist and should start may not start correctly. I good OS would detect this (e.g. using a time-out) and might or might not retry, and would definitely report the problem to the user. If the OS broadcasts the startup sequence, then it becomes very difficult to detect this.
Finally, either of the first 2 problems can occur at the same time as the third problem. For example, if the BIOS sees 3 working CPUs and one faulty CPU (and creates the ACPI/MP spec table with entries for the 3 working CPUs); and the OS broadcasts the startup sequence; then the OS might start 2 working CPUs and one faulty CPU, and one of the working CPUs might fail to start. In that cause the OS might be expecting 3 CPUs to start and 3 CPUs were started.
Mostly, in terms of software quality, there's a massive difference between "seems to work" and "actually works"; and broadcasting the startup sequence only "seems to work" (e.g. when there's no problems to notice) but does not work (when there are problems).
Cheers,
Brendan