Commit 7ee5d940 authored by Avi Kivity's avatar Avi Kivity

KVM: Use generalized exception queue for injecting #UD

Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent c1a5d4f9
...@@ -207,13 +207,6 @@ static bool svm_exception_injected(struct kvm_vcpu *vcpu) ...@@ -207,13 +207,6 @@ static bool svm_exception_injected(struct kvm_vcpu *vcpu)
return !(svm->vmcb->control.exit_int_info & SVM_EXITINTINFO_VALID); 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) static int is_external_interrupt(u32 info)
{ {
info &= SVM_EVTINJ_TYPE_MASK | SVM_EVTINJ_VALID; 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) ...@@ -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); er = emulate_instruction(&svm->vcpu, kvm_run, 0, 0, 0);
if (er != EMULATE_DONE) if (er != EMULATE_DONE)
inject_ud(&svm->vcpu); kvm_queue_exception(&svm->vcpu, UD_VECTOR);
return 1; return 1;
} }
...@@ -1027,7 +1019,7 @@ static int vmmcall_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) ...@@ -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, static int invalid_op_interception(struct vcpu_svm *svm,
struct kvm_run *kvm_run) struct kvm_run *kvm_run)
{ {
inject_ud(&svm->vcpu); kvm_queue_exception(&svm->vcpu, UD_VECTOR);
return 1; return 1;
} }
......
...@@ -613,14 +613,6 @@ static bool vmx_exception_injected(struct kvm_vcpu *vcpu) ...@@ -613,14 +613,6 @@ static bool vmx_exception_injected(struct kvm_vcpu *vcpu)
return !(vmx->idt_vectoring_info & VECTORING_INFO_VALID_MASK); 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. * 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) ...@@ -1866,8 +1858,7 @@ static int handle_exception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
if (is_invalid_opcode(intr_info)) { if (is_invalid_opcode(intr_info)) {
er = emulate_instruction(vcpu, kvm_run, 0, 0, 0); er = emulate_instruction(vcpu, kvm_run, 0, 0, 0);
if (er != EMULATE_DONE) if (er != EMULATE_DONE)
vmx_inject_ud(vcpu); kvm_queue_exception(vcpu, UD_VECTOR);
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment