From: Frank Zhu <[email protected]>

Add helpers to detect Zhaoxin CPUs using the "CentaurHauls" and
"  Shanghai  " vendor strings.

KVM handles Zhaoxin CPUs with its VMX backend. Add
host_cpu_is_intel_compatible for selftests that exercise behavior shared
by Intel and Zhaoxin CPUs, while retaining host_cpu_is_zhaoxin for
Zhaoxin-specific behavior.

Signed-off-by: Frank Zhu <[email protected]>
---
 tools/testing/selftests/kvm/include/x86/processor.h | 8 ++++++++
 tools/testing/selftests/kvm/lib/x86/processor.c     | 6 ++++++
 2 files changed, 14 insertions(+)

diff --git a/tools/testing/selftests/kvm/include/x86/processor.h 
b/tools/testing/selftests/kvm/include/x86/processor.h
index 6e6f70035..5d2be3399 100644
--- a/tools/testing/selftests/kvm/include/x86/processor.h
+++ b/tools/testing/selftests/kvm/include/x86/processor.h
@@ -23,6 +23,8 @@ extern bool host_cpu_is_intel;
 extern bool host_cpu_is_amd;
 extern bool host_cpu_is_hygon;
 extern bool host_cpu_is_amd_compatible;
+extern bool host_cpu_is_zhaoxin;
+extern bool host_cpu_is_intel_compatible;
 extern u64 guest_tsc_khz;
 extern struct kvm_mmu guest_mmu;
 
@@ -782,6 +784,12 @@ static inline bool this_cpu_is_hygon(void)
        return this_cpu_vendor_string_is("HygonGenuine");
 }
 
+static inline bool this_cpu_is_zhaoxin(void)
+{
+       return this_cpu_vendor_string_is("CentaurHauls") ||
+              this_cpu_vendor_string_is("  Shanghai  ");
+}
+
 static inline u32 __this_cpu_has(u32 function, u32 index, u8 reg, u8 lo, u8 hi)
 {
        u32 gprs[4];
diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c 
b/tools/testing/selftests/kvm/lib/x86/processor.c
index d31fa81ea..a183cf005 100644
--- a/tools/testing/selftests/kvm/lib/x86/processor.c
+++ b/tools/testing/selftests/kvm/lib/x86/processor.c
@@ -26,6 +26,8 @@ bool host_cpu_is_amd;
 bool host_cpu_is_intel;
 bool host_cpu_is_hygon;
 bool host_cpu_is_amd_compatible;
+bool host_cpu_is_zhaoxin;
+bool host_cpu_is_intel_compatible;
 bool is_forced_emulation_enabled;
 u64 guest_tsc_khz;
 struct kvm_mmu guest_mmu;
@@ -819,6 +821,8 @@ void kvm_arch_vm_post_create(struct kvm_vm *vm, unsigned 
int nr_vcpus)
        sync_global_to_guest(vm, host_cpu_is_amd);
        sync_global_to_guest(vm, host_cpu_is_hygon);
        sync_global_to_guest(vm, host_cpu_is_amd_compatible);
+       sync_global_to_guest(vm, host_cpu_is_zhaoxin);
+       sync_global_to_guest(vm, host_cpu_is_intel_compatible);
        sync_global_to_guest(vm, is_forced_emulation_enabled);
        sync_global_to_guest(vm, pmu_errata_mask);
 
@@ -1444,6 +1448,8 @@ void kvm_selftest_arch_init(void)
        host_cpu_is_amd = this_cpu_is_amd();
        host_cpu_is_hygon = this_cpu_is_hygon();
        host_cpu_is_amd_compatible = host_cpu_is_amd || host_cpu_is_hygon;
+       host_cpu_is_zhaoxin = this_cpu_is_zhaoxin();
+       host_cpu_is_intel_compatible = host_cpu_is_intel || host_cpu_is_zhaoxin;
        is_forced_emulation_enabled = kvm_is_forced_emulation_enabled();
 
        kvm_init_pmu_errata();
-- 
2.34.1



Reply via email to