On Sun, Feb 14, 2010 at 11:20:44AM +0100, Jan Kiszka wrote: > From: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> > > Based on Gleb's suggestion: To avoid that user space migrates a pending > software exception or interrupt, mask them out on KVM_GET_VCPU_EVENTS. > Without this, user space would try to reinject them, and we would have > to reconstruct the proper instruction length for VMX event injection. > Now the pending event will be reinjected via executing the triggering > instruction again. > > Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> Looks good to me. > --- > arch/x86/kvm/x86.c | 9 ++++++--- > 1 files changed, 6 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 86b739f..50d1d2a 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -2121,14 +2121,17 @@ static void kvm_vcpu_ioctl_x86_get_vcpu_events(struct kvm_vcpu *vcpu, > { > vcpu_load(vcpu); > > - events->exception.injected = vcpu->arch.exception.pending; > + events->exception.injected = > + vcpu->arch.exception.pending && > + !kvm_exception_is_soft(vcpu->arch.exception.nr); > events->exception.nr = vcpu->arch.exception.nr; > events->exception.has_error_code = vcpu->arch.exception.has_error_code; > events->exception.error_code = vcpu->arch.exception.error_code; > > - events->interrupt.injected = vcpu->arch.interrupt.pending; > + events->interrupt.injected = > + vcpu->arch.interrupt.pending && !vcpu->arch.interrupt.soft; > events->interrupt.nr = vcpu->arch.interrupt.nr; > - events->interrupt.soft = vcpu->arch.interrupt.soft; > + events->interrupt.soft = 0; > > events->nmi.injected = vcpu->arch.nmi_injected; > events->nmi.pending = vcpu->arch.nmi_pending; -- Gleb. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html