diff mbox

KVM: SVM: fix NMI window after iret

Message ID 1389988362-15260-1-git-send-email-rkrcmar@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Radim Krčmář Jan. 17, 2014, 7:52 p.m. UTC
We should open NMI window right after an iret, but SVM exits before it.
We wanted to single step using the trap flag and then open it.
(or we could emulate the iret instead)
We don't do it since commit 3842d135ff2 (likely), because the iret exit
handler does not request an event, so NMI window remains closed until
the next exit.

Fix this by making KVM_REQ_EVENT request in the iret handler.

Signed-off-by: Radim Kr?má? <rkrcmar@redhat.com>
---
 (btw. kvm-unit-tests weren't executed on SVM since Nov 2010, at least)

 arch/x86/kvm/svm.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Greg Kroah-Hartman Jan. 17, 2014, 8:18 p.m. UTC | #1
On Fri, Jan 17, 2014 at 08:52:42PM +0100, Radim Kr?má? wrote:
> We should open NMI window right after an iret, but SVM exits before it.
> We wanted to single step using the trap flag and then open it.
> (or we could emulate the iret instead)
> We don't do it since commit 3842d135ff2 (likely), because the iret exit
> handler does not request an event, so NMI window remains closed until
> the next exit.
> 
> Fix this by making KVM_REQ_EVENT request in the iret handler.
> 
> Signed-off-by: Radim Kr?má? <rkrcmar@redhat.com>
> ---
>  (btw. kvm-unit-tests weren't executed on SVM since Nov 2010, at least)
> 
>  arch/x86/kvm/svm.c | 1 +
>  1 file changed, 1 insertion(+)


<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read Documentation/stable_kernel_rules.txt
for how to do this properly.

</formletter>
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Radim Krčmář Jan. 17, 2014, 8:29 p.m. UTC | #2
2014-01-17 12:18-0800, Greg KH:
> On Fri, Jan 17, 2014 at 08:52:42PM +0100, Radim Kr?má? wrote:
> > We should open NMI window right after an iret, but SVM exits before it.
> > We wanted to single step using the trap flag and then open it.
> > (or we could emulate the iret instead)
> > We don't do it since commit 3842d135ff2 (likely), because the iret exit
> > handler does not request an event, so NMI window remains closed until
> > the next exit.
> > 
> > Fix this by making KVM_REQ_EVENT request in the iret handler.
> > 
> > Signed-off-by: Radim Kr?má? <rkrcmar@redhat.com>
> > ---
> >  (btw. kvm-unit-tests weren't executed on SVM since Nov 2010, at least)
> > 
> >  arch/x86/kvm/svm.c | 1 +
> >  1 file changed, 1 insertion(+)
> 
> 
> <formletter>
> 
> This is not the correct way to submit patches for inclusion in the
> stable kernel tree.  Please read Documentation/stable_kernel_rules.txt
> for how to do this properly.
> 
> </formletter>

Welp, at the last second, I decided it is not that critical to have it
in stable and forgot to clean the git-send-email command line too.

Please ignore this patch in stable.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Paolo Bonzini Feb. 18, 2014, 9:18 a.m. UTC | #3
Il 17/01/2014 20:52, Radim Kr?má? ha scritto:
> We should open NMI window right after an iret, but SVM exits before it.
> We wanted to single step using the trap flag and then open it.
> (or we could emulate the iret instead)
> We don't do it since commit 3842d135ff2 (likely), because the iret exit
> handler does not request an event, so NMI window remains closed until
> the next exit.
>
> Fix this by making KVM_REQ_EVENT request in the iret handler.
>
> Signed-off-by: Radim Kr?má? <rkrcmar@redhat.com>
> ---
>  (btw. kvm-unit-tests weren't executed on SVM since Nov 2010, at least)
>
>  arch/x86/kvm/svm.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index c7168a5..b5a735b 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -2829,6 +2829,7 @@ static int iret_interception(struct vcpu_svm *svm)
>  	clr_intercept(svm, INTERCEPT_IRET);
>  	svm->vcpu.arch.hflags |= HF_IRET_MASK;
>  	svm->nmi_iret_rip = kvm_rip_read(&svm->vcpu);
> +	kvm_make_request(KVM_REQ_EVENT, &svm->vcpu);
>  	return 1;
>  }
>
>

Applying to kvm/queue, thanks.

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index c7168a5..b5a735b 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2829,6 +2829,7 @@  static int iret_interception(struct vcpu_svm *svm)
 	clr_intercept(svm, INTERCEPT_IRET);
 	svm->vcpu.arch.hflags |= HF_IRET_MASK;
 	svm->nmi_iret_rip = kvm_rip_read(&svm->vcpu);
+	kvm_make_request(KVM_REQ_EVENT, &svm->vcpu);
 	return 1;
 }