[PATCH v2 0/9] target/i386: Fix Hygon vendor-specific CPU behavior
Tina Zhang <[email protected]>
| Newsgroups | org.kernel.vger.kvm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Hygon Dhyana uses the HygonGenuine vendor string, but a number of
guest-visible and KVM-facing interfaces follow AMD-compatible behavior.
QEMU currently keys several of these paths only on AuthenticAMD, so Hygon
guests can see vendor-inconsistent CPUID/MSR state or use the wrong KVM
PMU/MCE handling paths.
This series makes those checks explicit for Hygon where appropriate.
Guest-visible CPU ABI changes are gated by the new
x-hygon-vendor-abi-fixes property. The property defaults to true for new
machine types and is disabled for pc-11.0 and older, so existing machine
types keep their previous Hygon ABI for migration compatibility.
The KVM injected-MCE and PMU path changes are not CPUID model table
changes. They make QEMU use the AMD-compatible runtime handling that
Linux/KVM already uses for Hygon.
The series covers:
* AMD CPUID[0x80000001].EDX aliases for Hygon
* hiding Intel cache CPUID leaves 2 and 4 for Hygon
* hiding IA32_ARCH_CAPABILITIES for Hygon unless old ABI requires it
* AMD MCE status encoding for Hygon memory-failure injection
* AMD PMU MSR setup/save/restore paths for Hygon
* disabling Intel-style MCA broadcast for Hygon injected MCEs
* AMD IOMMU HT GPA hole layout for Hygon on new machine types
* AMD legacy cache fallback for Hygon when legacy-cache=on
* AMD-shaped default ucode-rev value for Hygon
Changes in v2:
* Rebased onto v11.1.0-rc3. Moved the compatibility property to
pc_compat_11_1 and wired it into the i440fx and q35 11.1 machine
options. (Zhao)
* Patch 1: removed the single-use CPUID-alias helper and checked Hygon
directly at the call site. Also updated the hygon_vendor_abi_fixes
field comment to emphasize that it is a machine-type compatibility
option. (Zhao)
* Patch 4: removed the single-use MCE-status helper and checked Hygon
directly at the call site. (Zhao)
* Patch 5: reworked the PMU vendor checks around a common PMU vendor-family
abstraction, covering host/guest compatibility, PMU initialization,
and PMU MSR save/restore. (Zhao)
* Collected Reviewed-by tags for patches 2, 3, and 8.
Tested with:
ninja -C build
build/pyvenv/bin/meson test -C build --print-errorlogs \
qemu:qtest-x86_64/test-x86-cpuid-compat \
qemu:func-x86_64-mem_addr_space
Tina Zhang (9):
target/i386: Sync AMD CPUID aliases for Hygon
target/i386: Hide Intel cache CPUID leaves for Hygon
target/i386: Hide ARCH_CAPABILITIES for Hygon
target/i386/kvm: Use AMD MCE status encoding for Hygon
target/i386/kvm: Use AMD PMU MSR paths for Hygon
target/i386: Do not broadcast injected MCEs for Hygon
hw/i386: Reserve AMD IOMMU HT GPA range for Hygon
target/i386: Use AMD legacy cache fallback for Hygon
target/i386: Use AMD ucode-rev default for Hygon
hw/i386/pc.c | 23 ++++-
hw/i386/pc_piix.c | 1 +
hw/i386/pc_q35.c | 1 +
include/hw/i386/pc.h | 3 +
target/i386/cpu.c | 73 ++++++++++----
target/i386/cpu.h | 13 +++
target/i386/helper.c | 2 +-
target/i386/kvm/kvm.c | 75 +++++++++++----
.../functional/x86_64/test_mem_addr_space.py | 37 ++++++++
tests/qtest/test-x86-cpuid-compat.c | 95 +++++++++++++++++++
10 files changed, 282 insertions(+), 41 deletions(-)
--
2.43.7