[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xen-cvs
Subject:    [Xen-changelog] [xen master] x86/hvm: Fix the unknown nested vmexit reason 80000021 bug
From:       patchbot () xen ! org
Date:       2015-04-14 10:49:13
Message-ID: E1YhyP3-0007BX-PP () xenbits ! xen ! org
[Download RAW message or body]

commit f7708796db463410a97b5fa3dd5902f6e8a1d102
Author:     Liang Li <liang.z.li@intel.com>
AuthorDate: Tue Apr 7 21:27:02 2015 +0800
Commit:     Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
CommitDate: Fri Apr 10 11:35:46 2015 -0400

    x86/hvm: Fix the unknown nested vmexit reason 80000021 bug
    
    This bug will be trigged when NMI happen in the L2 guest. The current
    code handles the NMI incorrectly. According to Intel SDM 31.7.1.2
    (Resuming Guest Software after Handling an Exception), If bit 31 of the
    IDT-vectoring information fields is set, and the virtual NMIs VM-execution
    control is 1, while bits 10:8 in the IDT-vectoring information field is
    2, bit 3 in the interruptibility-state field should be cleared to avoid
    the next VM entry fail.
    
    Signed-off-by: Liang Li <liang.z.li@intel.com>
    Acked-by: Kevin Tian <kevin.tian@intel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
 xen/arch/x86/hvm/vmx/vmx.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index 8dbd314..6c4f78c 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -2628,7 +2628,8 @@ static void vmx_idtv_reinject(unsigned long idtv_info)
          * Clear NMI-blocking interruptibility info if an NMI delivery faulted.
          * Re-delivery will re-set it (see SDM 3B 25.7.1.2).
          */
-        if ( (idtv_info & INTR_INFO_INTR_TYPE_MASK) == (X86_EVENTTYPE_NMI<<8) )
+        if ( cpu_has_vmx_vnmi && ((idtv_info & INTR_INFO_INTR_TYPE_MASK) ==
+                                 (X86_EVENTTYPE_NMI<<8)) )
         {
             unsigned long intr_info;
 
@@ -2779,8 +2780,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
     hvm_maybe_deassert_evtchn_irq();
 
     __vmread(IDT_VECTORING_INFO, &idtv_info);
-    if ( !nestedhvm_vcpu_in_guestmode(v) && 
-         exit_reason != EXIT_REASON_TASK_SWITCH )
+    if ( exit_reason != EXIT_REASON_TASK_SWITCH )
         vmx_idtv_reinject(idtv_info);
 
     switch ( exit_reason )
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xen.org
http://lists.xensource.com/xen-changelog
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic