Please ignore this email! It's a mistake. I'm so sorry. Best Regards. Jinke Fan. On 2019/9/11 15:48, Jinke Fan wrote: > From: Pu Wen <puwen@xxxxxxxx> > > The Hygon Dhyana CPU has the SVM feature as AMD family 17h does. > So enable the KVM infrastructure support to it. > > Signed-off-by: Pu Wen <puwen@xxxxxxxx> > Signed-off-by: Borislav Petkov <bp@xxxxxxx> > Reviewed-by: Borislav Petkov <bp@xxxxxxx> > Cc: pbonzini@xxxxxxxxxx > Cc: rkrcmar@xxxxxxxxxx > Cc: tglx@xxxxxxxxxxxxx > Cc: mingo@xxxxxxxxxx > Cc: hpa@xxxxxxxxx > Cc: x86@xxxxxxxxxx > Cc: thomas.lendacky@xxxxxxx > Cc: kvm@xxxxxxxxxxxxxxx > Link: https://lkml.kernel.org/r/654dd12876149fba9561698eaf9fc15d030301f8.1537533369.git.puwen@xxxxxxxx > --- > arch/x86/include/asm/kvm_emulate.h | 4 ++++ > arch/x86/include/asm/virtext.h | 5 +++-- > arch/x86/kvm/emulate.c | 11 ++++++++++- > 3 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/include/asm/kvm_emulate.h b/arch/x86/include/asm/kvm_emulate.h > index 0f82cd91cd3c..93c4bf598fb0 100644 > --- a/arch/x86/include/asm/kvm_emulate.h > +++ b/arch/x86/include/asm/kvm_emulate.h > @@ -364,6 +364,10 @@ struct x86_emulate_ctxt { > #define X86EMUL_CPUID_VENDOR_AMDisbetterI_ecx 0x21726574 > #define X86EMUL_CPUID_VENDOR_AMDisbetterI_edx 0x74656273 > > +#define X86EMUL_CPUID_VENDOR_HygonGenuine_ebx 0x6f677948 > +#define X86EMUL_CPUID_VENDOR_HygonGenuine_ecx 0x656e6975 > +#define X86EMUL_CPUID_VENDOR_HygonGenuine_edx 0x6e65476e > + > #define X86EMUL_CPUID_VENDOR_GenuineIntel_ebx 0x756e6547 > #define X86EMUL_CPUID_VENDOR_GenuineIntel_ecx 0x6c65746e > #define X86EMUL_CPUID_VENDOR_GenuineIntel_edx 0x49656e69 > diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h > index 0116b2ee9e64..e05e0d309244 100644 > --- a/arch/x86/include/asm/virtext.h > +++ b/arch/x86/include/asm/virtext.h > @@ -83,9 +83,10 @@ static inline void cpu_emergency_vmxoff(void) > */ > static inline int cpu_has_svm(const char **msg) > { > - if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) { > + if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD && > + boot_cpu_data.x86_vendor != X86_VENDOR_HYGON) { > if (msg) > - *msg = "not amd"; > + *msg = "not amd or hygon"; > return 0; > } > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index 106482da6388..34edf198708f 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -2711,7 +2711,16 @@ static bool em_syscall_is_enabled(struct x86_emulate_ctxt *ctxt) > edx == X86EMUL_CPUID_VENDOR_AMDisbetterI_edx) > return true; > > - /* default: (not Intel, not AMD), apply Intel's stricter rules... */ > + /* Hygon ("HygonGenuine") */ > + if (ebx == X86EMUL_CPUID_VENDOR_HygonGenuine_ebx && > + ecx == X86EMUL_CPUID_VENDOR_HygonGenuine_ecx && > + edx == X86EMUL_CPUID_VENDOR_HygonGenuine_edx) > + return true; > + > + /* > + * default: (not Intel, not AMD, not Hygon), apply Intel's > + * stricter rules... > + */ > return false; > } > >