mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/MpInitLib: Use AsmCpuidEx() for CPUID_EXTENDED_TOPOLOGY leaf
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.
Fixes: d4d7c9ad5f
("UefiCpuPkg/MpInitLib: use BSP to do extended ...")
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
parent
d451bba399
commit
447798cd3a
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue