audk/UefiCpuPkg
Laszlo Ersek 4af3ae1463 UefiCpuPkg/LocalApicLib: fix feature test for Extended Topology CPUID leaf
According to the Intel SDM (325462-060US / September 2016),

> INPUT EAX = 0BH: Returns Extended Topology Information
>
> [...] 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. [...]

The LocalApicLib instances in UefiCpuPkg do not perform check (b).

This causes an actual bug in the following OVMF setup:

- Intel W3550 host processor <http://ark.intel.com/products/39720/>,

- the QEMU/KVM guest's VCPU model is set to "host", that is, "the CPU
  visible to the guest should be exactly the same as the host CPU".

In the GetInitialApicId() function, check (a) passes: the CPUID level of
the W3550 is exactly 11 decimal. However, leaf 11 itself is not supported,
therefore EDX is set to zero:

> If a value entered for CPUID.EAX is less than or equal to the maximum
> input value and the leaf is not supported on that processor then 0 is
> returned in all the registers.

Because we don't check (b), we return 0 as initial APIC ID on the BSP and
on all of the APs as well.

Add the missing check.

Cc: Jeff Fan <jeff.fan@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jeff Fan <jeff.fan@intel.com>
2016-11-23 21:41:05 +01:00
..
Application/Cpuid UefiCpuPkg/Cpuid: Remove wrong while-loop check after for-loop 2016-10-18 09:15:44 +08:00
CpuDxe UefiCpuPkg/CpuDxe: Fix duplicated status code report 2016-09-14 08:54:24 +08:00
CpuIo2Dxe UefiCpuPkg CpuIo2Dxe: Update INF to refer to NASM source file 2016-07-11 13:20:22 +08:00
CpuIo2Smm UefiCpuPkg: Convert all .uni files to utf-8 2015-12-15 04:59:14 +00:00
CpuIoPei UefiCpuPkg: Convert all .uni files to utf-8 2015-12-15 04:59:14 +00:00
CpuMpPei UefiCpuPkg/CpuMpPei: Build GUIDed-HOB to store all CPU BIST Data 2016-09-14 08:54:36 +08:00
CpuS3DataDxe UefiCpuPkg/CpuS3DataDxe: Consume PcdAcpiS3Enable to control the code 2016-09-01 08:18:59 -07:00
Feature/Capsule UefiCpuPkg/MicrocodeUpdate: Add Microcode FMP build sample 2016-11-08 22:43:24 +08:00
Include UefiCpuPkg/Include: Add MicrocodeFlashAccessLib header. 2016-11-08 22:43:16 +08:00
Library UefiCpuPkg/LocalApicLib: fix feature test for Extended Topology CPUID leaf 2016-11-23 21:41:05 +01:00
PiSmmCommunication UefiCpuPkg: Convert all .uni files to utf-8 2015-12-15 04:59:14 +00:00
PiSmmCpuDxeSmm UefiCpuPkg/PiSmmCpuDxeSmm: dynamic PcdCpuSmmApSyncTimeout, PcdCpuSmmSyncMode 2016-11-22 09:02:54 +01:00
ResetVector UefiCpuPkg: Convert all .uni files to utf-8 2015-12-15 04:59:14 +00:00
SecCore UefiCpuPkg/SecCore: Correct print format for stack information 2016-11-18 09:43:53 +08:00
Universal/Acpi/S3Resume2Pei UefiCpuPkg: Display new stack base and size 2016-11-09 16:00:15 +08:00
Contributions.txt */Contributions.txt: Update example email address 2015-02-03 17:29:14 +00:00
License.txt
UefiCpuPkg.dec UefiCpuPkg/PiSmmCpuDxeSmm: dynamic PcdCpuSmmApSyncTimeout, PcdCpuSmmSyncMode 2016-11-22 09:02:54 +01:00
UefiCpuPkg.dsc UefiCpuPkg/UefiCpuPkg.dsc: Add MicrocodeCapsule related component. 2016-11-08 22:40:43 +08:00
UefiCpuPkg.uni UefiCpuPkg: Add PCD PcdCpuApTargetCstate 2015-12-18 03:23:53 +00:00
UefiCpuPkgExtra.uni UefiCpuPkg: Convert all .uni files to utf-8 2015-12-15 04:59:14 +00:00