mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 15:30:54 +07:00
KVM: Use generalized exception queue for injecting #UD
Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
parent
c1a5d4f990
commit
7ee5d940f5
@ -207,13 +207,6 @@ static bool svm_exception_injected(struct kvm_vcpu *vcpu)
|
||||
return !(svm->vmcb->control.exit_int_info & SVM_EXITINTINFO_VALID);
|
||||
}
|
||||
|
||||
static void inject_ud(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
to_svm(vcpu)->vmcb->control.event_inj = SVM_EVTINJ_VALID |
|
||||
SVM_EVTINJ_TYPE_EXEPT |
|
||||
UD_VECTOR;
|
||||
}
|
||||
|
||||
static int is_external_interrupt(u32 info)
|
||||
{
|
||||
info &= SVM_EVTINJ_TYPE_MASK | SVM_EVTINJ_VALID;
|
||||
@ -948,8 +941,7 @@ static int ud_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run)
|
||||
|
||||
er = emulate_instruction(&svm->vcpu, kvm_run, 0, 0, 0);
|
||||
if (er != EMULATE_DONE)
|
||||
inject_ud(&svm->vcpu);
|
||||
|
||||
kvm_queue_exception(&svm->vcpu, UD_VECTOR);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -1027,7 +1019,7 @@ static int vmmcall_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run)
|
||||
static int invalid_op_interception(struct vcpu_svm *svm,
|
||||
struct kvm_run *kvm_run)
|
||||
{
|
||||
inject_ud(&svm->vcpu);
|
||||
kvm_queue_exception(&svm->vcpu, UD_VECTOR);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -613,14 +613,6 @@ static bool vmx_exception_injected(struct kvm_vcpu *vcpu)
|
||||
return !(vmx->idt_vectoring_info & VECTORING_INFO_VALID_MASK);
|
||||
}
|
||||
|
||||
static void vmx_inject_ud(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
vmcs_write32(VM_ENTRY_INTR_INFO_FIELD,
|
||||
UD_VECTOR |
|
||||
INTR_TYPE_EXCEPTION |
|
||||
INTR_INFO_VALID_MASK);
|
||||
}
|
||||
|
||||
/*
|
||||
* Swap MSR entry in host/guest MSR entry array.
|
||||
*/
|
||||
@ -1866,8 +1858,7 @@ static int handle_exception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
||||
if (is_invalid_opcode(intr_info)) {
|
||||
er = emulate_instruction(vcpu, kvm_run, 0, 0, 0);
|
||||
if (er != EMULATE_DONE)
|
||||
vmx_inject_ud(vcpu);
|
||||
|
||||
kvm_queue_exception(vcpu, UD_VECTOR);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user