[coreboot] SMP stop_this_cpu and AP_IN_SIPI_WAIT

Kyösti Mälkki kyosti.malkki at gmail.com
Sat Mar 10 10:21:33 CET 2012


There are currently two different versions of stop_this_cpu() used to
halt an AP CPU after init and microcode update.


Alternative #1, the default

stop_this_cpu()
{
  while (1) { hlt() }
}


Alternative #2, used on selected Intel Cores

stop_this_cpu()
{
  send INIT IPI message to self

  /* should not reach here */
  while (1) { hlt() }
}


I would like to know the reasoning for implementing #2. Was this a
solution to an observed problem? The commentary speaks about
hyper-threading, while the processor models with the AP_IN_SIPI_WAIT
enabled are really multi-core.

I believe alternative #1 one is not sufficient for any SMP platform. If
an exception raises and the AP CPU has NULL IDT, a hyper-threading CPU
may shutdown its sibling CPUs in the same physical package. If there is
a valid IDT and the exception handler returns, memory at CS:EIP may no
longer contain the hlt() loop.


Thanks,
KM






More information about the coreboot mailing list