Eric, Ray, Rahul -- can you ACK this patch please? I intend to merge it
in one or two days.

Thanks
Laszlo

On 10/17/23 13:42, Laszlo Ersek wrote:
> On 10/17/23 13:28, Gerd Hoffmann wrote:
>> Checking the max cpuid leaf is not enough to figure whenever
>> CPUID_V2_EXTENDED_TOPOLOGY is supported.  Intel SDM says:
>>
>>    Software must detect the presence of CPUID leaf 1FH by verifying
>>    (a) the highest leaf index supported by CPUID is >= 1FH, and
>>    (b) CPUID.1FH:EBX[15:0] reports a non-zero value.
>>
>> The same is true for CPUID leaf 0BH.
>>
>> This patch adds the EBX check to GetProcessorLocation2ByApicId().  The
>> patch also fixes the existing check in GetProcessorLocationByApicId() to
>> be in line with the spec by looking at bits 15:0.  The comments are
>> updated with a quote from the Intel SDM.
>>
>> Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2241388
>> Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
>> ---
>>  .../BaseXApicX2ApicLib/BaseXApicX2ApicLib.c   | 21 ++++++++++++++-----
>>  1 file changed, 16 insertions(+), 5 deletions(-)
>>
>> diff --git a/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c 
>> b/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c
>> index aa4eb11181f6..c0a847583330 100644
>> --- a/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c
>> +++ b/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c
>> @@ -1294,11 +1294,12 @@ GetProcessorLocationByApicId (
>>        NULL
>>        );
>>      //
>> -    // 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.
>> +    // Quoting Intel SDM:
>> +    // Software must detect the presence of CPUID leaf 0BH by
>> +    // verifying (a) the highest leaf index supported by CPUID is >=
>> +    // 0BH, and (b) CPUID.0BH:EBX[15:0] reports a non-zero value.
>>      //
>> -    if (ExtendedTopologyEbx.Uint32 != 0) {
>> +    if (ExtendedTopologyEbx.Bits.LogicalProcessors != 0) {
>>        TopologyLeafSupported = TRUE;
>>  
>>        //
>> @@ -1424,6 +1425,7 @@ GetProcessorLocation2ByApicId (
>>    )
>>  {
>>    CPUID_EXTENDED_TOPOLOGY_EAX  ExtendedTopologyEax;
>> +  CPUID_EXTENDED_TOPOLOGY_EBX  ExtendedTopologyEbx;
>>    CPUID_EXTENDED_TOPOLOGY_ECX  ExtendedTopologyEcx;
>>    UINT32                       MaxStandardCpuIdIndex;
>>    UINT32                       Index;
>> @@ -1436,10 +1438,19 @@ GetProcessorLocation2ByApicId (
>>    }
>>  
>>    //
>> -  // Get max index of CPUID
>> +  // Quoting Intel SDM:
>> +  // Software must detect the presence of CPUID leaf 1FH by verifying
>> +  // (a) the highest leaf index supported by CPUID is >= 1FH, and (b)
>> +  // CPUID.1FH:EBX[15:0] reports a non-zero value.
>>    //
>>    AsmCpuid (CPUID_SIGNATURE, &MaxStandardCpuIdIndex, NULL, NULL, NULL);
>>    if (MaxStandardCpuIdIndex < CPUID_V2_EXTENDED_TOPOLOGY) {
>> +    ExtendedTopologyEbx.Bits.LogicalProcessors = 0;
>> +  } else {
>> +    AsmCpuidEx (CPUID_V2_EXTENDED_TOPOLOGY, 0, NULL, 
>> &ExtendedTopologyEbx.Uint32, NULL, NULL);
>> +  }
>> +
>> +  if (ExtendedTopologyEbx.Bits.LogicalProcessors == 0) {
>>      if (Die != NULL) {
>>        *Die = 0;
>>      }
> 
> Reviewed-by: Laszlo Ersek <ler...@redhat.com>
> 
> Thanks!
> Laszlo
> 
> 
> 
> 
> 
> 



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


Reply via email to