On 11/6/23 17:15, Tom Lendacky wrote:
On 11/6/23 16:45, Lendacky, Thomas via groups.io wrote:
The CPUID_EXTENDED_TOPOLOGY CPUID leaf takes a subleaf as input when
returning CPUID information. However, the AsmCpuid() function does not
zero out ECX before the CPUID instruction, so the input leaf is used as
the sub-leaf for the CPUID request and returns erroneous/invalid CPUID
data, since the intent of the request was to get data related to sub-leaf
0. Instead, use AsmCpuidEx() for the CPUID_EXTENDED_TOPOLOGY leaf.

Alternatively, the AsmCpuid() function could be changed to XOR ECX before invoking the CPUID instruction. This would ensure that the 0 sub-leaf is returned for any CPUID leaves that support sub-leaves. Thoughts?

Adding some additional maintainers for their thoughts, too.

Any thoughts on this approach (as a separate, unrelated patch) to eliminate future issues that could pop up?

Seems like zeroing out ECX before calling CPUID would be an appropriate thing to do, but I'm not sure if that will have any impact on the existing code base... it shouldn't, but you never know.

Thanks,
Tom


Thanks,
Tom


Fixes: d4d7c9ad5fe5 ("UefiCpuPkg/MpInitLib: use BSP to do extended ...")
Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com>
---
  UefiCpuPkg/Library/MpInitLib/AmdSev.c | 9 ++++++++-
  1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/UefiCpuPkg/Library/MpInitLib/AmdSev.c b/UefiCpuPkg/Library/MpInitLib/AmdSev.c
index bda4960f6fd3..d34f9513e002 100644
--- a/UefiCpuPkg/Library/MpInitLib/AmdSev.c
+++ b/UefiCpuPkg/Library/MpInitLib/AmdSev.c
@@ -256,7 +256,14 @@ FillExchangeInfoDataSevEs (
    if (StdRangeMax >= CPUID_EXTENDED_TOPOLOGY) {
      CPUID_EXTENDED_TOPOLOGY_EBX  ExtTopoEbx;
-    AsmCpuid (CPUID_EXTENDED_TOPOLOGY, NULL, &ExtTopoEbx.Uint32, NULL, NULL);
+    AsmCpuidEx (
+      CPUID_EXTENDED_TOPOLOGY,
+      0,
+      NULL,
+      &ExtTopoEbx.Uint32,
+      NULL,
+      NULL
+      );
      ExchangeInfo->ExtTopoAvail = !!ExtTopoEbx.Bits.LogicalProcessors;
    }
  }


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111810): https://edk2.groups.io/g/devel/message/111810
Mute This Topic: https://groups.io/mt/102432782/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to