VirtualBox

Changeset 92495 in vbox


Ignore:
Timestamp:
Nov 18, 2021 2:17:12 PM (3 years ago)
Author:
vboxsync
Message:

VMM/CPUM,++: Merged CPUMCTX_EXTRN_HM_VMX_INT_STATE, CPUMCTX_EXTRN_HM_SVM_INT_SHADOW, CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI into CPUMCTX_EXTRN_INHIBIT_INT & CPUMCTX_EXTRN_INHIBIT_NMI. bugref:9044

Location:
trunk
Files:
8 edited

Legend:

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

    r91308 r92495  
    991991#define CPUMCTX_EXTRN_HWVIRT                    UINT64_C(0x0000020000000000)
    992992
     993/** Inhibit maskable interrupts (VMCPU_FF_INHIBIT_INTERRUPTS) */
     994#define CPUMCTX_EXTRN_INHIBIT_INT               UINT64_C(0x0000040000000000)
     995/** Inhibit non-maskable interrupts (VMCPU_FF_BLOCK_NMIS). */
     996#define CPUMCTX_EXTRN_INHIBIT_NMI               UINT64_C(0x0000080000000000)
     997
    993998/** Mask of bits the keepers can use for state tracking. */
    994999#define CPUMCTX_EXTRN_KEEPER_STATE_MASK         UINT64_C(0xffff000000000000)
     
    9961001/** NEM/Win: Event injection (known was interruption) pending state. */
    9971002#define CPUMCTX_EXTRN_NEM_WIN_EVENT_INJECT      UINT64_C(0x0001000000000000)
    998 /** NEM/Win: Inhibit maskable interrupts (VMCPU_FF_INHIBIT_INTERRUPTS). */
    999 #define CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT       UINT64_C(0x0002000000000000)
    1000 /** NEM/Win: Inhibit non-maskable interrupts (VMCPU_FF_BLOCK_NMIS). */
    1001 #define CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI       UINT64_C(0x0004000000000000)
    10021003/** NEM/Win: Mask. */
    1003 #define CPUMCTX_EXTRN_NEM_WIN_MASK              UINT64_C(0x0007000000000000)
    1004 
    1005 /** HM/SVM: Inhibit maskable interrupts (VMCPU_FF_INHIBIT_INTERRUPTS). */
    1006 #define CPUMCTX_EXTRN_HM_SVM_INT_SHADOW         UINT64_C(0x0001000000000000)
     1004#define CPUMCTX_EXTRN_NEM_WIN_MASK              UINT64_C(0x0001000000000000)
     1005
    10071006/** HM/SVM: Nested-guest interrupt pending (VMCPU_FF_INTERRUPT_NESTED_GUEST). */
    1008 #define CPUMCTX_EXTRN_HM_SVM_HWVIRT_VIRQ        UINT64_C(0x0002000000000000)
     1007#define CPUMCTX_EXTRN_HM_SVM_HWVIRT_VIRQ        UINT64_C(0x0001000000000000)
    10091008/** HM/SVM: Mask. */
    1010 #define CPUMCTX_EXTRN_HM_SVM_MASK               UINT64_C(0x0003000000000000)
    1011 
    1012 /** HM/VMX: Guest-interruptibility state (VMCPU_FF_INHIBIT_INTERRUPTS,
    1013  *  VMCPU_FF_BLOCK_NMIS). */
    1014 #define CPUMCTX_EXTRN_HM_VMX_INT_STATE          UINT64_C(0x0001000000000000)
    1015 /** HM/VMX: Mask. */
    1016 #define CPUMCTX_EXTRN_HM_VMX_MASK               UINT64_C(0x0001000000000000)
     1009#define CPUMCTX_EXTRN_HM_SVM_MASK               UINT64_C(0x0001000000000000)
    10171010
    10181011/** All CPUM state bits, not including keeper specific ones. */
    1019 #define CPUMCTX_EXTRN_ALL                       UINT64_C(0x000003fffffffffc)
     1012#define CPUMCTX_EXTRN_ALL                       UINT64_C(0x00000ffffffffffc)
    10201013/** All CPUM state bits, including keeper specific ones. */
    10211014#define CPUMCTX_EXTRN_ABSOLUTELY_ALL            UINT64_C(0xfffffffffffffffc)
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r92426 r92495  
    1602616026{
    1602716027    IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3);
    16028     IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK);
     16028    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI);
    1602916029    Assert(pExitInfo);
    1603016030
     
    1607216072{
    1607316073    IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3);
    16074     IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK);
     16074    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI);
    1607516075    Assert(pExitInfo);
    1607616076
     
    1611116111    Assert(pExitInfo);
    1611216112    IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3);
    16113     IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK);
     16113    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI);
    1611416114
    1611516115    iemInitExec(pVCpu, false /*fBypassHandlers*/);
     
    1613616136    Assert(pExitInfo);
    1613716137    IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3);
    16138     IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK);
     16138    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI);
    1613916139
    1614016140    iemInitExec(pVCpu, false /*fBypassHandlers*/);
     
    1616116161    Assert(pExitInfo);
    1616216162    IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3);
    16163     IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK);
     16163    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI);
    1616416164
    1616516165    iemInitExec(pVCpu, false /*fBypassHandlers*/);
     
    1620816208    Assert(pExitInfo);
    1620916209    IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 3);
    16210     IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK);
     16210    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI);
    1621116211
    1621216212    iemInitExec(pVCpu, false /*fBypassHandlers*/);
     
    1623216232{
    1623316233    IEMEXEC_ASSERT_INSTR_LEN_RETURN(cbInstr, 3);
    16234     IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK);
     16234    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI);
    1623516235
    1623616236    iemInitExec(pVCpu, false /*fBypassHandlers*/);
     
    1625216252{
    1625316253    IEMEXEC_ASSERT_INSTR_LEN_RETURN(pExitInfo->cbInstr, 4);
    16254     IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_HM_VMX_MASK);
     16254    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI);
    1625516255    Assert(pExitInfo);
    1625616256
  • trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h

    r92466 r92495  
    413413    /* Interruptibility state.  This can get a little complicated since we get
    414414       half of the state via HV_X64_VP_EXECUTION_STATE. */
    415     if (   (fWhat & (CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI))
    416         ==          (CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI) )
     415    if (   (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI))
     416        ==          (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI) )
    417417    {
    418418        ADD_REG64(WHvRegisterInterruptState, 0);
     
    423423            aValues[iReg - 1].InterruptState.NmiMasked = 1;
    424424    }
    425     else if (fWhat & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT)
     425    else if (fWhat & CPUMCTX_EXTRN_INHIBIT_INT)
    426426    {
    427427        if (   pVCpu->nem.s.fLastInterruptShadow
     
    439439    }
    440440    else
    441         Assert(!(fWhat & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI));
     441        Assert(!(fWhat & CPUMCTX_EXTRN_INHIBIT_NMI));
    442442
    443443    /* Interrupt windows. Always set if active as Hyper-V seems to be forgetful. */
     
    700700
    701701    /* Interruptibility. */
    702     if (fWhat & (CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI))
     702    if (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI))
    703703    {
    704704        aenmNames[iReg++] = WHvRegisterInterruptState;
     
    10551055
    10561056    /* Interruptibility. */
    1057     if (fWhat & (CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI))
     1057    if (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI))
    10581058    {
    10591059        Assert(aenmNames[iReg] == WHvRegisterInterruptState);
    10601060        Assert(aenmNames[iReg + 1] == WHvX64RegisterRip);
    10611061
    1062         if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT))
     1062        if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_INHIBIT_INT))
    10631063        {
    10641064            pVCpu->nem.s.fLastInterruptShadow = aValues[iReg].InterruptState.InterruptShadow;
     
    10691069        }
    10701070
    1071         if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI))
     1071        if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_INHIBIT_NMI))
    10721072        {
    10731073            if (aValues[iReg].InterruptState.NmiMasked)
     
    10771077        }
    10781078
    1079         fWhat |= CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI;
     1079        fWhat |= CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI;
    10801080        iReg += 2;
    10811081    }
     
    19171917DECLINLINE(void) nemHCWinCopyStateFromX64Header(PVMCPUCC pVCpu, HV_X64_INTERCEPT_MESSAGE_HEADER const *pHdr)
    19181918{
    1919     Assert(   (pVCpu->cpum.GstCtx.fExtrn & (CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT))
    1920            ==                              (CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT));
     1919    Assert(   (pVCpu->cpum.GstCtx.fExtrn & (CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_INHIBIT_INT))
     1920           ==                              (CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_INHIBIT_INT));
    19211921    NEM_WIN_COPY_BACK_SEG(pVCpu->cpum.GstCtx.cs, pHdr->CsSegment);
    19221922    pVCpu->cpum.GstCtx.rip      = pHdr->Rip;
     
    19361936    APICSetTpr(pVCpu, pHdr->Cr8 << 4);
    19371937
    1938     pVCpu->cpum.GstCtx.fExtrn &= ~(CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_APIC_TPR);
     1938    pVCpu->cpum.GstCtx.fExtrn &= ~(CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_APIC_TPR);
    19391939}
    19401940#elif defined(IN_RING3)
     
    19501950DECLINLINE(void) nemR3WinCopyStateFromX64Header(PVMCPUCC pVCpu, WHV_VP_EXIT_CONTEXT const *pExitCtx)
    19511951{
    1952     Assert(   (pVCpu->cpum.GstCtx.fExtrn & (CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT))
    1953            ==                              (CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT));
     1952    Assert(   (pVCpu->cpum.GstCtx.fExtrn & (CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_INHIBIT_INT))
     1953           ==                              (CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_INHIBIT_INT));
    19541954    NEM_WIN_COPY_BACK_SEG(pVCpu->cpum.GstCtx.cs, pExitCtx->Cs);
    19551955    pVCpu->cpum.GstCtx.rip      = pExitCtx->Rip;
     
    19691969    APICSetTpr(pVCpu, pExitCtx->Cr8 << 4);
    19701970
    1971     pVCpu->cpum.GstCtx.fExtrn &= ~(CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_APIC_TPR);
     1971    pVCpu->cpum.GstCtx.fExtrn &= ~(CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_APIC_TPR);
    19721972}
    19731973#endif /* IN_RING3 && !NEM_WIN_TEMPLATE_MODE_OWN_RUN_API */
     
    41074107     */
    41084108    bool const fPendingNmi = VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INTERRUPT_NMI);
    4109     uint64_t   fNeedExtrn  = CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS
    4110                            | (fPendingNmi ? CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI : 0);
     4109    uint64_t   fNeedExtrn  = CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS
     4110                           | (fPendingNmi ? CPUMCTX_EXTRN_INHIBIT_NMI : 0);
    41114111    if (pVCpu->cpum.GstCtx.fExtrn & fNeedExtrn)
    41124112    {
     
    45224522    {
    45234523        /* Try anticipate what we might need. */
    4524         uint64_t fImport = IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI;
     4524        uint64_t fImport = IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI;
    45254525        if (   (rcStrict >= VINF_EM_FIRST && rcStrict <= VINF_EM_LAST)
    45264526            || RT_FAILURE(rcStrict))
     
    45294529        else if (   rcStrict == VINF_IOM_R3_IOPORT_COMMIT_WRITE
    45304530                 || rcStrict == VINF_EM_PENDING_R3_IOPORT_WRITE)
    4531             fImport = CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT;
     4531            fImport = CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_INHIBIT_INT;
    45324532        else if (rcStrict == VINF_EM_PENDING_R3_IOPORT_READ)
    4533             fImport = CPUMCTX_EXTRN_RAX | CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT;
     4533            fImport = CPUMCTX_EXTRN_RAX | CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_INHIBIT_INT;
    45344534# endif
    45354535        else if (VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_PIC | VMCPU_FF_INTERRUPT_APIC
  • trunk/src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h

    r92451 r92495  
    9595                                      | CPUMCTX_EXTRN_DR7             \
    9696                                      | CPUMCTX_EXTRN_HWVIRT          \
    97                                       | CPUMCTX_EXTRN_HM_VMX_MASK)
     97                                      | CPUMCTX_EXTRN_INHIBIT_INT     \
     98                                      | CPUMCTX_EXTRN_INHIBIT_NMI)
    9899
    99100/**
     
    52235224                vmxHCImportGuestRFlags(pVCpu, pVmcsInfo);
    52245225
    5225             if (fWhat & CPUMCTX_EXTRN_HM_VMX_INT_STATE)
     5226            if (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI))
    52265227                vmxHCImportGuestIntrState(pVCpu, pVmcsInfo);
    52275228
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r92426 r92495  
    104104                                         | CPUMCTX_EXTRN_SYSENTER_MSRS  \
    105105                                         | CPUMCTX_EXTRN_HWVIRT         \
     106                                         | CPUMCTX_EXTRN_INHIBIT_INT    \
    106107                                         | CPUMCTX_EXTRN_HM_SVM_MASK)
    107108
     
    27092710#endif
    27102711
    2711         if (fWhat & CPUMCTX_EXTRN_HM_SVM_INT_SHADOW)
     2712        if (fWhat & CPUMCTX_EXTRN_INHIBIT_INT)
    27122713        {
    27132714            if (pVmcbCtrl->IntShadow.n.u1IntShadow)
     
    35723573    HMSVM_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HWVIRT
    35733574                              | CPUMCTX_EXTRN_RFLAGS
    3574                               | CPUMCTX_EXTRN_HM_SVM_INT_SHADOW
     3575                              | CPUMCTX_EXTRN_INHIBIT_INT
    35753576                              | CPUMCTX_EXTRN_HM_SVM_HWVIRT_VIRQ);
    35763577
     
    44044405                                 | CPUMCTX_EXTRN_CS
    44054406                                 | CPUMCTX_EXTRN_HWVIRT
    4406                                  | CPUMCTX_EXTRN_HM_SVM_INT_SHADOW
     4407                                 | CPUMCTX_EXTRN_INHIBIT_INT
    44074408                                 | CPUMCTX_EXTRN_HM_SVM_HWVIRT_VIRQ
    44084409                                 | HMSVM_CPUMCTX_SHARED_STATE);
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r92394 r92495  
    124124                                      | CPUMCTX_EXTRN_DR7             \
    125125                                      | CPUMCTX_EXTRN_HWVIRT          \
    126                                       | CPUMCTX_EXTRN_HM_VMX_MASK)
     126                                      | CPUMCTX_EXTRN_INHIBIT_INT     \
     127                                      | CPUMCTX_EXTRN_INHIBIT_NMI)
    127128
    128129/**
     
    77197720                hmR0VmxImportGuestRFlags(pVCpu, pVmcsInfo);
    77207721
    7721             if (fWhat & CPUMCTX_EXTRN_HM_VMX_INT_STATE)
     7722            if (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI))
    77227723                hmR0VmxImportGuestIntrState(pVCpu, pVmcsInfo);
    77237724
     
    1125711258
    1125811259            /*
    11259              * Import the guest-interruptibility state always as we need it while evaluating
     11260             * Always import the guest-interruptibility state as we need it while evaluating
    1126011261             * injecting events on re-entry.
    1126111262             *
     
    1126411265             * mode changes wrt CR0 are intercepted.
    1126511266             */
    11266             uint64_t const fImportMask = CPUMCTX_EXTRN_HM_VMX_INT_STATE
     11267            uint64_t const fImportMask = CPUMCTX_EXTRN_INHIBIT_INT
     11268                                       | CPUMCTX_EXTRN_INHIBIT_NMI
    1126711269#if defined(HMVMX_ALWAYS_SYNC_FULL_GUEST_STATE) || defined(HMVMX_ALWAYS_SAVE_FULL_GUEST_STATE)
    1126811270                                       | HMVMX_CPUMCTX_EXTRN_ALL
  • trunk/src/VBox/VMM/VMMR0/NEMR0Native-win.cpp

    r92465 r92495  
    18071807    /* Interruptibility state.  This can get a little complicated since we get
    18081808       half of the state via HV_X64_VP_EXECUTION_STATE. */
    1809     if (   (fWhat & (CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI))
    1810         ==          (CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI) )
     1809    if (   (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI))
     1810        ==          (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI) )
    18111811    {
    18121812        HV_REGISTER_ASSOC_ZERO_PADDING_AND_HI64(&pInput->Elements[iReg]);
     
    18201820        iReg++;
    18211821    }
    1822     else if (fWhat & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT)
     1822    else if (fWhat & CPUMCTX_EXTRN_INHIBIT_INT)
    18231823    {
    18241824        if (   pGVCpu->nem.s.fLastInterruptShadow
     
    18391839    }
    18401840    else
    1841         Assert(!(fWhat & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI));
     1841        Assert(!(fWhat & CPUMCTX_EXTRN_INHIBIT_NMI));
    18421842
    18431843    /* Interrupt windows. Always set if active as Hyper-V seems to be forgetful. */
     
    21322132
    21332133    /* Interruptibility. */
    2134     if (fWhat & (CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI))
     2134    if (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI))
    21352135    {
    21362136        pInput->Names[iReg++] = HvRegisterInterruptState;
     
    27152715
    27162716    /* Interruptibility. */
    2717     if (fWhat & (CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI))
     2717    if (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI))
    27182718    {
    27192719        Assert(pInput->Names[iReg] == HvRegisterInterruptState);
    27202720        Assert(pInput->Names[iReg + 1] == HvX64RegisterRip);
    27212721
    2722         if (!(pCtx->fExtrn & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT))
     2722        if (!(pCtx->fExtrn & CPUMCTX_EXTRN_INHIBIT_INT))
    27232723        {
    27242724            pGVCpu->nem.s.fLastInterruptShadow = paValues[iReg].InterruptState.InterruptShadow;
     
    27292729        }
    27302730
    2731         if (!(pCtx->fExtrn & CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI))
     2731        if (!(pCtx->fExtrn & CPUMCTX_EXTRN_INHIBIT_NMI))
    27322732        {
    27332733            if (paValues[iReg].InterruptState.NmiMasked)
     
    27372737        }
    27382738
    2739         fWhat |= CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI;
     2739        fWhat |= CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI;
    27402740        iReg += 2;
    27412741    }
  • trunk/src/VBox/VMM/include/NEMInternal.h

    r92465 r92495  
    9999
    100100/** The CPUMCTX_EXTRN_XXX mask for IEM. */
    101 # define NEM_WIN_CPUMCTX_EXTRN_MASK_FOR_IEM      (  IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT \
    102                                                   | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI )
     101# define NEM_WIN_CPUMCTX_EXTRN_MASK_FOR_IEM      (  IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_INHIBIT_INT \
     102                                                  | CPUMCTX_EXTRN_INHIBIT_NMI )
    103103/** The CPUMCTX_EXTRN_XXX mask for IEM when raising exceptions. */
    104104# define NEM_WIN_CPUMCTX_EXTRN_MASK_FOR_IEM_XCPT (IEM_CPUMCTX_EXTRN_XCPT_MASK | NEM_WIN_CPUMCTX_EXTRN_MASK_FOR_IEM)
     
    131131
    132132/** The CPUMCTX_EXTRN_XXX mask for IEM. */
    133 # define NEM_DARWIN_CPUMCTX_EXTRN_MASK_FOR_IEM      (  IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_INT \
    134                                                      | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI )
     133# define NEM_DARWIN_CPUMCTX_EXTRN_MASK_FOR_IEM      (  IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_INHIBIT_INT \
     134                                                     | CPUMCTX_EXTRN_INHIBIT_NMI )
    135135/** The CPUMCTX_EXTRN_XXX mask for IEM when raising exceptions. */
    136136# define NEM_DARWIN_CPUMCTX_EXTRN_MASK_FOR_IEM_XCPT (IEM_CPUMCTX_EXTRN_XCPT_MASK | NEM_DARWIN_CPUMCTX_EXTRN_MASK_FOR_IEM)
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