- Timestamp:
- May 22, 2019 7:53:16 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r78640 r78647 362 362 static FNVMXEXITHANDLER hmR0VmxExitExtInt; 363 363 static FNVMXEXITHANDLER hmR0VmxExitTripleFault; 364 static FNVMXEXITHANDLERNSRC hmR0VmxExitInitSignal;365 static FNVMXEXITHANDLERNSRC hmR0VmxExitSipi;366 static FNVMXEXITHANDLERNSRC hmR0VmxExitIoSmi;367 static FNVMXEXITHANDLERNSRC hmR0VmxExitSmi;368 364 static FNVMXEXITHANDLERNSRC hmR0VmxExitIntWindow; 369 365 static FNVMXEXITHANDLERNSRC hmR0VmxExitNmiWindow; … … 389 385 #endif 390 386 static FNVMXEXITHANDLER hmR0VmxExitRdtsc; 391 static FNVMXEXITHANDLERNSRC hmR0VmxExitRsm;392 static FNVMXEXITHANDLERNSRC hmR0VmxExitSetPendingXcptUD;393 387 static FNVMXEXITHANDLER hmR0VmxExitMovCRx; 394 388 static FNVMXEXITHANDLER hmR0VmxExitMovDRx; … … 396 390 static FNVMXEXITHANDLER hmR0VmxExitRdmsr; 397 391 static FNVMXEXITHANDLER hmR0VmxExitWrmsr; 398 static FNVMXEXITHANDLERNSRC hmR0VmxExitErrInvalidGuestState;399 static FNVMXEXITHANDLERNSRC hmR0VmxExitErrMsrLoad;400 static FNVMXEXITHANDLERNSRC hmR0VmxExitErrUndefined;401 392 static FNVMXEXITHANDLER hmR0VmxExitMwait; 402 393 static FNVMXEXITHANDLER hmR0VmxExitMtf; 403 394 static FNVMXEXITHANDLER hmR0VmxExitMonitor; 404 395 static FNVMXEXITHANDLER hmR0VmxExitPause; 405 static FNVMXEXITHANDLERNSRC hmR0VmxExitErrMachineCheck;406 396 static FNVMXEXITHANDLERNSRC hmR0VmxExitTprBelowThreshold; 407 397 static FNVMXEXITHANDLER hmR0VmxExitApicAccess; … … 415 405 static FNVMXEXITHANDLER hmR0VmxExitRdrand; 416 406 static FNVMXEXITHANDLER hmR0VmxExitInvpcid; 407 static FNVMXEXITHANDLERNSRC hmR0VmxExitSetPendingXcptUD; 408 static FNVMXEXITHANDLERNSRC hmR0VmxExitErrInvalidGuestState; 409 static FNVMXEXITHANDLERNSRC hmR0VmxExitErrUnexpected; 417 410 /** @} */ 418 411 … … 495 488 /* 01 VMX_EXIT_EXT_INT */ hmR0VmxExitExtInt, 496 489 /* 02 VMX_EXIT_TRIPLE_FAULT */ hmR0VmxExitTripleFault, 497 /* 03 VMX_EXIT_INIT_SIGNAL */ hmR0VmxExit InitSignal,498 /* 04 VMX_EXIT_SIPI */ hmR0VmxExit Sipi,499 /* 05 VMX_EXIT_IO_SMI */ hmR0VmxExit IoSmi,500 /* 06 VMX_EXIT_SMI */ hmR0VmxExit Smi,490 /* 03 VMX_EXIT_INIT_SIGNAL */ hmR0VmxExitErrUnexpected, 491 /* 04 VMX_EXIT_SIPI */ hmR0VmxExitErrUnexpected, 492 /* 05 VMX_EXIT_IO_SMI */ hmR0VmxExitErrUnexpected, 493 /* 06 VMX_EXIT_SMI */ hmR0VmxExitErrUnexpected, 501 494 /* 07 VMX_EXIT_INT_WINDOW */ hmR0VmxExitIntWindow, 502 495 /* 08 VMX_EXIT_NMI_WINDOW */ hmR0VmxExitNmiWindow, … … 509 502 /* 15 VMX_EXIT_RDPMC */ hmR0VmxExitRdpmc, 510 503 /* 16 VMX_EXIT_RDTSC */ hmR0VmxExitRdtsc, 511 /* 17 VMX_EXIT_RSM */ hmR0VmxExit Rsm,504 /* 17 VMX_EXIT_RSM */ hmR0VmxExitSetPendingXcptUD, 512 505 /* 18 VMX_EXIT_VMCALL */ hmR0VmxExitVmcall, 513 506 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX … … 538 531 /* 32 VMX_EXIT_WRMSR */ hmR0VmxExitWrmsr, 539 532 /* 33 VMX_EXIT_ERR_INVALID_GUEST_STATE */ hmR0VmxExitErrInvalidGuestState, 540 /* 34 VMX_EXIT_ERR_MSR_LOAD */ hmR0VmxExitErr MsrLoad,541 /* 35 UNDEFINED */ hmR0VmxExitErrUn defined,533 /* 34 VMX_EXIT_ERR_MSR_LOAD */ hmR0VmxExitErrUnexpected, 534 /* 35 UNDEFINED */ hmR0VmxExitErrUnexpected, 542 535 /* 36 VMX_EXIT_MWAIT */ hmR0VmxExitMwait, 543 536 /* 37 VMX_EXIT_MTF */ hmR0VmxExitMtf, 544 /* 38 UNDEFINED */ hmR0VmxExitErrUn defined,537 /* 38 UNDEFINED */ hmR0VmxExitErrUnexpected, 545 538 /* 39 VMX_EXIT_MONITOR */ hmR0VmxExitMonitor, 546 /* 40 UNDEFINED*/ hmR0VmxExitPause,547 /* 41 VMX_EXIT_ PAUSE */ hmR0VmxExitErrMachineCheck,548 /* 42 VMX_EXIT_ERR_MACHINE_CHECK */ hmR0VmxExitErrUndefined,539 /* 40 VMX_EXIT_PAUSE */ hmR0VmxExitPause, 540 /* 41 VMX_EXIT_ERR_MACHINE_CHECK */ hmR0VmxExitErrUnexpected, 541 /* 42 UNDEFINED */ hmR0VmxExitErrUnexpected, 549 542 /* 43 VMX_EXIT_TPR_BELOW_THRESHOLD */ hmR0VmxExitTprBelowThreshold, 550 543 /* 44 VMX_EXIT_APIC_ACCESS */ hmR0VmxExitApicAccess, 551 /* 45 UNDEFINED */ hmR0VmxExitErrUndefined,544 /* 45 VMX_EXIT_VIRTUALIZED_EOI */ hmR0VmxExitErrUnexpected, 552 545 /* 46 VMX_EXIT_GDTR_IDTR_ACCESS */ hmR0VmxExitXdtrAccess, 553 546 /* 47 VMX_EXIT_LDTR_TR_ACCESS */ hmR0VmxExitXdtrAccess, … … 564 557 /* 54 VMX_EXIT_WBINVD */ hmR0VmxExitWbinvd, 565 558 /* 55 VMX_EXIT_XSETBV */ hmR0VmxExitXsetbv, 566 /* 56 VMX_EXIT_APIC_WRITE */ hmR0VmxExitErrUn defined,559 /* 56 VMX_EXIT_APIC_WRITE */ hmR0VmxExitErrUnexpected, 567 560 /* 57 VMX_EXIT_RDRAND */ hmR0VmxExitRdrand, 568 561 /* 58 VMX_EXIT_INVPCID */ hmR0VmxExitInvpcid, 569 562 /* 59 VMX_EXIT_VMFUNC */ hmR0VmxExitSetPendingXcptUD, 570 /* 60 VMX_EXIT_ENCLS */ hmR0VmxExit ErrUndefined,571 /* 61 VMX_EXIT_RDSEED */ hmR0VmxExit ErrUndefined, /* only spurious exits, so undefined */572 /* 62 VMX_EXIT_PML_FULL */ hmR0VmxExitErrUn defined,563 /* 60 VMX_EXIT_ENCLS */ hmR0VmxExitSetPendingXcptUD, 564 /* 61 VMX_EXIT_RDSEED */ hmR0VmxExitSetPendingXcptUD, 565 /* 62 VMX_EXIT_PML_FULL */ hmR0VmxExitErrUnexpected, 573 566 /* 63 VMX_EXIT_XSAVES */ hmR0VmxExitSetPendingXcptUD, 574 567 /* 64 VMX_EXIT_XRSTORS */ hmR0VmxExitSetPendingXcptUD, … … 10643 10636 #ifdef HMVMX_ALWAYS_CHECK_GUEST_STATE 10644 10637 /** @todo r=ramshankar: We can now probably use iemVmxVmentryCheckGuestState here. 10645 * Add a PVMXMSRS parameter to it, so that IEM can look at the host MSRs. */ 10638 * Add a PVMXMSRS parameter to it, so that IEM can look at the host MSRs, 10639 * see @bugref{9180#c54}. */ 10646 10640 uint32_t const uInvalidReason = hmR0VmxCheckGuestState(pVCpu, pVmcsInfo); 10647 10641 if (uInvalidReason != VMX_IGS_REASON_NOT_FOUND) … … 11698 11692 case VMX_EXIT_ERR_MSR_LOAD: 11699 11693 case VMX_EXIT_ERR_MACHINE_CHECK: 11694 case VMX_EXIT_PML_FULL: 11695 case VMX_EXIT_VIRTUALIZED_EOI: 11700 11696 break; 11701 11697 … … 12002 11998 case VMX_EXIT_ERR_MSR_LOAD: 12003 11999 case VMX_EXIT_ERR_MACHINE_CHECK: 12000 case VMX_EXIT_PML_FULL: 12001 case VMX_EXIT_VIRTUALIZED_EOI: 12004 12002 case VMX_EXIT_APIC_WRITE: /* Some talk about this being fault like, so I guess we must process it? */ 12005 12003 break; … … 12437 12435 case VMX_EXIT_INVD: VMEXIT_CALL_RET(0, hmR0VmxExitInvd(pVCpu, pVmxTransient)); 12438 12436 case VMX_EXIT_INVLPG: VMEXIT_CALL_RET(0, hmR0VmxExitInvlpg(pVCpu, pVmxTransient)); 12439 case VMX_EXIT_RSM: VMEXIT_CALL_RET(0, hmR0VmxExitRsm(pVCpu, pVmxTransient));12440 12437 case VMX_EXIT_MTF: VMEXIT_CALL_RET(0, hmR0VmxExitMtf(pVCpu, pVmxTransient)); 12441 12438 case VMX_EXIT_PAUSE: VMEXIT_CALL_RET(0, hmR0VmxExitPause(pVCpu, pVmxTransient)); … … 12475 12472 case VMX_EXIT_TRIPLE_FAULT: return hmR0VmxExitTripleFault(pVCpu, pVmxTransient); 12476 12473 case VMX_EXIT_NMI_WINDOW: return hmR0VmxExitNmiWindow(pVCpu, pVmxTransient); 12477 case VMX_EXIT_INIT_SIGNAL: return hmR0VmxExitInitSignal(pVCpu, pVmxTransient);12478 case VMX_EXIT_SIPI: return hmR0VmxExitSipi(pVCpu, pVmxTransient);12479 case VMX_EXIT_IO_SMI: return hmR0VmxExitIoSmi(pVCpu, pVmxTransient);12480 case VMX_EXIT_SMI: return hmR0VmxExitSmi(pVCpu, pVmxTransient);12481 case VMX_EXIT_ERR_MSR_LOAD: return hmR0VmxExitErrMsrLoad(pVCpu, pVmxTransient);12482 12474 case VMX_EXIT_ERR_INVALID_GUEST_STATE: return hmR0VmxExitErrInvalidGuestState(pVCpu, pVmxTransient); 12483 case VMX_EXIT_ERR_MACHINE_CHECK: return hmR0VmxExitErrMachineCheck(pVCpu, pVmxTransient); 12484 12475 12476 case VMX_EXIT_RSM: 12477 case VMX_EXIT_RDSEED: 12478 case VMX_EXIT_ENCLS: 12485 12479 case VMX_EXIT_INVEPT: 12486 12480 case VMX_EXIT_VMFUNC: … … 12489 12483 return hmR0VmxExitSetPendingXcptUD(pVCpu, pVmxTransient); 12490 12484 12491 case VMX_EXIT_ENCLS: 12492 case VMX_EXIT_RDSEED: 12485 case VMX_EXIT_INIT_SIGNAL: 12486 case VMX_EXIT_SIPI: 12487 case VMX_EXIT_IO_SMI: 12488 case VMX_EXIT_SMI: 12489 case VMX_EXIT_ERR_MSR_LOAD: 12490 case VMX_EXIT_ERR_MACHINE_CHECK: 12493 12491 case VMX_EXIT_PML_FULL: 12492 case VMX_EXIT_VIRTUALIZED_EOI: 12493 case VMX_EXIT_APIC_WRITE: 12494 12494 default: 12495 return hmR0VmxExitErrUn defined(pVCpu, pVmxTransient);12495 return hmR0VmxExitErrUnexpected(pVCpu, pVmxTransient); 12496 12496 } 12497 12497 #undef VMEXIT_CALL_RET … … 12707 12707 } 12708 12708 12709 case VMX_EXIT_APIC_ACCESS:12710 case VMX_EXIT_XCPT_OR_NMI:12711 case VMX_EXIT_MOV_CRX:12712 case VMX_EXIT_EXT_INT:12713 case VMX_EXIT_INT_WINDOW:12714 case VMX_EXIT_TPR_BELOW_THRESHOLD:12715 case VMX_EXIT_MWAIT:12716 case VMX_EXIT_MONITOR:12717 case VMX_EXIT_PREEMPT_TIMER:12718 12719 12709 case VMX_EXIT_RDMSR: 12720 12710 { … … 12790 12780 } 12791 12781 12782 case VMX_EXIT_MTF: 12783 { 12784 /** @todo NSTVMX: Should consider debugging nested-guests using VM debugger. */ 12785 rcStrict = IEMExecVmxVmexit(pVCpu, uExitReason); 12786 break; 12787 } 12788 12789 case VMX_EXIT_APIC_ACCESS: 12790 case VMX_EXIT_XCPT_OR_NMI: 12791 case VMX_EXIT_MOV_CRX: 12792 case VMX_EXIT_EXT_INT: 12793 case VMX_EXIT_INT_WINDOW: 12794 case VMX_EXIT_TPR_BELOW_THRESHOLD: 12795 case VMX_EXIT_MWAIT: 12796 case VMX_EXIT_MONITOR: 12797 case VMX_EXIT_PAUSE: 12798 case VMX_EXIT_PREEMPT_TIMER: 12792 12799 case VMX_EXIT_MOV_DRX: 12793 case VMX_EXIT_RSM:12794 case VMX_EXIT_MTF:12795 case VMX_EXIT_PAUSE:12796 12800 case VMX_EXIT_GDTR_IDTR_ACCESS: 12797 12801 case VMX_EXIT_LDTR_TR_ACCESS: … … 12800 12804 case VMX_EXIT_VMREAD: 12801 12805 case VMX_EXIT_VMWRITE: 12806 case VMX_EXIT_RSM: 12807 case VMX_EXIT_RDSEED: 12808 case VMX_EXIT_ENCLS: 12809 case VMX_EXIT_VMFUNC: 12810 case VMX_EXIT_XSAVES: 12811 case VMX_EXIT_XRSTORS: 12812 12802 12813 case VMX_EXIT_TRIPLE_FAULT: 12803 12814 case VMX_EXIT_NMI_WINDOW: 12815 case VMX_EXIT_ERR_INVALID_GUEST_STATE: 12816 12804 12817 case VMX_EXIT_INIT_SIGNAL: 12805 12818 case VMX_EXIT_SIPI: … … 12807 12820 case VMX_EXIT_SMI: 12808 12821 case VMX_EXIT_ERR_MSR_LOAD: 12809 case VMX_EXIT_ERR_INVALID_GUEST_STATE:12810 12822 case VMX_EXIT_ERR_MACHINE_CHECK: 12811 12812 case VMX_EXIT_VMFUNC:12813 case VMX_EXIT_XSAVES:12814 case VMX_EXIT_XRSTORS:12815 12816 case VMX_EXIT_ENCLS:12817 case VMX_EXIT_RDSEED:12818 12823 case VMX_EXIT_PML_FULL: 12824 case VMX_EXIT_VIRTUALIZED_EOI: 12825 case VMX_EXIT_APIC_WRITE: 12819 12826 default: 12820 rcStrict = hmR0VmxExitErrUn defined(pVCpu, pVmxTransient);12827 rcStrict = hmR0VmxExitErrUnexpected(pVCpu, pVmxTransient); 12821 12828 break; 12822 12829 } … … 13648 13655 13649 13656 /** 13650 * VM-exit handler for RSM (VMX_EXIT_RSM). Unconditional VM-exit.13651 */13652 HMVMX_EXIT_NSRC_DECL hmR0VmxExitRsm(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)13653 {13654 /*13655 * Execution of RSM outside of SMM mode causes #UD regardless of VMX root or VMX non-root13656 * mode. In theory, we should never get this VM-exit. This can happen only if dual-monitor13657 * treatment of SMI and VMX is enabled, which can (only?) be done by executing VMCALL in13658 * VMX root operation. If we get here, something funny is going on.13659 *13660 * See Intel spec. 33.15.5 "Enabling the Dual-Monitor Treatment".13661 */13662 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);13663 AssertMsgFailed(("Unexpected RSM VM-exit\n"));13664 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient);13665 }13666 13667 13668 /**13669 * VM-exit handler for SMI (VMX_EXIT_SMI). Unconditional VM-exit.13670 */13671 HMVMX_EXIT_NSRC_DECL hmR0VmxExitSmi(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)13672 {13673 /*13674 * This can only happen if we support dual-monitor treatment of SMI, which can be activated13675 * by executing VMCALL in VMX root operation. Only an STM (SMM transfer monitor) would get13676 * this VM-exit when we (the executive monitor) execute a VMCALL in VMX root mode or receive13677 * an SMI. If we get here, something funny is going on.13678 *13679 * See Intel spec. 33.15.6 "Activating the Dual-Monitor Treatment"13680 * See Intel spec. 25.3 "Other Causes of VM-Exits"13681 */13682 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);13683 AssertMsgFailed(("Unexpected SMI VM-exit\n"));13684 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient);13685 }13686 13687 13688 /**13689 * VM-exit handler for IO SMI (VMX_EXIT_IO_SMI). Unconditional VM-exit.13690 */13691 HMVMX_EXIT_NSRC_DECL hmR0VmxExitIoSmi(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)13692 {13693 /* Same treatment as VMX_EXIT_SMI. See comment in hmR0VmxExitSmi(). */13694 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);13695 AssertMsgFailed(("Unexpected IO SMI VM-exit\n"));13696 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient);13697 }13698 13699 13700 /**13701 * VM-exit handler for SIPI (VMX_EXIT_SIPI). Conditional VM-exit.13702 */13703 HMVMX_EXIT_NSRC_DECL hmR0VmxExitSipi(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)13704 {13705 /*13706 * SIPI exits can only occur in VMX non-root operation when the "wait-for-SIPI" guest activity state is used.13707 * We don't make use of it as our guests don't have direct access to the host LAPIC.13708 * See Intel spec. 25.3 "Other Causes of VM-exits".13709 */13710 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);13711 AssertMsgFailed(("Unexpected SIPI VM-exit\n"));13712 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient);13713 }13714 13715 13716 /**13717 * VM-exit handler for INIT signal (VMX_EXIT_INIT_SIGNAL). Unconditional13718 * VM-exit.13719 */13720 HMVMX_EXIT_NSRC_DECL hmR0VmxExitInitSignal(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)13721 {13722 /*13723 * INIT signals are blocked in VMX root operation by VMXON and by SMI in SMM.13724 * See Intel spec. 33.14.1 Default Treatment of SMI Delivery" and Intel spec. 29.3 "VMX Instructions" for "VMXON".13725 *13726 * It is -NOT- blocked in VMX non-root operation so we can, in theory, still get these VM-exits.13727 * See Intel spec. "23.8 Restrictions on VMX operation".13728 */13729 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);13730 return VINF_SUCCESS;13731 }13732 13733 13734 /**13735 13657 * VM-exit handler for triple faults (VMX_EXIT_TRIPLE_FAULT). Unconditional 13736 13658 * VM-exit. … … 13882 13804 } 13883 13805 13884 13885 /** 13886 * VM-exit handler for VM-entry failure due to an MSR-load 13887 * (VMX_EXIT_ERR_MSR_LOAD). Error VM-exit. 13888 */ 13889 HMVMX_EXIT_NSRC_DECL hmR0VmxExitErrMsrLoad(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 13890 { 13891 AssertMsgFailed(("Unexpected MSR-load exit\n")); 13806 /** 13807 * VM-exit handler for all undefined/unexpected reasons. Should never happen. 13808 */ 13809 HMVMX_EXIT_NSRC_DECL hmR0VmxExitErrUnexpected(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 13810 { 13811 /* 13812 * Cummulative notes of all recognized but unexpected VM-exits. 13813 * This does -not- cover those VM-exits like a page-fault occurring when say nested-paging 13814 * is used. 13815 * 13816 * VMX_EXIT_INIT_SIGNAL: 13817 * INIT signals are blocked in VMX root operation by VMXON and by SMI in SMM. 13818 * It is -NOT- blocked in VMX non-root operation so we can, in theory, still get these 13819 * VM-exits. However, we should not receive INIT signals VM-exit while executing a VM. 13820 * 13821 * See Intel spec. 33.14.1 Default Treatment of SMI Delivery" 13822 * See Intel spec. 29.3 "VMX Instructions" for "VMXON". 13823 * See Intel spec. "23.8 Restrictions on VMX operation". 13824 * 13825 * VMX_EXIT_SIPI: 13826 * SIPI exits can only occur in VMX non-root operation when the "wait-for-SIPI" guest 13827 * activity state is used. We don't make use of it as our guests don't have direct 13828 * access to the host local APIC. 13829 * 13830 * See Intel spec. 25.3 "Other Causes of VM-exits". 13831 * 13832 * VMX_EXIT_IO_SMI: 13833 * VMX_EXIT_SMI: 13834 * This can only happen if we support dual-monitor treatment of SMI, which can be 13835 * activated by executing VMCALL in VMX root operation. Only an STM (SMM transfer 13836 * monitor) would get this VM-exit when we (the executive monitor) execute a VMCALL in 13837 * VMX root mode or receive an SMI. If we get here, something funny is going on. 13838 * 13839 * See Intel spec. 33.15.6 "Activating the Dual-Monitor Treatment" 13840 * See Intel spec. 25.3 "Other Causes of VM-Exits" 13841 * 13842 * VMX_EXIT_ERR_MACHINE_CHECK: 13843 * Machine check exceptions indicates a fatal/unrecoverable hardware condition 13844 * including but not limited to system bus, ECC, parity, cache and TLB errors. A 13845 * #MC exception abort class exception is raised. We thus cannot assume a 13846 * reasonable chance of continuing any sort of execution and we bail. 13847 * 13848 * See Intel spec. 15.1 "Machine-check Architecture". 13849 * See Intel spec. 27.1 "Architectural State Before A VM Exit". 13850 * 13851 * VMX_EXIT_ERR_MSR_LOAD: 13852 * Failures while loading MSRs are part of the VM-entry MSR-load area are unexpected 13853 * and typically indicates a bug in the hypervisor code. We thus cannot not resume 13854 * execution. 13855 * 13856 * See Intel spec. 26.7 "VM-Entry Failures During Or After Loading Guest State". 13857 * 13858 * VMX_EXIT_PML_FULL: 13859 * VMX_EXIT_VIRTUALIZED_EOI: 13860 * VMX_EXIT_APIC_WRITE: 13861 * We do not currently support any of these features and thus they are all unexpected 13862 * VM-exits. 13863 */ 13864 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 13865 AssertMsgFailed(("Unexpected VM-exit %u\n", pVmxTransient->uExitReason)); 13892 13866 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient); 13893 }13894 13895 13896 /**13897 * VM-exit handler for VM-entry failure due to a machine-check event13898 * (VMX_EXIT_ERR_MACHINE_CHECK). Error VM-exit.13899 */13900 HMVMX_EXIT_NSRC_DECL hmR0VmxExitErrMachineCheck(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)13901 {13902 AssertMsgFailed(("Unexpected machine-check event exit\n"));13903 HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient);13904 }13905 13906 13907 /**13908 * VM-exit handler for all undefined reasons. Should never ever happen.. in13909 * theory.13910 */13911 HMVMX_EXIT_NSRC_DECL hmR0VmxExitErrUndefined(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)13912 {13913 RT_NOREF2(pVCpu, pVmxTransient);13914 AssertMsgFailed(("Huh!? Undefined VM-exit reason %d\n", pVmxTransient->uExitReason));13915 return VERR_VMX_UNDEFINED_EXIT_CODE;13916 13867 } 13917 13868
Note:
See TracChangeset
for help on using the changeset viewer.