On 10/13/2015 08:26 AM, Laszlo Ersek wrote:

First of all, if the edk2 reference code (in the SMM core and in
PiSmmCpuDxeSmm) depends on such behavior justifiedly, then I think we
have a bug in the PI specification. Namely, version 1.4 thereof does not
seem to require that EFI_SMM_CONTROL2_PROTOCOL.Trigger() raise an SMI on
*all* processors. (See volume 4, section 5.4.)

In particular, the EFI_SMM_CONTROL2_PROTOCOL.Trigger() specification
makes many references to SMI handling and dispatching. But I cannot make
a mental connection between an SMI "broadcast", and "handling and
dispatching" in edk2, since all "handling and dispatching" code in edk2
that is exposed via protocols, is non-reentrant with regard to multiple
VCPUs, to my knowledge.

One could argue that whatever code handles the SMI on the BP is
responsible for bringing the APs into SMM as well, before doing any
sensitive work. I'm not sure.

Traditionally, SMI handling has been global. If the h/w didn't broadcast the SMI to all CPUs, the SMI handler did so itself. The BSP would wait for all APs to "check in" to SMM, then it would do whatever work the SMI required, and signal the APs to resume. That ensured that the OS wasn't active on the machine while the BSP was handling the SMI, which was required for certain uses of SMI.

However, this (obviously) doesn't scale well, so Intel has been moving towards signaling SMI to only a single processor, and avoiding the machine-wide rendezvous when it isn't necessary. BIOS implementations may be lagging behind.


Second, if writing to ioport 0xb2 should *automatically* raise an SMI on
all processors, then the QEMU code could be incorrect. However I could
never derive such an "imperative" from the ICH9 spec.

I too am having a hard time finding a clear statement of whether or not ioport 0xb2 should *automatically* raise an SMI on all processors. Maybe it's platform-specific?
--

                                                Brian J. Johnson

--------------------------------------------------------------------

  My statements are my own, are not authorized by SGI, and do not
  necessarily represent SGI’s positions.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to