Changeset 15733 in vbox
- Timestamp:
- Dec 23, 2008 3:13:21 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r15729 r15733 2132 2132 */ 2133 2133 2134 2134 2135 /* All done! Let's start VM execution. */ 2135 2136 STAM_PROFILE_ADV_START(&pVCpu->hwaccm.s.StatInGC, z); … … 2152 2153 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2153 2154 */ 2154 2155 2155 STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatInGC, z); 2156 2156 STAM_PROFILE_ADV_START(&pVCpu->hwaccm.s.StatExit1, v); … … 3007 3007 goto ResumeExecution; 3008 3008 3009 case VMX_EXIT_PREEMPTION_TIMER: /* 52 VMX-preemption timer expired. The preemption timer counted down to zero. */ 3010 #ifdef RT_OS_WINDOWS 3011 goto ResumeExecution; 3012 #else 3013 break; /* enable interrupts again */ 3014 #endif 3015 3009 3016 default: 3010 3017 /* The rest is handled after syncing the entire CPU state. */ … … 3020 3027 case VMX_EXIT_EXTERNAL_IRQ: /* 1 External interrupt. */ 3021 3028 case VMX_EXIT_EPT_VIOLATION: 3029 case VMX_EXIT_PREEMPTION_TIMER: /* 52 VMX-preemption timer expired. The preemption timer counted down to zero. */ 3022 3030 /* Already handled above. */ 3023 3031 break; … … 3573 3581 aParam[5] = 0; 3574 3582 3583 if (pVM->hwaccm.s.vmx.msr.vmx_pin_ctls.n.allowed1 & VMX_VMCS_CTRL_PIN_EXEC_CONTROLS_PREEMPT_TIMER) 3584 { 3585 uint32_t val; 3586 3587 rc = VMXReadVMCS32(VMX_VMCS_CTRL_PIN_EXEC_CONTROLS, &val); 3588 AssertRC(rc); 3589 val = val | VMX_VMCS_CTRL_PIN_EXEC_CONTROLS_PREEMPT_TIMER; 3590 rc = VMXWriteVMCS(VMX_VMCS_CTRL_PIN_EXEC_CONTROLS, val); 3591 AssertRC(rc); 3592 3593 VMXWriteVMCS(VMX_VMCS32_GUEST_PREEMPTION_TIMER_VALUE, 0x10000); 3594 } 3595 3575 3596 rc = VMXR0Execute64BitsHandler(pVM, pVCpu, pCtx, pVM->hwaccm.s.pfnVMXGCStartVM64, 6, &aParam[0]); 3597 3598 if (pVM->hwaccm.s.vmx.msr.vmx_pin_ctls.n.allowed1 & VMX_VMCS_CTRL_PIN_EXEC_CONTROLS_PREEMPT_TIMER) 3599 { 3600 uint32_t val; 3601 3602 rc = VMXReadVMCS32(VMX_VMCS_CTRL_PIN_EXEC_CONTROLS, &val); 3603 AssertRC(rc); 3604 val = val & ~VMX_VMCS_CTRL_PIN_EXEC_CONTROLS_PREEMPT_TIMER; 3605 rc = VMXWriteVMCS(VMX_VMCS_CTRL_PIN_EXEC_CONTROLS, val); 3606 AssertRC(rc); 3607 } 3576 3608 3577 3609 #ifdef DEBUG
Note:
See TracChangeset
for help on using the changeset viewer.