Changeset 92495 in vbox
- Timestamp:
- Nov 18, 2021 2:17:12 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
-
include/VBox/vmm/cpumctx.h (modified) (2 diffs)
-
src/VBox/VMM/VMMAll/IEMAll.cpp (modified) (8 diffs)
-
src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h (modified) (14 diffs)
-
src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h (modified) (2 diffs)
-
src/VBox/VMM/VMMR0/HMSVMR0.cpp (modified) (4 diffs)
-
src/VBox/VMM/VMMR0/HMVMXR0.cpp (modified) (4 diffs)
-
src/VBox/VMM/VMMR0/NEMR0Native-win.cpp (modified) (7 diffs)
-
src/VBox/VMM/include/NEMInternal.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/cpumctx.h
r91308 r92495 991 991 #define CPUMCTX_EXTRN_HWVIRT UINT64_C(0x0000020000000000) 992 992 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 993 998 /** Mask of bits the keepers can use for state tracking. */ 994 999 #define CPUMCTX_EXTRN_KEEPER_STATE_MASK UINT64_C(0xffff000000000000) … … 996 1001 /** NEM/Win: Event injection (known was interruption) pending state. */ 997 1002 #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)1002 1003 /** 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 1007 1006 /** HM/SVM: Nested-guest interrupt pending (VMCPU_FF_INTERRUPT_NESTED_GUEST). */ 1008 #define CPUMCTX_EXTRN_HM_SVM_HWVIRT_VIRQ UINT64_C(0x000 2000000000000)1007 #define CPUMCTX_EXTRN_HM_SVM_HWVIRT_VIRQ UINT64_C(0x0001000000000000) 1009 1008 /** 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) 1017 1010 1018 1011 /** All CPUM state bits, not including keeper specific ones. */ 1019 #define CPUMCTX_EXTRN_ALL UINT64_C(0x00000 3fffffffffc)1012 #define CPUMCTX_EXTRN_ALL UINT64_C(0x00000ffffffffffc) 1020 1013 /** All CPUM state bits, including keeper specific ones. */ 1021 1014 #define CPUMCTX_EXTRN_ABSOLUTELY_ALL UINT64_C(0xfffffffffffffffc) -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r92426 r92495 16026 16026 { 16027 16027 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); 16029 16029 Assert(pExitInfo); 16030 16030 … … 16072 16072 { 16073 16073 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); 16075 16075 Assert(pExitInfo); 16076 16076 … … 16111 16111 Assert(pExitInfo); 16112 16112 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); 16114 16114 16115 16115 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 16136 16136 Assert(pExitInfo); 16137 16137 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); 16139 16139 16140 16140 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 16161 16161 Assert(pExitInfo); 16162 16162 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); 16164 16164 16165 16165 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 16208 16208 Assert(pExitInfo); 16209 16209 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); 16211 16211 16212 16212 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 16232 16232 { 16233 16233 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); 16235 16235 16236 16236 iemInitExec(pVCpu, false /*fBypassHandlers*/); … … 16252 16252 { 16253 16253 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); 16255 16255 Assert(pExitInfo); 16256 16256 -
trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h
r92466 r92495 413 413 /* Interruptibility state. This can get a little complicated since we get 414 414 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) ) 417 417 { 418 418 ADD_REG64(WHvRegisterInterruptState, 0); … … 423 423 aValues[iReg - 1].InterruptState.NmiMasked = 1; 424 424 } 425 else if (fWhat & CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_INT)425 else if (fWhat & CPUMCTX_EXTRN_INHIBIT_INT) 426 426 { 427 427 if ( pVCpu->nem.s.fLastInterruptShadow … … 439 439 } 440 440 else 441 Assert(!(fWhat & CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_NMI));441 Assert(!(fWhat & CPUMCTX_EXTRN_INHIBIT_NMI)); 442 442 443 443 /* Interrupt windows. Always set if active as Hyper-V seems to be forgetful. */ … … 700 700 701 701 /* 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)) 703 703 { 704 704 aenmNames[iReg++] = WHvRegisterInterruptState; … … 1055 1055 1056 1056 /* 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)) 1058 1058 { 1059 1059 Assert(aenmNames[iReg] == WHvRegisterInterruptState); 1060 1060 Assert(aenmNames[iReg + 1] == WHvX64RegisterRip); 1061 1061 1062 if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_INT))1062 if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_INHIBIT_INT)) 1063 1063 { 1064 1064 pVCpu->nem.s.fLastInterruptShadow = aValues[iReg].InterruptState.InterruptShadow; … … 1069 1069 } 1070 1070 1071 if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_NMI))1071 if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_INHIBIT_NMI)) 1072 1072 { 1073 1073 if (aValues[iReg].InterruptState.NmiMasked) … … 1077 1077 } 1078 1078 1079 fWhat |= CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI;1079 fWhat |= CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI; 1080 1080 iReg += 2; 1081 1081 } … … 1917 1917 DECLINLINE(void) nemHCWinCopyStateFromX64Header(PVMCPUCC pVCpu, HV_X64_INTERCEPT_MESSAGE_HEADER const *pHdr) 1918 1918 { 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)); 1921 1921 NEM_WIN_COPY_BACK_SEG(pVCpu->cpum.GstCtx.cs, pHdr->CsSegment); 1922 1922 pVCpu->cpum.GstCtx.rip = pHdr->Rip; … … 1936 1936 APICSetTpr(pVCpu, pHdr->Cr8 << 4); 1937 1937 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); 1939 1939 } 1940 1940 #elif defined(IN_RING3) … … 1950 1950 DECLINLINE(void) nemR3WinCopyStateFromX64Header(PVMCPUCC pVCpu, WHV_VP_EXIT_CONTEXT const *pExitCtx) 1951 1951 { 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)); 1954 1954 NEM_WIN_COPY_BACK_SEG(pVCpu->cpum.GstCtx.cs, pExitCtx->Cs); 1955 1955 pVCpu->cpum.GstCtx.rip = pExitCtx->Rip; … … 1969 1969 APICSetTpr(pVCpu, pExitCtx->Cr8 << 4); 1970 1970 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); 1972 1972 } 1973 1973 #endif /* IN_RING3 && !NEM_WIN_TEMPLATE_MODE_OWN_RUN_API */ … … 4107 4107 */ 4108 4108 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_RFLAGS4110 | (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); 4111 4111 if (pVCpu->cpum.GstCtx.fExtrn & fNeedExtrn) 4112 4112 { … … 4522 4522 { 4523 4523 /* 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; 4525 4525 if ( (rcStrict >= VINF_EM_FIRST && rcStrict <= VINF_EM_LAST) 4526 4526 || RT_FAILURE(rcStrict)) … … 4529 4529 else if ( rcStrict == VINF_IOM_R3_IOPORT_COMMIT_WRITE 4530 4530 || 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; 4532 4532 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; 4534 4534 # endif 4535 4535 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 95 95 | CPUMCTX_EXTRN_DR7 \ 96 96 | CPUMCTX_EXTRN_HWVIRT \ 97 | CPUMCTX_EXTRN_HM_VMX_MASK) 97 | CPUMCTX_EXTRN_INHIBIT_INT \ 98 | CPUMCTX_EXTRN_INHIBIT_NMI) 98 99 99 100 /** … … 5223 5224 vmxHCImportGuestRFlags(pVCpu, pVmcsInfo); 5224 5225 5225 if (fWhat & CPUMCTX_EXTRN_HM_VMX_INT_STATE)5226 if (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI)) 5226 5227 vmxHCImportGuestIntrState(pVCpu, pVmcsInfo); 5227 5228 -
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r92426 r92495 104 104 | CPUMCTX_EXTRN_SYSENTER_MSRS \ 105 105 | CPUMCTX_EXTRN_HWVIRT \ 106 | CPUMCTX_EXTRN_INHIBIT_INT \ 106 107 | CPUMCTX_EXTRN_HM_SVM_MASK) 107 108 … … 2709 2710 #endif 2710 2711 2711 if (fWhat & CPUMCTX_EXTRN_ HM_SVM_INT_SHADOW)2712 if (fWhat & CPUMCTX_EXTRN_INHIBIT_INT) 2712 2713 { 2713 2714 if (pVmcbCtrl->IntShadow.n.u1IntShadow) … … 3572 3573 HMSVM_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_HWVIRT 3573 3574 | CPUMCTX_EXTRN_RFLAGS 3574 | CPUMCTX_EXTRN_ HM_SVM_INT_SHADOW3575 | CPUMCTX_EXTRN_INHIBIT_INT 3575 3576 | CPUMCTX_EXTRN_HM_SVM_HWVIRT_VIRQ); 3576 3577 … … 4404 4405 | CPUMCTX_EXTRN_CS 4405 4406 | CPUMCTX_EXTRN_HWVIRT 4406 | CPUMCTX_EXTRN_ HM_SVM_INT_SHADOW4407 | CPUMCTX_EXTRN_INHIBIT_INT 4407 4408 | CPUMCTX_EXTRN_HM_SVM_HWVIRT_VIRQ 4408 4409 | HMSVM_CPUMCTX_SHARED_STATE); -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r92394 r92495 124 124 | CPUMCTX_EXTRN_DR7 \ 125 125 | CPUMCTX_EXTRN_HWVIRT \ 126 | CPUMCTX_EXTRN_HM_VMX_MASK) 126 | CPUMCTX_EXTRN_INHIBIT_INT \ 127 | CPUMCTX_EXTRN_INHIBIT_NMI) 127 128 128 129 /** … … 7719 7720 hmR0VmxImportGuestRFlags(pVCpu, pVmcsInfo); 7720 7721 7721 if (fWhat & CPUMCTX_EXTRN_HM_VMX_INT_STATE)7722 if (fWhat & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI)) 7722 7723 hmR0VmxImportGuestIntrState(pVCpu, pVmcsInfo); 7723 7724 … … 11257 11258 11258 11259 /* 11259 * Import the guest-interruptibility state alwaysas we need it while evaluating11260 * Always import the guest-interruptibility state as we need it while evaluating 11260 11261 * injecting events on re-entry. 11261 11262 * … … 11264 11265 * mode changes wrt CR0 are intercepted. 11265 11266 */ 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 11267 11269 #if defined(HMVMX_ALWAYS_SYNC_FULL_GUEST_STATE) || defined(HMVMX_ALWAYS_SAVE_FULL_GUEST_STATE) 11268 11270 | HMVMX_CPUMCTX_EXTRN_ALL -
trunk/src/VBox/VMM/VMMR0/NEMR0Native-win.cpp
r92465 r92495 1807 1807 /* Interruptibility state. This can get a little complicated since we get 1808 1808 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) ) 1811 1811 { 1812 1812 HV_REGISTER_ASSOC_ZERO_PADDING_AND_HI64(&pInput->Elements[iReg]); … … 1820 1820 iReg++; 1821 1821 } 1822 else if (fWhat & CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_INT)1822 else if (fWhat & CPUMCTX_EXTRN_INHIBIT_INT) 1823 1823 { 1824 1824 if ( pGVCpu->nem.s.fLastInterruptShadow … … 1839 1839 } 1840 1840 else 1841 Assert(!(fWhat & CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_NMI));1841 Assert(!(fWhat & CPUMCTX_EXTRN_INHIBIT_NMI)); 1842 1842 1843 1843 /* Interrupt windows. Always set if active as Hyper-V seems to be forgetful. */ … … 2132 2132 2133 2133 /* 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)) 2135 2135 { 2136 2136 pInput->Names[iReg++] = HvRegisterInterruptState; … … 2715 2715 2716 2716 /* 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)) 2718 2718 { 2719 2719 Assert(pInput->Names[iReg] == HvRegisterInterruptState); 2720 2720 Assert(pInput->Names[iReg + 1] == HvX64RegisterRip); 2721 2721 2722 if (!(pCtx->fExtrn & CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_INT))2722 if (!(pCtx->fExtrn & CPUMCTX_EXTRN_INHIBIT_INT)) 2723 2723 { 2724 2724 pGVCpu->nem.s.fLastInterruptShadow = paValues[iReg].InterruptState.InterruptShadow; … … 2729 2729 } 2730 2730 2731 if (!(pCtx->fExtrn & CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_NMI))2731 if (!(pCtx->fExtrn & CPUMCTX_EXTRN_INHIBIT_NMI)) 2732 2732 { 2733 2733 if (paValues[iReg].InterruptState.NmiMasked) … … 2737 2737 } 2738 2738 2739 fWhat |= CPUMCTX_EXTRN_ NEM_WIN_INHIBIT_INT | CPUMCTX_EXTRN_NEM_WIN_INHIBIT_NMI;2739 fWhat |= CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI; 2740 2740 iReg += 2; 2741 2741 } -
trunk/src/VBox/VMM/include/NEMInternal.h
r92465 r92495 99 99 100 100 /** 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 ) 103 103 /** The CPUMCTX_EXTRN_XXX mask for IEM when raising exceptions. */ 104 104 # define NEM_WIN_CPUMCTX_EXTRN_MASK_FOR_IEM_XCPT (IEM_CPUMCTX_EXTRN_XCPT_MASK | NEM_WIN_CPUMCTX_EXTRN_MASK_FOR_IEM) … … 131 131 132 132 /** 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 ) 135 135 /** The CPUMCTX_EXTRN_XXX mask for IEM when raising exceptions. */ 136 136 # 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.

