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



-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to