Checking the max cpuid leaf is not enough to figure whenever CPUID_V2_EXTENDED_TOPOLOGY is supported. Quoting a comment for CPUID_EXTENDED_TOPOLOGY in GetProcessorLocationByApicId():
// If CPUID.(EAX=0BH, ECX=0H):EBX returns zero and maximum input value for // basic CPUID information is greater than 0BH, then CPUID.0BH leaf is not // supported on that processor. Add a similar check for CPUID_V2_EXTENDED_TOPOLOGY to GetProcessorLocation2ByApicId(). Without this fix OVMF triggers an ASSERT when running in a kvm guest on latest (12th gen) intel processors. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2241388 Signed-off-by: Gerd Hoffmann <kra...@redhat.com> --- UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c b/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c index aa4eb11181f6..eff7f1f2043b 100644 --- a/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c +++ b/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c @@ -1424,6 +1424,7 @@ GetProcessorLocation2ByApicId ( ) { CPUID_EXTENDED_TOPOLOGY_EAX ExtendedTopologyEax; + CPUID_EXTENDED_TOPOLOGY_EBX ExtendedTopologyEbx; CPUID_EXTENDED_TOPOLOGY_ECX ExtendedTopologyEcx; UINT32 MaxStandardCpuIdIndex; UINT32 Index; @@ -1440,6 +1441,12 @@ GetProcessorLocation2ByApicId ( // AsmCpuid (CPUID_SIGNATURE, &MaxStandardCpuIdIndex, NULL, NULL, NULL); if (MaxStandardCpuIdIndex < CPUID_V2_EXTENDED_TOPOLOGY) { + ExtendedTopologyEbx.Uint32 = 0; + } else { + AsmCpuidEx (CPUID_V2_EXTENDED_TOPOLOGY, 0, NULL, &ExtendedTopologyEbx.Uint32, NULL, NULL); + } + + if (ExtendedTopologyEbx.Uint32 == 0) { if (Die != NULL) { *Die = 0; } -- 2.41.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109523): https://edk2.groups.io/g/devel/message/109523 Mute This Topic: https://groups.io/mt/101893551/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-