VirtualBox

Ignore:
Timestamp:
May 31, 2019 5:09:51 AM (6 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: Nested VMX: bugref:9180 TPR-below threshold VM-exit handling. Assertion.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r78885 r78887  
    445445static FNVMXEXITHANDLER            hmR0VmxExitMonitorNested;
    446446static FNVMXEXITHANDLER            hmR0VmxExitPauseNested;
    447 //static FNVMXEXITHANDLERNSRC        hmR0VmxExitTprBelowThreshold;
     447static FNVMXEXITHANDLERNSRC        hmR0VmxExitTprBelowThresholdNested;
    448448static FNVMXEXITHANDLER            hmR0VmxExitApicAccessNested;
    449449static FNVMXEXITHANDLER            hmR0VmxExitXdtrAccessNested;
     
    76987698#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
    76997699# if 0
    7700                 /** @todo NSTVMX: We handle each of these fields individually by passing it to IEM
    7701                  *        VM-exit handlers. We might handle it differently when using the fast path. */
     7700                /** @todo NSTVMX: We handle most of these fields individually by passing it to IEM
     7701                 *        VM-exit handlers as parameters. We would handle it differently when using
     7702                 *        the fast path. */
    77027703                /*
    77037704                 * The hardware virtualization state currently consists of VMCS fields that may be
     
    1267512676        case VMX_EXIT_MOV_CRX:                  return hmR0VmxExitMovCRxNested(pVCpu, pVmxTransient);
    1267612677        case VMX_EXIT_INT_WINDOW:               return hmR0VmxExitIntWindowNested(pVCpu, pVmxTransient);
    12677 
    12678         case VMX_EXIT_TPR_BELOW_THRESHOLD:
    12679         {
    12680             /** @todo NSTVMX: TPR below threshold. */
    12681             return hmR0VmxExitErrUnexpected(pVCpu, pVmxTransient);
    12682         }
    12683 
     12678        case VMX_EXIT_TPR_BELOW_THRESHOLD:      return hmR0VmxExitTprBelowThresholdNested(pVCpu, pVmxTransient);
    1268412679        case VMX_EXIT_MWAIT:                    return hmR0VmxExitMwaitNested(pVCpu, pVmxTransient);
    1268512680        case VMX_EXIT_MONITOR:                  return hmR0VmxExitMonitorNested(pVCpu, pVmxTransient);
     
    1269312688
    1269412689        case VMX_EXIT_MOV_DRX:                  return hmR0VmxExitMovDRxNested(pVCpu, pVmxTransient);
     12690        case VMX_EXIT_RDPMC:                    return hmR0VmxExitRdpmcNested(pVCpu, pVmxTransient);
     12691
    1269512692        case VMX_EXIT_GDTR_IDTR_ACCESS:
    1269612693        case VMX_EXIT_LDTR_TR_ACCESS:           return hmR0VmxExitXdtrAccessNested(pVCpu, pVmxTransient);
    1269712694
    12698         case VMX_EXIT_RDPMC:                    return hmR0VmxExitRdpmcNested(pVCpu, pVmxTransient);
    12699 
    1270012695        case VMX_EXIT_VMREAD:
    1270112696        case VMX_EXIT_VMWRITE:                  return hmR0VmxExitVmreadVmwriteNested(pVCpu, pVmxTransient);
     
    1270312698        case VMX_EXIT_TRIPLE_FAULT:             return hmR0VmxExitTripleFaultNested(pVCpu, pVmxTransient);
    1270412699        case VMX_EXIT_NMI_WINDOW:               return hmR0VmxExitNmiWindowNested(pVCpu, pVmxTransient);
     12700
    1270512701        case VMX_EXIT_ERR_INVALID_GUEST_STATE:
     12702        {
     12703            /** @todo NSTVMX: Invalid guest state. */
     12704            return hmR0VmxExitErrUnexpected(pVCpu, pVmxTransient);
     12705        }
    1270612706
    1270712707        case VMX_EXIT_INIT_SIGNAL:
     
    1630516305
    1630616306/**
     16307 * Nested-guest VM-exit handler for when the TPR value is lowered below the
     16308 * specified threshold (VMX_EXIT_TPR_BELOW_THRESHOLD). Conditional VM-exit.
     16309 */
     16310HMVMX_EXIT_NSRC_DECL hmR0VmxExitTprBelowThresholdNested(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)
     16311{
     16312    HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
     16313
     16314    if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_USE_TPR_SHADOW))
     16315        return IEMExecVmxVmexit(pVCpu, pVmxTransient->uExitReason, 0 /* uExitQual */);
     16316    return hmR0VmxExitTprBelowThreshold(pVCpu, pVmxTransient);
     16317}
     16318
     16319
     16320/**
    1630716321 * Nested-guest VM-exit handler for APIC access (VMX_EXIT_APIC_ACCESS). Conditional
    1630816322 * VM-exit.
     
    1635316367    if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_RDTSC_EXIT))
    1635416368    {
     16369        Assert(CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_RDTSCP));
    1635516370        int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient);
    1635616371        AssertRCReturn(rc, rc);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette