VirtualBox

Ignore:
Timestamp:
Mar 31, 2015 3:15:37 PM (10 years ago)
Author:
vboxsync
Message:

VMM/HMSVMR0: Fix #UD hypercall handling for GIM KVM.

File:
1 edited

Legend:

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

    r55039 r55040  
    50025002    int rc = hmR0SvmEmulateMovTpr(pVCpu->CTX_SUFF(pVM), pVCpu, pCtx);
    50035003    if (rc == VINF_SUCCESS)
     5004    {
    50045005        HMSVM_CHECK_SINGLE_STEP(pVCpu, rc);
     5006        return VINF_SUCCESS;
     5007    }
    50055008    else if (rc == VERR_NOT_FOUND)
    50065009    {
    50075010        /* Handle GIM provider hypercalls. */
    5008         rc = VERR_NOT_SUPPORTED;
    50095011        if (GIMAreHypercallsEnabled(pVCpu))
     5012        {
    50105013            rc = GIMHypercall(pVCpu, pCtx);
    5011 
    5012         /* If the hypercall changes anything other than guest general-purpose registers,
    5013            we would need to reload the guest changed bits on VM-reentry. */
    5014     }
    5015 
    5016     if (RT_SUCCESS(rc))
    5017         hmR0SvmUpdateRip(pVCpu, pCtx, 3);
    5018     else
    5019         hmR0SvmSetPendingXcptUD(pVCpu);
     5014            /* If the hypercall changes anything other than guest general-purpose registers,
     5015               we would need to reload the guest changed bits on VM-reentry. */
     5016            if (RT_SUCCESS(rc))
     5017            {
     5018                hmR0SvmUpdateRip(pVCpu, pCtx, 3);
     5019                return VINF_SUCCESS;
     5020            }
     5021        }
     5022    }
     5023
     5024    hmR0SvmSetPendingXcptUD(pVCpu);
    50205025    return VINF_SUCCESS;
    50215026}
     
    52225227    HMSVM_CHECK_EXIT_DUE_TO_EVENT_DELIVERY();
    52235228
    5224     STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestUD);
    5225 
    52265229    PVM pVM = pVCpu->CTX_SUFF(pVM);
    52275230    if (   pVM->hm.s.fTrapXcptUD
     
    52315234        hmR0SvmSetPendingXcptUD(pVCpu);
    52325235
     5236    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestUD);
    52335237    return VINF_SUCCESS;
    52345238}
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