VirtualBox

Changeset 46779 in vbox for trunk/src


Ignore:
Timestamp:
Jun 25, 2013 1:13:23 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
86710
Message:

VMM/HMSVMR0: AMD-V bits.

File:
1 edited

Legend:

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

    r46774 r46779  
    33113311    {
    33123312        uint8_t uIdtVector  = pVmcb->ctrl.ExitIntInfo.n.u8Vector;
    3313         uint8_t uExitVector = UINT8_MAX;       /* Start off with an invalid vector, updated when it's valid. See below. */
    33143313
    33153314        typedef enum
     
    33263325            if (pSvmTransient->u64ExitCode - SVM_EXIT_EXCEPTION_0 <= SVM_EXIT_EXCEPTION_1F)
    33273326            {
    3328                 uExitVector = (uint8_t)(pSvmTransient->u64ExitCode - SVM_EXIT_EXCEPTION_0);
     3327                uint8_t uExitVector = (uint8_t)(pSvmTransient->u64ExitCode - SVM_EXIT_EXCEPTION_0);
    33293328                if (   uExitVector == X86_XCPT_PF
    33303329                    && uIdtVector  == X86_XCPT_PF)
     
    33373336                         && (   hmR0SvmIsContributoryXcpt(uIdtVector)
    33383337                             || uIdtVector == X86_XCPT_PF))
    3339                {
    3340                    enmReflect = SVMREFLECTXCPT_DF;
    3341                    Log4(("IDT: Pending vectoring #DF %#RX64 uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo, uExitVector));
     3338                {
     3339                    enmReflect = SVMREFLECTXCPT_DF;
     3340                    Log4(("IDT: Pending vectoring #DF %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo,
     3341                          uIdtVector, uExitVector));
    33423342                }
    3343                else if (uIdtVector == X86_XCPT_DF)
    3344                    enmReflect = SVMREFLECTXCPT_TF;
    3345                else
    3346                    enmReflect = SVMREFLECTXCPT_XCPT;
     3343                else if (uIdtVector == X86_XCPT_DF)
     3344                {
     3345                    enmReflect = SVMREFLECTXCPT_TF;
     3346                    Log4(("IDT: Pending vectoring triple-fault %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo,
     3347                          uIdtVector, uExitVector));
     3348                }
     3349                else
     3350                    enmReflect = SVMREFLECTXCPT_XCPT;
    33473351            }
    33483352            else
     
    33803384                hmR0SvmSetPendingXcptDF(pVCpu);
    33813385                rc = VINF_HM_DOUBLE_FAULT;
    3382                 Log4(("IDT: Pending vectoring #DF %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo,
    3383                       uIdtVector, uExitVector));
    33843386                break;
    33853387            }
     
    33883390            {
    33893391                rc = VINF_EM_RESET;
    3390                 Log4(("IDT: Pending vectoring triple-fault uIdt=%#x uExit=%#x\n", uIdtVector, uExitVector));
    33913392                break;
    33923393            }
     
    38443845        if (rc == VINF_SUCCESS)
    38453846        {
    3846             if (IoExitInfo.n.u1Type == 0)   /* OUT */
     3847            if (IoExitInfo.n.u1Type == SVM_IOIO_WRITE)
    38473848            {
    38483849                VBOXSTRICTRC rc2 = IOMInterpretOUTSEx(pVM, pVCpu, CPUMCTX2CORE(pCtx), IoExitInfo.n.u16Port, pDis->fPrefix,
     
    38673868        Assert(!IoExitInfo.n.u1REP);
    38683869
    3869         if (IoExitInfo.n.u1Type == 0)   /* OUT */
     3870        if (IoExitInfo.n.u1Type == SVM_IOIO_WRITE)
    38703871        {
    38713872            VBOXSTRICTRC rc2 = IOMIOPortWrite(pVM, pVCpu, IoExitInfo.n.u16Port, pCtx->eax & uAndVal, uIOSize);
     
    39503951    }
    39513952
    3952 #ifdef DEBUG
     3953#ifdef VBOX_STRICT
    39533954    if (rc == VINF_IOM_R3_IOPORT_READ)
    3954         Assert(IoExitInfo.n.u1Type != 0);
     3955        Assert(IoExitInfo.n.u1Type == SVM_IOIO_READ);
    39553956    else if (rc == VINF_IOM_R3_IOPORT_WRITE)
    3956         Assert(IoExitInfo.n.u1Type == 0);
     3957        Assert(IoExitInfo.n.u1Type == SVM_IOIO_WRITE);
    39573958    else
    39583959    {
Note: See TracChangeset for help on using the changeset viewer.

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