From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
stable@vger.kernel.org, Stas Sergeev <stsp2@yandex.ru>
Subject: Re: [PATCH v3] KVM: x86: accept userspace interrupt only if no event is injected
Date: Wed, 28 Jul 2021 23:11:08 +0000 [thread overview]
Message-ID: <YQHkDDN+T3mFTcP+@google.com> (raw)
In-Reply-To: <20210727210916.1652841-1-pbonzini@redhat.com>
On Tue, Jul 27, 2021, Paolo Bonzini wrote:
> Once an exception has been injected, any side effects related to
> the exception (such as setting CR2 or DR6) have been taked place.
> Therefore, once KVM sets the VM-entry interruption information
> field or the AMD EVENTINJ field, the next VM-entry must deliver that
> exception.
>
> Pending interrupts are processed after injected exceptions, so
> in theory it would not be a problem to use KVM_INTERRUPT when
> an injected exception is present. However, DOSEMU is using
> run->ready_for_interrupt_injection to detect interrupt windows
> and then using KVM_SET_SREGS/KVM_SET_REGS to inject the
> interrupt manually. For this to work, the interrupt window
> must be delayed after the completion of the previous event
> injection.
>
> Cc: stable@vger.kernel.org
> Reported-by: Stas Sergeev <stsp2@yandex.ru>
> Tested-by: Stas Sergeev <stsp2@yandex.ru>
> Fixes: 71cc849b7093 ("KVM: x86: Fix split-irqchip vs interrupt injection window request")
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> arch/x86/kvm/x86.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 4116567f3d44..e5d5c5ed7dd4 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -4358,8 +4358,17 @@ static int kvm_cpu_accept_dm_intr(struct kvm_vcpu *vcpu)
>
> static int kvm_vcpu_ready_for_interrupt_injection(struct kvm_vcpu *vcpu)
> {
> - return kvm_arch_interrupt_allowed(vcpu) &&
> - kvm_cpu_accept_dm_intr(vcpu);
> + /*
> + * Do not cause an interrupt window exit if an exception
> + * is pending or an event needs reinjection; userspace
> + * might want to inject the interrupt manually using KVM_SET_REGS
> + * or KVM_SET_SREGS. For that to work, we must be at an
> + * instruction boundary and with no events half-injected.
> + */
> + return (kvm_arch_interrupt_allowed(vcpu) &&
Ha, adding a '(' is one way to fix the indentation.
Reviewed-by: Sean Christopherson <seanjc@google.com>
> + kvm_cpu_accept_dm_intr(vcpu) &&
> + !kvm_event_needs_reinjection(vcpu) &&
> + !vcpu->arch.exception.pending);
> }
>
> static int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu,
> --
> 2.27.0
>
next prev parent reply other threads:[~2021-07-28 23:11 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-27 21:09 [PATCH v3] KVM: x86: accept userspace interrupt only if no event is injected Paolo Bonzini
2021-07-28 23:11 ` Sean Christopherson [this message]
2021-08-06 17:59 ` stsp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YQHkDDN+T3mFTcP+@google.com \
--to=seanjc@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=stable@vger.kernel.org \
--cc=stsp2@yandex.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.