Changeset 10458 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jul 10, 2008 8:08:05 AM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 33127
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/EM.cpp
r10411 r10458 3024 3024 } 3025 3025 3026 /* Replay sthe handler notification changes. */3026 /* Replay the handler notification changes. */ 3027 3027 if (VM_FF_ISSET(pVM, VM_FF_REM_HANDLER_NOTIFY)) 3028 3028 REMR3ReplayHandlerNotifications(pVM); -
trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp
r10354 r10458 319 319 /* Virtualize masking of INTR interrupts. (reads/writes from/to CR8 go to the V_TPR register) */ 320 320 pVMCB->ctrl.IntCtrl.n.u1VIrqMasking = 1; 321 /* Ignore the priority in the TPR; just deliver it when we tell it to. */ 322 pVMCB->ctrl.IntCtrl.n.u1IgnoreTPR = 1; 321 323 322 324 /* Set IO and MSR bitmap addresses. */ … … 395 397 && VM_FF_ISPENDING(pVM, (VM_FF_INTERRUPT_APIC|VM_FF_INTERRUPT_PIC))) 396 398 { 397 if (!(pCtx->eflags.u32 & X86_EFL_IF)) 399 if ( !(pCtx->eflags.u32 & X86_EFL_IF) 400 || VM_FF_ISSET(pVM, VM_FF_INHIBIT_INTERRUPTS)) 398 401 { 399 402 if (!pVMCB->ctrl.IntCtrl.n.u1VIrqValid) 400 403 { 401 LogFlow(("Enable irq window exit!\n")); 404 if (!VM_FF_ISSET(pVM, VM_FF_INHIBIT_INTERRUPTS)) 405 LogFlow(("Enable irq window exit!\n")); 406 else 407 Log(("Pending interrupt blocked at %VGv by VM_FF_INHIBIT_INTERRUPTS -> irq window exit\n", pCtx->rip)); 408 402 409 /** @todo use virtual interrupt method to inject a pending irq; dispatched as soon as guest.IF is set. */ 403 410 pVMCB->ctrl.u32InterceptCtrl1 |= SVM_CTRL1_INTERCEPT_VINTR; 404 411 pVMCB->ctrl.IntCtrl.n.u1VIrqValid = 1; 405 pVMCB->ctrl.IntCtrl.n.u1IgnoreTPR = 1; /* ignore the priority in the TPR; just deliver it */406 412 pVMCB->ctrl.IntCtrl.n.u8VIrqVector = 0; /* don't care */ 407 413 } 408 414 } 409 415 else 410 if (!VM_FF_ISSET(pVM, VM_FF_INHIBIT_INTERRUPTS))411 416 { 412 417 uint8_t u8Interrupt; … … 427 432 } 428 433 } 429 else430 Log(("Pending interrupt blocked at %VGv by VM_FF_INHIBIT_INTERRUPTS!!\n", pCtx->rip));431 434 } 432 435 … … 1433 1436 Log(("SVM_EXIT_VINTR IF=%d\n", pCtx->eflags.Bits.u1IF)); 1434 1437 pVMCB->ctrl.IntCtrl.n.u1VIrqValid = 0; 1435 pVMCB->ctrl.IntCtrl.n.u1IgnoreTPR = 0;1436 1438 pVMCB->ctrl.IntCtrl.n.u8VIrqVector = 0; 1437 1439 goto ResumeExecution; -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r10360 r10458 278 278 #if HC_ARCH_BITS == 64 279 279 /* Always exit on CR8 writes. */ 280 /* @todo investigate T RPtreshold option */280 /* @todo investigate TPR treshold option */ 281 281 val |= VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_CR8_STORE_EXIT; 282 282 … … 1197 1197 AssertRC(rc); 1198 1198 /* The TPR can be found at offset 0x80 in the APIC mmio page. */ 1199 pVM->hwaccm.s.vmx.pAPIC[0x80] = u8TPR ;1199 pVM->hwaccm.s.vmx.pAPIC[0x80] = u8TPR << 4; /* bits 7-4 */ 1200 1200 } 1201 1201
Note:
See TracChangeset
for help on using the changeset viewer.