Changeset 45848 in vbox for trunk/src/VBox
- Timestamp:
- Apr 30, 2013 6:00:08 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 85426
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r45846 r45848 631 631 * @param pvCpuPage Pointer to the VMXON region. 632 632 */ 633 DECLINLINE(int)hmR0VmxEnterRootMode(PVM pVM, RTHCPHYS HCPhysCpuPage, void *pvCpuPage)633 static int hmR0VmxEnterRootMode(PVM pVM, RTHCPHYS HCPhysCpuPage, void *pvCpuPage) 634 634 { 635 635 AssertReturn(HCPhysCpuPage != 0 && HCPhysCpuPage != NIL_RTHCPHYS, VERR_INVALID_PARAMETER); 636 636 AssertReturn(pvCpuPage, VERR_INVALID_PARAMETER); 637 Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD)); 637 638 638 639 if (pVM) … … 641 642 *(uint32_t *)pvCpuPage = MSR_IA32_VMX_BASIC_INFO_VMCS_ID(pVM->hm.s.vmx.msr.vmx_basic_info); 642 643 } 643 644 /* Disable interrupts. Interrupts handlers might, in theory, change CR4. */645 RTCCUINTREG fFlags = ASMIntDisableFlags();646 644 647 645 /* Enable the VMX bit in CR4 if necessary. */ … … 651 649 652 650 /* Enter VMX root mode. */ 653 int rc = VMXEnable(HCPhysCpuPage); /** @todo This would #GP(0) if we are already in VMX root mode... try skip it? */651 int rc = VMXEnable(HCPhysCpuPage); 654 652 if (RT_FAILURE(rc)) 655 653 ASMSetCR4(uCr4); 656 654 657 /* Restore interrupts. */658 ASMSetFlags(fFlags);659 655 return rc; 660 656 } … … 668 664 static int hmR0VmxLeaveRootMode(void) 669 665 { 670 /* Disable interrupts. Interrupt handlers might, in theory, change CR4. */ 671 RTCCUINTREG fFlags = ASMIntDisableFlags(); 672 int rc = VINF_SUCCESS; 666 Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD)); 673 667 674 668 /* If we're for some reason not in VMX root mode, then don't leave it. */ … … 678 672 VMXDisable(); 679 673 ASMSetCR4(ASMGetCR4() & ~X86_CR4_VMXE); 680 } 681 else 682 rc = VERR_VMX_NOT_IN_VMX_ROOT_MODE; 683 684 /* Restore interrupts. */ 685 ASMSetFlags(fFlags); 686 return rc; 674 return VINF_SUCCESS; 675 } 676 677 return VERR_VMX_NOT_IN_VMX_ROOT_MODE; 687 678 } 688 679 … … 976 967 NOREF(pvCpuPage); 977 968 NOREF(HCPhysCpuPage); 969 Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD)); 978 970 979 971 hmR0VmxLeaveRootMode();
Note:
See TracChangeset
for help on using the changeset viewer.