Commit a0a07cd2 authored by Gleb Natapov's avatar Gleb Natapov Committed by Avi Kivity

KVM: SVM: do not generate "external interrupt exit" if other exit is pending

Nested SVM checks for external interrupt after injecting nested exception.
In case there is external interrupt pending the code generates "external
interrupt exit" and overwrites previous exit info. If previously injected
exception already generated exit it will be lost.
Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
Acked-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
parent f4f51050
...@@ -1707,6 +1707,14 @@ static inline bool nested_svm_intr(struct vcpu_svm *svm) ...@@ -1707,6 +1707,14 @@ static inline bool nested_svm_intr(struct vcpu_svm *svm)
if (!(svm->vcpu.arch.hflags & HF_HIF_MASK)) if (!(svm->vcpu.arch.hflags & HF_HIF_MASK))
return false; return false;
/*
* if vmexit was already requested (by intercepted exception
* for instance) do not overwrite it with "external interrupt"
* vmexit.
*/
if (svm->nested.exit_required)
return false;
svm->vmcb->control.exit_code = SVM_EXIT_INTR; svm->vmcb->control.exit_code = SVM_EXIT_INTR;
svm->vmcb->control.exit_info_1 = 0; svm->vmcb->control.exit_info_1 = 0;
svm->vmcb->control.exit_info_2 = 0; svm->vmcb->control.exit_info_2 = 0;
......
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