KVM: x86: virtualize cpuid faulting
Hardware support for faulting on the cpuid instruction is not required to emulate it, because cpuid triggers a VM exit anyways. KVM handles the relevant MSRs (MSR_PLATFORM_INFO and MSR_MISC_FEATURES_ENABLE) and upon a cpuid-induced VM exit checks the cpuid faulting state and the CPL. kvm_require_cpl is even kind enough to inject the GP fault for us. Signed-off-by: Kyle Huey <khuey@kylehuey.com> Reviewed-by: David Matlack <dmatlack@google.com> [Return "1" from kvm_emulate_cpuid, it's not void. - Paolo] Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
@@ -3854,6 +3854,13 @@ static int em_sti(struct x86_emulate_ctxt *ctxt)
|
||||
static int em_cpuid(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
u32 eax, ebx, ecx, edx;
|
||||
u64 msr = 0;
|
||||
|
||||
ctxt->ops->get_msr(ctxt, MSR_MISC_FEATURES_ENABLES, &msr);
|
||||
if (msr & MSR_MISC_FEATURES_ENABLES_CPUID_FAULT &&
|
||||
ctxt->ops->cpl(ctxt)) {
|
||||
return emulate_gp(ctxt, 0);
|
||||
}
|
||||
|
||||
eax = reg_read(ctxt, VCPU_REGS_RAX);
|
||||
ecx = reg_read(ctxt, VCPU_REGS_RCX);
|
||||
|
Reference in New Issue
Block a user