From: Frank Zhu <[email protected]>

Add infrastructure to detect Zhaoxin CPUs in KVM selftests. Zhaoxin
CPUs use vendor strings "CentaurHauls" or "  Shanghai  " and implement
VMX-compatible virtualization technology.

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

diff --git a/tools/testing/selftests/kvm/include/x86/processor.h 
b/tools/testing/selftests/kvm/include/x86/processor.h
index b161174ece45..9840b583877c 100644
--- a/tools/testing/selftests/kvm/include/x86/processor.h
+++ b/tools/testing/selftests/kvm/include/x86/processor.h
@@ -23,6 +23,7 @@ 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_zx;
 extern u64 guest_tsc_khz;
 
 #ifndef MAX_NR_CPUID_ENTRIES
@@ -744,6 +745,12 @@ static inline bool this_cpu_is_hygon(void)
        return this_cpu_vendor_string_is("HygonGenuine");
 }
 
+static inline bool this_cpu_is_zx(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 ef56dcefe011..a8ea591ebe8e 100644
--- a/tools/testing/selftests/kvm/lib/x86/processor.c
+++ b/tools/testing/selftests/kvm/lib/x86/processor.c
@@ -26,6 +26,7 @@ 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_zx;
 bool is_forced_emulation_enabled;
 u64 guest_tsc_khz;
 
@@ -816,6 +817,7 @@ 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_zx);
        sync_global_to_guest(vm, is_forced_emulation_enabled);
        sync_global_to_guest(vm, pmu_errata_mask);
 
@@ -1430,6 +1432,7 @@ 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_zx = this_cpu_is_zx();
        is_forced_emulation_enabled = kvm_is_forced_emulation_enabled();
 
        kvm_init_pmu_errata();
-- 
2.34.1



Reply via email to