VirtualBox

Changeset 66711 in vbox


Ignore:
Timestamp:
Apr 28, 2017 7:06:12 AM (7 years ago)
Author:
vboxsync
Message:

VMM/IEM: Added another bit of info required by VT-x for handling recursive exception situation.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/iem.h

    r66686 r66711  
    6464/** Delivery of an external interrupt caused a \#PF. */
    6565#define IEMXCPTRAISEINFO_SOFT_INT_XCPT           RT_BIT_32(6)
     66/** Delivery of an NMI caused an exception. */
     67#define IEMXCPTRAISEINFO_NMI_XCPT                RT_BIT_32(7)
    6668/** Delivery of an NMI caused a \#PF. */
    67 #define IEMXCPTRAISEINFO_NMI_PF                  RT_BIT_32(7)
     69#define IEMXCPTRAISEINFO_NMI_PF                  RT_BIT_32(8)
    6870/** Can re-execute the instruction at CS:RIP. */
    69 #define IEMXCPTRAISEINFO_CAN_REEXEC_INSTR        RT_BIT_32(8)
     71#define IEMXCPTRAISEINFO_CAN_REEXEC_INSTR        RT_BIT_32(9)
    7072/** @} */
    7173
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r66688 r66711  
    32863286            {
    32873287                enmRaise = IEMXCPTRAISE_DOUBLE_FAULT;
    3288                 if (enmCurXcptClass == IEMXCPTCLASS_PAGE_FAULT)
    3289                     fRaiseInfo = IEMXCPTRAISEINFO_PF_PF;
    3290                 else
    3291                     fRaiseInfo = IEMXCPTRAISEINFO_PF_CONTRIBUTORY_XCPT;
     3288                fRaiseInfo = enmCurXcptClass == IEMXCPTCLASS_PAGE_FAULT ? IEMXCPTRAISEINFO_PF_PF
     3289                                                                        : IEMXCPTRAISEINFO_PF_CONTRIBUTORY_XCPT;
    32923290                Log2(("IEMEvaluateRecursiveXcpt: Vectoring page fault. uPrevVector=%#x uCurVector=%#x uCr2=%#RX64\n", uPrevVector,
    32933291                      uCurVector, IEM_GET_CTX(pVCpu)->cr2));
     
    33093307        else
    33103308        {
    3311             if (   uPrevVector == X86_XCPT_NMI
    3312                 && uCurVector  == X86_XCPT_PF)
     3309            if (uPrevVector == X86_XCPT_NMI)
    33133310            {
    3314                 fRaiseInfo = IEMXCPTRAISEINFO_NMI_PF;
    3315                 Log2(("IEMEvaluateRecursiveXcpt: NMI delivery caused a page fault\n"));
     3311                fRaiseInfo = IEMXCPTRAISEINFO_NMI_XCPT;
     3312                if (uCurVector  == X86_XCPT_PF)
     3313                {
     3314                    fRaiseInfo |= IEMXCPTRAISEINFO_NMI_PF;
     3315                    Log2(("IEMEvaluateRecursiveXcpt: NMI delivery caused a page fault\n"));
     3316                }
    33163317            }
    33173318            else if (   uPrevVector == X86_XCPT_AC
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette