VirtualBox

Ignore:
Timestamp:
Sep 27, 2012 2:00:03 PM (12 years ago)
Author:
vboxsync
Message:

VMM/VMMR0: Hungarian notation fixes.

File:
1 edited

Legend:

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

    r43387 r43455  
    5858static void hmR0SvmSetMSRPermission(PVMCPU pVCpu, unsigned ulMSR, bool fRead, bool fWrite);
    5959
     60/*******************************************************************************
     61*   Defined Constants And Macros                                               *
     62*******************************************************************************/
     63/** Convert hidden selector attribute word between VMX and SVM formats. */
     64#define SVM_HIDSEGATTR_VMX2SVM(a)     (a & 0xFF) | ((a & 0xF000) >> 4)
     65#define SVM_HIDSEGATTR_SVM2VMX(a)     (a & 0xFF) | ((a & 0x0F00) << 4)
     66
     67#define SVM_WRITE_SELREG(REG, reg) \
     68    do \
     69    { \
     70        Assert(pCtx->reg.fFlags & CPUMSELREG_FLAGS_VALID); \
     71        Assert(pCtx->reg.ValidSel == pCtx->reg.Sel); \
     72        pvVMCB->guest.REG.u16Sel     = pCtx->reg.Sel; \
     73        pvVMCB->guest.REG.u32Limit   = pCtx->reg.u32Limit; \
     74        pvVMCB->guest.REG.u64Base    = pCtx->reg.u64Base; \
     75        pvVMCB->guest.REG.u16Attr    = SVM_HIDSEGATTR_VMX2SVM(pCtx->reg.Attr.u); \
     76    } while (0)
     77
     78#define SVM_READ_SELREG(REG, reg) \
     79    do \
     80    { \
     81        pCtx->reg.Sel       = pvVMCB->guest.REG.u16Sel; \
     82        pCtx->reg.ValidSel  = pvVMCB->guest.REG.u16Sel; \
     83        pCtx->reg.fFlags    = CPUMSELREG_FLAGS_VALID; \
     84        pCtx->reg.u32Limit  = pvVMCB->guest.REG.u32Limit; \
     85        pCtx->reg.u64Base   = pvVMCB->guest.REG.u64Base; \
     86        pCtx->reg.Attr.u    = SVM_HIDSEGATTR_SVM2VMX(pvVMCB->guest.REG.u16Attr); \
     87    } while (0)
    6088
    6189/*******************************************************************************
     
    159187    int rc;
    160188
    161     pVM->hm.s.svm.pMemObjIOBitmap = NIL_RTR0MEMOBJ;
     189    pVM->hm.s.svm.hMemObjIOBitmap = NIL_RTR0MEMOBJ;
    162190
    163191    /* Allocate 12 KB for the IO bitmap (doesn't seem to be a way to convince SVM not to use it) */
    164     rc = RTR0MemObjAllocCont(&pVM->hm.s.svm.pMemObjIOBitmap, 3 << PAGE_SHIFT, false /* executable R0 mapping */);
     192    rc = RTR0MemObjAllocCont(&pVM->hm.s.svm.hMemObjIOBitmap, 3 << PAGE_SHIFT, false /* fExecutable */);
    165193    if (RT_FAILURE(rc))
    166194        return rc;
    167195
    168     pVM->hm.s.svm.pIOBitmap     = RTR0MemObjAddress(pVM->hm.s.svm.pMemObjIOBitmap);
    169     pVM->hm.s.svm.pIOBitmapPhys = RTR0MemObjGetPagePhysAddr(pVM->hm.s.svm.pMemObjIOBitmap, 0);
     196    pVM->hm.s.svm.pvIOBitmap     = RTR0MemObjAddress(pVM->hm.s.svm.hMemObjIOBitmap);
     197    pVM->hm.s.svm.HCPhysIOBitmap = RTR0MemObjGetPagePhysAddr(pVM->hm.s.svm.hMemObjIOBitmap, 0);
    170198    /* Set all bits to intercept all IO accesses. */
    171     ASMMemFill32(pVM->hm.s.svm.pIOBitmap, 3 << PAGE_SHIFT, 0xffffffff);
     199    ASMMemFill32(pVM->hm.s.svm.pvIOBitmap, 3 << PAGE_SHIFT, 0xffffffff);
    172200
    173201    /*
     
    207235        PVMCPU pVCpu = &pVM->aCpus[i];
    208236
    209         pVCpu->hm.s.svm.pMemObjVMCBHost  = NIL_RTR0MEMOBJ;
    210         pVCpu->hm.s.svm.pMemObjVMCB      = NIL_RTR0MEMOBJ;
    211         pVCpu->hm.s.svm.pMemObjMSRBitmap = NIL_RTR0MEMOBJ;
     237        pVCpu->hm.s.svm.hMemObjVMCBHost  = NIL_RTR0MEMOBJ;
     238        pVCpu->hm.s.svm.hMemObjVMCB      = NIL_RTR0MEMOBJ;
     239        pVCpu->hm.s.svm.hMemObjMSRBitmap = NIL_RTR0MEMOBJ;
    212240
    213241        /* Allocate one page for the host context */
    214         rc = RTR0MemObjAllocCont(&pVCpu->hm.s.svm.pMemObjVMCBHost, 1 << PAGE_SHIFT, false /* executable R0 mapping */);
     242        rc = RTR0MemObjAllocCont(&pVCpu->hm.s.svm.hMemObjVMCBHost, 1 << PAGE_SHIFT, false /* fExecutable */);
    215243        if (RT_FAILURE(rc))
    216244            return rc;
    217245
    218         pVCpu->hm.s.svm.pVMCBHost     = RTR0MemObjAddress(pVCpu->hm.s.svm.pMemObjVMCBHost);
    219         pVCpu->hm.s.svm.pVMCBHostPhys = RTR0MemObjGetPagePhysAddr(pVCpu->hm.s.svm.pMemObjVMCBHost, 0);
    220         Assert(pVCpu->hm.s.svm.pVMCBHostPhys < _4G);
    221         ASMMemZeroPage(pVCpu->hm.s.svm.pVMCBHost);
     246        pVCpu->hm.s.svm.pvVMCBHost     = RTR0MemObjAddress(pVCpu->hm.s.svm.hMemObjVMCBHost);
     247        pVCpu->hm.s.svm.HCPhysVMCBHost = RTR0MemObjGetPagePhysAddr(pVCpu->hm.s.svm.hMemObjVMCBHost, 0);
     248        Assert(pVCpu->hm.s.svm.HCPhysVMCBHost < _4G);
     249        ASMMemZeroPage(pVCpu->hm.s.svm.pvVMCBHost);
    222250
    223251        /* Allocate one page for the VM control block (VMCB). */
    224         rc = RTR0MemObjAllocCont(&pVCpu->hm.s.svm.pMemObjVMCB, 1 << PAGE_SHIFT, false /* executable R0 mapping */);
     252        rc = RTR0MemObjAllocCont(&pVCpu->hm.s.svm.hMemObjVMCB, 1 << PAGE_SHIFT, false /* fExecutable */);
    225253        if (RT_FAILURE(rc))
    226254            return rc;
    227255
    228         pVCpu->hm.s.svm.pVMCB     = RTR0MemObjAddress(pVCpu->hm.s.svm.pMemObjVMCB);
    229         pVCpu->hm.s.svm.pVMCBPhys = RTR0MemObjGetPagePhysAddr(pVCpu->hm.s.svm.pMemObjVMCB, 0);
    230         Assert(pVCpu->hm.s.svm.pVMCBPhys < _4G);
    231         ASMMemZeroPage(pVCpu->hm.s.svm.pVMCB);
     256        pVCpu->hm.s.svm.pvVMCB     = RTR0MemObjAddress(pVCpu->hm.s.svm.hMemObjVMCB);
     257        pVCpu->hm.s.svm.HCPhysVMCB = RTR0MemObjGetPagePhysAddr(pVCpu->hm.s.svm.hMemObjVMCB, 0);
     258        Assert(pVCpu->hm.s.svm.HCPhysVMCB < _4G);
     259        ASMMemZeroPage(pVCpu->hm.s.svm.pvVMCB);
    232260
    233261        /* Allocate 8 KB for the MSR bitmap (doesn't seem to be a way to convince SVM not to use it) */
    234         rc = RTR0MemObjAllocCont(&pVCpu->hm.s.svm.pMemObjMSRBitmap, 2 << PAGE_SHIFT, false /* executable R0 mapping */);
     262        rc = RTR0MemObjAllocCont(&pVCpu->hm.s.svm.hMemObjMSRBitmap, 2 << PAGE_SHIFT, false /* fExecutable */);
    235263        if (RT_FAILURE(rc))
    236264            return rc;
    237265
    238         pVCpu->hm.s.svm.pMSRBitmap     = RTR0MemObjAddress(pVCpu->hm.s.svm.pMemObjMSRBitmap);
    239         pVCpu->hm.s.svm.pMSRBitmapPhys = RTR0MemObjGetPagePhysAddr(pVCpu->hm.s.svm.pMemObjMSRBitmap, 0);
     266        pVCpu->hm.s.svm.pvMSRBitmap     = RTR0MemObjAddress(pVCpu->hm.s.svm.hMemObjMSRBitmap);
     267        pVCpu->hm.s.svm.HCPhysMSRBitmap = RTR0MemObjGetPagePhysAddr(pVCpu->hm.s.svm.hMemObjMSRBitmap, 0);
    240268        /* Set all bits to intercept all MSR accesses. */
    241         ASMMemFill32(pVCpu->hm.s.svm.pMSRBitmap, 2 << PAGE_SHIFT, 0xffffffff);
     269        ASMMemFill32(pVCpu->hm.s.svm.pvMSRBitmap, 2 << PAGE_SHIFT, 0xffffffff);
    242270    }
    243271
     
    258286        PVMCPU pVCpu = &pVM->aCpus[i];
    259287
    260         if (pVCpu->hm.s.svm.pMemObjVMCBHost != NIL_RTR0MEMOBJ)
    261         {
    262             RTR0MemObjFree(pVCpu->hm.s.svm.pMemObjVMCBHost, false);
    263             pVCpu->hm.s.svm.pVMCBHost       = 0;
    264             pVCpu->hm.s.svm.pVMCBHostPhys   = 0;
    265             pVCpu->hm.s.svm.pMemObjVMCBHost = NIL_RTR0MEMOBJ;
    266         }
    267 
    268         if (pVCpu->hm.s.svm.pMemObjVMCB != NIL_RTR0MEMOBJ)
    269         {
    270             RTR0MemObjFree(pVCpu->hm.s.svm.pMemObjVMCB, false);
    271             pVCpu->hm.s.svm.pVMCB       = 0;
    272             pVCpu->hm.s.svm.pVMCBPhys   = 0;
    273             pVCpu->hm.s.svm.pMemObjVMCB = NIL_RTR0MEMOBJ;
    274         }
    275         if (pVCpu->hm.s.svm.pMemObjMSRBitmap != NIL_RTR0MEMOBJ)
    276         {
    277             RTR0MemObjFree(pVCpu->hm.s.svm.pMemObjMSRBitmap, false);
    278             pVCpu->hm.s.svm.pMSRBitmap       = 0;
    279             pVCpu->hm.s.svm.pMSRBitmapPhys   = 0;
    280             pVCpu->hm.s.svm.pMemObjMSRBitmap = NIL_RTR0MEMOBJ;
    281         }
    282     }
    283     if (pVM->hm.s.svm.pMemObjIOBitmap != NIL_RTR0MEMOBJ)
    284     {
    285         RTR0MemObjFree(pVM->hm.s.svm.pMemObjIOBitmap, false);
    286         pVM->hm.s.svm.pIOBitmap       = 0;
    287         pVM->hm.s.svm.pIOBitmapPhys   = 0;
    288         pVM->hm.s.svm.pMemObjIOBitmap = NIL_RTR0MEMOBJ;
     288        if (pVCpu->hm.s.svm.hMemObjVMCBHost != NIL_RTR0MEMOBJ)
     289        {
     290            RTR0MemObjFree(pVCpu->hm.s.svm.hMemObjVMCBHost, false);
     291            pVCpu->hm.s.svm.pvVMCBHost      = 0;
     292            pVCpu->hm.s.svm.HCPhysVMCBHost  = 0;
     293            pVCpu->hm.s.svm.hMemObjVMCBHost = NIL_RTR0MEMOBJ;
     294        }
     295
     296        if (pVCpu->hm.s.svm.hMemObjVMCB != NIL_RTR0MEMOBJ)
     297        {
     298            RTR0MemObjFree(pVCpu->hm.s.svm.hMemObjVMCB, false);
     299            pVCpu->hm.s.svm.pvVMCB      = 0;
     300            pVCpu->hm.s.svm.HCPhysVMCB  = 0;
     301            pVCpu->hm.s.svm.hMemObjVMCB = NIL_RTR0MEMOBJ;
     302        }
     303        if (pVCpu->hm.s.svm.hMemObjMSRBitmap != NIL_RTR0MEMOBJ)
     304        {
     305            RTR0MemObjFree(pVCpu->hm.s.svm.hMemObjMSRBitmap, false);
     306            pVCpu->hm.s.svm.pvMSRBitmap      = 0;
     307            pVCpu->hm.s.svm.HCPhysMSRBitmap  = 0;
     308            pVCpu->hm.s.svm.hMemObjMSRBitmap = NIL_RTR0MEMOBJ;
     309        }
     310    }
     311    if (pVM->hm.s.svm.hMemObjIOBitmap != NIL_RTR0MEMOBJ)
     312    {
     313        RTR0MemObjFree(pVM->hm.s.svm.hMemObjIOBitmap, false);
     314        pVM->hm.s.svm.pvIOBitmap      = 0;
     315        pVM->hm.s.svm.HCPhysIOBitmap  = 0;
     316        pVM->hm.s.svm.hMemObjIOBitmap = NIL_RTR0MEMOBJ;
    289317    }
    290318    return VINF_SUCCESS;
     
    308336    {
    309337        PVMCPU    pVCpu = &pVM->aCpus[i];
    310         SVM_VMCB *pVMCB = (SVM_VMCB *)pVM->aCpus[i].hm.s.svm.pVMCB;
    311 
    312         AssertMsgReturn(pVMCB, ("Invalid pVMCB\n"), VERR_HMSVM_INVALID_PVMCB);
     338        SVM_VMCB *pvVMCB = (SVM_VMCB *)pVM->aCpus[i].hm.s.svm.pvVMCB;
     339
     340        AssertMsgReturn(pvVMCB, ("Invalid pvVMCB\n"), VERR_HMSVM_INVALID_PVMCB);
    313341
    314342        /*
     
    317345         * Note: CR0 & CR4 can be safely read when guest and shadow copies are identical.
    318346         */
    319         pVMCB->ctrl.u16InterceptRdCRx = RT_BIT(0) | RT_BIT(4);
     347        pvVMCB->ctrl.u16InterceptRdCRx = RT_BIT(0) | RT_BIT(4);
    320348
    321349        /* CR0/4 writes must be intercepted for obvious reasons. */
    322         pVMCB->ctrl.u16InterceptWrCRx = RT_BIT(0) | RT_BIT(4);
     350        pvVMCB->ctrl.u16InterceptWrCRx = RT_BIT(0) | RT_BIT(4);
    323351
    324352        /* Intercept all DRx reads and writes by default. Changed later on. */
    325         pVMCB->ctrl.u16InterceptRdDRx = 0xFFFF;
    326         pVMCB->ctrl.u16InterceptWrDRx = 0xFFFF;
     353        pvVMCB->ctrl.u16InterceptRdDRx = 0xFFFF;
     354        pvVMCB->ctrl.u16InterceptWrDRx = 0xFFFF;
    327355
    328356        /* Intercept traps; only #NM is always intercepted. */
    329         pVMCB->ctrl.u32InterceptException  =   RT_BIT(X86_XCPT_NM);
     357        pvVMCB->ctrl.u32InterceptException  =   RT_BIT(X86_XCPT_NM);
    330358#ifdef VBOX_ALWAYS_TRAP_PF
    331         pVMCB->ctrl.u32InterceptException |=   RT_BIT(X86_XCPT_PF);
     359        pvVMCB->ctrl.u32InterceptException |=   RT_BIT(X86_XCPT_PF);
    332360#endif
    333361#ifdef VBOX_STRICT
    334         pVMCB->ctrl.u32InterceptException |=   RT_BIT(X86_XCPT_BP)
     362        pvVMCB->ctrl.u32InterceptException |=   RT_BIT(X86_XCPT_BP)
    335363                                             | RT_BIT(X86_XCPT_DB)
    336364                                             | RT_BIT(X86_XCPT_DE)
     
    344372
    345373        /* Set up instruction and miscellaneous intercepts. */
    346         pVMCB->ctrl.u32InterceptCtrl1 =   SVM_CTRL1_INTERCEPT_INTR
     374        pvVMCB->ctrl.u32InterceptCtrl1 =   SVM_CTRL1_INTERCEPT_INTR
    347375                                        | SVM_CTRL1_INTERCEPT_VINTR
    348376                                        | SVM_CTRL1_INTERCEPT_NMI
     
    359387                                        | SVM_CTRL1_INTERCEPT_FERR_FREEZE;  /* Legacy FPU FERR handling. */
    360388                                        ;
    361         pVMCB->ctrl.u32InterceptCtrl2 =   SVM_CTRL2_INTERCEPT_VMRUN         /* required */
     389        pvVMCB->ctrl.u32InterceptCtrl2 =   SVM_CTRL2_INTERCEPT_VMRUN         /* required */
    362390                                        | SVM_CTRL2_INTERCEPT_VMMCALL
    363391                                        | SVM_CTRL2_INTERCEPT_VMLOAD
     
    371399                                                                               guest (host thinks the cpu load is high) */
    372400
    373         Log(("pVMCB->ctrl.u32InterceptException = %x\n", pVMCB->ctrl.u32InterceptException));
    374         Log(("pVMCB->ctrl.u32InterceptCtrl1 = %x\n", pVMCB->ctrl.u32InterceptCtrl1));
    375         Log(("pVMCB->ctrl.u32InterceptCtrl2 = %x\n", pVMCB->ctrl.u32InterceptCtrl2));
     401        Log(("pvVMCB->ctrl.u32InterceptException = %x\n", pvVMCB->ctrl.u32InterceptException));
     402        Log(("pvVMCB->ctrl.u32InterceptCtrl1 = %x\n", pvVMCB->ctrl.u32InterceptCtrl1));
     403        Log(("pvVMCB->ctrl.u32InterceptCtrl2 = %x\n", pvVMCB->ctrl.u32InterceptCtrl2));
    376404
    377405        /* Virtualize masking of INTR interrupts. (reads/writes from/to CR8 go to the V_TPR register) */
    378         pVMCB->ctrl.IntCtrl.n.u1VIrqMasking = 1;
     406        pvVMCB->ctrl.IntCtrl.n.u1VIrqMasking = 1;
    379407
    380408        /* Ignore the priority in the TPR; just deliver it when we tell it to. */
    381         pVMCB->ctrl.IntCtrl.n.u1IgnoreTPR   = 1;
     409        pvVMCB->ctrl.IntCtrl.n.u1IgnoreTPR   = 1;
    382410
    383411        /* Set IO and MSR bitmap addresses. */
    384         pVMCB->ctrl.u64IOPMPhysAddr  = pVM->hm.s.svm.pIOBitmapPhys;
    385         pVMCB->ctrl.u64MSRPMPhysAddr = pVCpu->hm.s.svm.pMSRBitmapPhys;
     412        pvVMCB->ctrl.u64IOPMPhysAddr  = pVM->hm.s.svm.HCPhysIOBitmap;
     413        pvVMCB->ctrl.u64MSRPMPhysAddr = pVCpu->hm.s.svm.HCPhysMSRBitmap;
    386414
    387415        /* No LBR virtualization. */
    388         pVMCB->ctrl.u64LBRVirt      = 0;
     416        pvVMCB->ctrl.u64LBRVirt      = 0;
    389417
    390418        /* The ASID must start at 1; the host uses 0. */
    391         pVMCB->ctrl.TLBCtrl.n.u32ASID = 1;
     419        pvVMCB->ctrl.TLBCtrl.n.u32ASID = 1;
    392420
    393421        /*
     
    396424         * so choose type 6 for all PAT slots.
    397425         */
    398         pVMCB->guest.u64GPAT = 0x0006060606060606ULL;
     426        pvVMCB->guest.u64GPAT = 0x0006060606060606ULL;
    399427
    400428        /* If nested paging is not in use, additional intercepts have to be set up. */
     
    402430        {
    403431            /* CR3 reads/writes must be intercepted; our shadow values are different from guest's. */
    404             pVMCB->ctrl.u16InterceptRdCRx |= RT_BIT(3);
    405             pVMCB->ctrl.u16InterceptWrCRx |= RT_BIT(3);
     432            pvVMCB->ctrl.u16InterceptRdCRx |= RT_BIT(3);
     433            pvVMCB->ctrl.u16InterceptWrCRx |= RT_BIT(3);
    406434
    407435            /*
     
    410438             * - task switches (may change CR3/EFLAGS/LDT)
    411439             */
    412             pVMCB->ctrl.u32InterceptCtrl1 |=   SVM_CTRL1_INTERCEPT_INVLPG
     440            pvVMCB->ctrl.u32InterceptCtrl1 |=   SVM_CTRL1_INTERCEPT_INVLPG
    413441                                             | SVM_CTRL1_INTERCEPT_TASK_SWITCH;
    414442
    415443            /* Page faults must be intercepted to implement shadow paging. */
    416             pVMCB->ctrl.u32InterceptException |= RT_BIT(X86_XCPT_PF);
     444            pvVMCB->ctrl.u32InterceptException |= RT_BIT(X86_XCPT_PF);
    417445        }
    418446
     
    448476{
    449477    unsigned ulBit;
    450     uint8_t *pMSRBitmap = (uint8_t *)pVCpu->hm.s.svm.pMSRBitmap;
     478    uint8_t *pvMSRBitmap = (uint8_t *)pVCpu->hm.s.svm.pvMSRBitmap;
    451479
    452480    if (ulMSR <= 0x00001FFF)
     
    460488        /* AMD Sixth Generation x86 Processor MSRs and SYSCALL */
    461489        ulBit = (ulMSR - 0xC0000000) * 2;
    462         pMSRBitmap += 0x800;
     490        pvMSRBitmap += 0x800;
    463491    }
    464492    else if (   ulMSR >= 0xC0010000
     
    467495        /* AMD Seventh and Eighth Generation Processor MSRs */
    468496        ulBit = (ulMSR - 0xC0001000) * 2;
    469         pMSRBitmap += 0x1000;
     497        pvMSRBitmap += 0x1000;
    470498    }
    471499    else
     
    476504    Assert(ulBit < 16 * 1024 - 1);
    477505    if (fRead)
    478         ASMBitClear(pMSRBitmap, ulBit);
     506        ASMBitClear(pvMSRBitmap, ulBit);
    479507    else
    480         ASMBitSet(pMSRBitmap, ulBit);
     508        ASMBitSet(pvMSRBitmap, ulBit);
    481509
    482510    if (fWrite)
    483         ASMBitClear(pMSRBitmap, ulBit + 1);
     511        ASMBitClear(pvMSRBitmap, ulBit + 1);
    484512    else
    485         ASMBitSet(pMSRBitmap, ulBit + 1);
     513        ASMBitSet(pvMSRBitmap, ulBit + 1);
    486514}
    487515
     
    491519 *
    492520 * @param   pVCpu       Pointer to the VMCPU.
    493  * @param   pVMCB       Pointer to the VMCB.
     521 * @param   pvVMCB       Pointer to the VMCB.
    494522 * @param   pCtx        Pointer to the guest CPU context.
    495523 * @param   pIntInfo    Pointer to the SVM interrupt info.
    496524 */
    497 DECLINLINE(void) hmR0SvmInjectEvent(PVMCPU pVCpu, SVM_VMCB *pVMCB, CPUMCTX *pCtx, SVM_EVENT *pEvent)
     525DECLINLINE(void) hmR0SvmInjectEvent(PVMCPU pVCpu, SVM_VMCB *pvVMCB, CPUMCTX *pCtx, SVM_EVENT *pEvent)
    498526{
    499527#ifdef VBOX_WITH_STATISTICS
     
    518546
    519547    /* Set event injection state. */
    520     pVMCB->ctrl.EventInject.au64[0] = pEvent->au64[0];
     548    pvVMCB->ctrl.EventInject.au64[0] = pEvent->au64[0];
    521549}
    522550
     
    528556 * @param   pVM         Pointer to the VM.
    529557 * @param   pVCpu       Pointer to the VMCPU.
    530  * @param   pVMCB       Pointer to the VMCB.
     558 * @param   pvVMCB       Pointer to the VMCB.
    531559 * @param   pCtx        Pointer to the guest CPU Context.
    532560 */
    533 static int hmR0SvmCheckPendingInterrupt(PVM pVM, PVMCPU pVCpu, SVM_VMCB *pVMCB, CPUMCTX *pCtx)
     561static int hmR0SvmCheckPendingInterrupt(PVM pVM, PVMCPU pVCpu, SVM_VMCB *pvVMCB, CPUMCTX *pCtx)
    534562{
    535563    int rc;
     
    547575        STAM_COUNTER_INC(&pVCpu->hm.s.StatIntReinject);
    548576        Event.au64[0] = pVCpu->hm.s.Event.intInfo;
    549         hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     577        hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    550578
    551579        pVCpu->hm.s.Event.fPending = false;
     
    568596            Event.n.u3Type       = SVM_EVENT_NMI;
    569597
    570             hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     598            hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    571599            return VINF_SUCCESS;
    572600        }
     
    582610                || VMCPU_FF_ISSET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS))
    583611            {
    584                 if (!pVMCB->ctrl.IntCtrl.n.u1VIrqValid)
     612                if (!pvVMCB->ctrl.IntCtrl.n.u1VIrqValid)
    585613                {
    586614                    if (!VMCPU_FF_ISSET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS))
     
    594622                    /** @todo Use virtual interrupt method to inject a pending IRQ; dispatched as
    595623                     *        soon as guest.IF is set. */
    596                     pVMCB->ctrl.u32InterceptCtrl1 |= SVM_CTRL1_INTERCEPT_VINTR;
    597                     pVMCB->ctrl.IntCtrl.n.u1VIrqValid    = 1;
    598                     pVMCB->ctrl.IntCtrl.n.u8VIrqVector   = 0; /* don't care */
     624                    pvVMCB->ctrl.u32InterceptCtrl1 |= SVM_CTRL1_INTERCEPT_VINTR;
     625                    pvVMCB->ctrl.IntCtrl.n.u1VIrqValid    = 1;
     626                    pvVMCB->ctrl.IntCtrl.n.u8VIrqVector   = 0; /* don't care */
    599627                }
    600628            }
     
    682710
    683711        STAM_COUNTER_INC(&pVCpu->hm.s.StatIntInject);
    684         hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     712        hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    685713    } /* if (interrupts can be dispatched) */
    686714
     
    718746{
    719747    RTGCUINTPTR val;
    720     SVM_VMCB *pVMCB;
     748    SVM_VMCB *pvVMCB;
    721749
    722750    if (pVM == NULL)
     
    726754    Assert(pVM->hm.s.svm.fSupported);
    727755
    728     pVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pVMCB;
    729     AssertMsgReturn(pVMCB, ("Invalid pVMCB\n"), VERR_HMSVM_INVALID_PVMCB);
     756    pvVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pvVMCB;
     757    AssertMsgReturn(pvVMCB, ("Invalid pvVMCB\n"), VERR_HMSVM_INVALID_PVMCB);
    730758
    731759    /* Guest CPU context: ES, CS, SS, DS, FS, GS. */
     
    755783    if (pVCpu->hm.s.fContextUseFlags & HM_CHANGED_GUEST_GDTR)
    756784    {
    757         pVMCB->guest.GDTR.u32Limit = pCtx->gdtr.cbGdt;
    758         pVMCB->guest.GDTR.u64Base  = pCtx->gdtr.pGdt;
     785        pvVMCB->guest.GDTR.u32Limit = pCtx->gdtr.cbGdt;
     786        pvVMCB->guest.GDTR.u64Base  = pCtx->gdtr.pGdt;
    759787    }
    760788
     
    762790    if (pVCpu->hm.s.fContextUseFlags & HM_CHANGED_GUEST_IDTR)
    763791    {
    764         pVMCB->guest.IDTR.u32Limit = pCtx->idtr.cbIdt;
    765         pVMCB->guest.IDTR.u64Base  = pCtx->idtr.pIdt;
     792        pvVMCB->guest.IDTR.u32Limit = pCtx->idtr.cbIdt;
     793        pvVMCB->guest.IDTR.u64Base  = pCtx->idtr.pIdt;
    766794    }
    767795
     
    769797     * Sysenter MSRs (unconditional)
    770798     */
    771     pVMCB->guest.u64SysEnterCS  = pCtx->SysEnter.cs;
    772     pVMCB->guest.u64SysEnterEIP = pCtx->SysEnter.eip;
    773     pVMCB->guest.u64SysEnterESP = pCtx->SysEnter.esp;
     799    pvVMCB->guest.u64SysEnterCS  = pCtx->SysEnter.cs;
     800    pvVMCB->guest.u64SysEnterEIP = pCtx->SysEnter.eip;
     801    pvVMCB->guest.u64SysEnterESP = pCtx->SysEnter.esp;
    774802
    775803    /* Control registers */
     
    792820                if (!pVCpu->hm.s.fFPUOldStyleOverride)
    793821                {
    794                     pVMCB->ctrl.u32InterceptException |= RT_BIT(X86_XCPT_MF);
     822                    pvVMCB->ctrl.u32InterceptException |= RT_BIT(X86_XCPT_MF);
    795823                    pVCpu->hm.s.fFPUOldStyleOverride = true;
    796824                }
     
    811839            val |= X86_CR0_WP;  /* Must set this as we rely on protecting various pages and supervisor writes must be caught. */
    812840        }
    813         pVMCB->guest.u64CR0 = val;
     841        pvVMCB->guest.u64CR0 = val;
    814842    }
    815843    /* CR2 as well */
    816     pVMCB->guest.u64CR2 = pCtx->cr2;
     844    pvVMCB->guest.u64CR2 = pCtx->cr2;
    817845
    818846    if (pVCpu->hm.s.fContextUseFlags & HM_CHANGED_GUEST_CR3)
     
    830858                enmShwPagingMode = PGMGetHostMode(pVM);
    831859
    832             pVMCB->ctrl.u64NestedPagingCR3  = PGMGetNestedCR3(pVCpu, enmShwPagingMode);
    833             Assert(pVMCB->ctrl.u64NestedPagingCR3);
    834             pVMCB->guest.u64CR3             = pCtx->cr3;
     860            pvVMCB->ctrl.u64NestedPagingCR3  = PGMGetNestedCR3(pVCpu, enmShwPagingMode);
     861            Assert(pvVMCB->ctrl.u64NestedPagingCR3);
     862            pvVMCB->guest.u64CR3             = pCtx->cr3;
    835863        }
    836864        else
    837865        {
    838             pVMCB->guest.u64CR3             = PGMGetHyperCR3(pVCpu);
    839             Assert(pVMCB->guest.u64CR3 || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL));
     866            pvVMCB->guest.u64CR3             = PGMGetHyperCR3(pVCpu);
     867            Assert(pvVMCB->guest.u64CR3 || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL));
    840868        }
    841869    }
     
    877905            }
    878906        }
    879         pVMCB->guest.u64CR4 = val;
     907        pvVMCB->guest.u64CR4 = val;
    880908    }
    881909
     
    890918        pCtx->dr[7] |= 0x400;                                                     /* must be one */
    891919
    892         pVMCB->guest.u64DR7 = pCtx->dr[7];
    893         pVMCB->guest.u64DR6 = pCtx->dr[6];
     920        pvVMCB->guest.u64DR7 = pCtx->dr[7];
     921        pvVMCB->guest.u64DR6 = pCtx->dr[6];
    894922
    895923#ifdef DEBUG
     
    906934
    907935            /* Override dr6 & dr7 with the hypervisor values. */
    908             pVMCB->guest.u64DR7 = CPUMGetHyperDR7(pVCpu);
    909             pVMCB->guest.u64DR6 = CPUMGetHyperDR6(pVCpu);
     936            pvVMCB->guest.u64DR7 = CPUMGetHyperDR7(pVCpu);
     937            pvVMCB->guest.u64DR6 = CPUMGetHyperDR6(pVCpu);
    910938        }
    911939        else
     
    919947
    920948            /* Disable drx move intercepts. */
    921             pVMCB->ctrl.u16InterceptRdDRx = 0;
    922             pVMCB->ctrl.u16InterceptWrDRx = 0;
     949            pvVMCB->ctrl.u16InterceptRdDRx = 0;
     950            pvVMCB->ctrl.u16InterceptWrDRx = 0;
    923951
    924952            /* Save the host and load the guest debug state. */
     
    929957
    930958    /* EIP, ESP and EFLAGS */
    931     pVMCB->guest.u64RIP    = pCtx->rip;
    932     pVMCB->guest.u64RSP    = pCtx->rsp;
    933     pVMCB->guest.u64RFlags = pCtx->eflags.u32;
     959    pvVMCB->guest.u64RIP    = pCtx->rip;
     960    pvVMCB->guest.u64RSP    = pCtx->rsp;
     961    pvVMCB->guest.u64RFlags = pCtx->eflags.u32;
    934962
    935963    /* Set CPL */
    936     pVMCB->guest.u8CPL     = pCtx->ss.Attr.n.u2Dpl;
     964    pvVMCB->guest.u8CPL     = pCtx->ss.Attr.n.u2Dpl;
    937965
    938966    /* RAX/EAX too, as VMRUN uses RAX as an implicit parameter. */
    939     pVMCB->guest.u64RAX    = pCtx->rax;
     967    pvVMCB->guest.u64RAX    = pCtx->rax;
    940968
    941969    /* vmrun will fail without MSR_K6_EFER_SVME. */
    942     pVMCB->guest.u64EFER   = pCtx->msrEFER | MSR_K6_EFER_SVME;
     970    pvVMCB->guest.u64EFER   = pCtx->msrEFER | MSR_K6_EFER_SVME;
    943971
    944972    /* 64 bits guest mode? */
     
    957985#endif
    958986        /* Unconditionally update these as wrmsr might have changed them. (HM_CHANGED_GUEST_SEGMENT_REGS will not be set) */
    959         pVMCB->guest.FS.u64Base    = pCtx->fs.u64Base;
    960         pVMCB->guest.GS.u64Base    = pCtx->gs.u64Base;
     987        pvVMCB->guest.FS.u64Base    = pCtx->fs.u64Base;
     988        pvVMCB->guest.GS.u64Base    = pCtx->gs.u64Base;
    961989    }
    962990    else
    963991    {
    964992        /* Filter out the MSR_K6_LME bit or else AMD-V expects amd64 shadow paging. */
    965         pVMCB->guest.u64EFER &= ~MSR_K6_EFER_LME;
     993        pvVMCB->guest.u64EFER &= ~MSR_K6_EFER_LME;
    966994
    967995        pVCpu->hm.s.svm.pfnVMRun = SVMR0VMRun;
     
    969997
    970998    /* TSC offset. */
    971     if (TMCpuTickCanUseRealTSC(pVCpu, &pVMCB->ctrl.u64TSCOffset))
     999    if (TMCpuTickCanUseRealTSC(pVCpu, &pvVMCB->ctrl.u64TSCOffset))
    9721000    {
    9731001        uint64_t u64CurTSC = ASMReadTSC();
    974         if (u64CurTSC + pVMCB->ctrl.u64TSCOffset >= TMCpuTickGetLastSeen(pVCpu))
    975         {
    976             pVMCB->ctrl.u32InterceptCtrl1 &= ~SVM_CTRL1_INTERCEPT_RDTSC;
    977             pVMCB->ctrl.u32InterceptCtrl2 &= ~SVM_CTRL2_INTERCEPT_RDTSCP;
     1002        if (u64CurTSC + pvVMCB->ctrl.u64TSCOffset >= TMCpuTickGetLastSeen(pVCpu))
     1003        {
     1004            pvVMCB->ctrl.u32InterceptCtrl1 &= ~SVM_CTRL1_INTERCEPT_RDTSC;
     1005            pvVMCB->ctrl.u32InterceptCtrl2 &= ~SVM_CTRL2_INTERCEPT_RDTSCP;
    9781006            STAM_COUNTER_INC(&pVCpu->hm.s.StatTSCOffset);
    9791007        }
     
    9821010            /* Fall back to rdtsc emulation as we would otherwise pass decreasing tsc values to the guest. */
    9831011            LogFlow(("TSC %RX64 offset %RX64 time=%RX64 last=%RX64 (diff=%RX64, virt_tsc=%RX64)\n", u64CurTSC,
    984                      pVMCB->ctrl.u64TSCOffset, u64CurTSC + pVMCB->ctrl.u64TSCOffset, TMCpuTickGetLastSeen(pVCpu),
    985                      TMCpuTickGetLastSeen(pVCpu) - u64CurTSC - pVMCB->ctrl.u64TSCOffset, TMCpuTickGet(pVCpu)));
    986             pVMCB->ctrl.u32InterceptCtrl1 |= SVM_CTRL1_INTERCEPT_RDTSC;
    987             pVMCB->ctrl.u32InterceptCtrl2 |= SVM_CTRL2_INTERCEPT_RDTSCP;
     1012                     pvVMCB->ctrl.u64TSCOffset, u64CurTSC + pvVMCB->ctrl.u64TSCOffset, TMCpuTickGetLastSeen(pVCpu),
     1013                     TMCpuTickGetLastSeen(pVCpu) - u64CurTSC - pvVMCB->ctrl.u64TSCOffset, TMCpuTickGet(pVCpu)));
     1014            pvVMCB->ctrl.u32InterceptCtrl1 |= SVM_CTRL1_INTERCEPT_RDTSC;
     1015            pvVMCB->ctrl.u32InterceptCtrl2 |= SVM_CTRL2_INTERCEPT_RDTSCP;
    9881016            STAM_COUNTER_INC(&pVCpu->hm.s.StatTSCInterceptOverFlow);
    9891017        }
     
    9911019    else
    9921020    {
    993         pVMCB->ctrl.u32InterceptCtrl1 |= SVM_CTRL1_INTERCEPT_RDTSC;
    994         pVMCB->ctrl.u32InterceptCtrl2 |= SVM_CTRL2_INTERCEPT_RDTSCP;
     1021        pvVMCB->ctrl.u32InterceptCtrl1 |= SVM_CTRL1_INTERCEPT_RDTSC;
     1022        pvVMCB->ctrl.u32InterceptCtrl2 |= SVM_CTRL2_INTERCEPT_RDTSCP;
    9951023        STAM_COUNTER_INC(&pVCpu->hm.s.StatTSCIntercept);
    9961024    }
    9971025
    9981026    /* Sync the various MSRs for 64-bit mode. */
    999     pVMCB->guest.u64STAR            = pCtx->msrSTAR;            /* legacy syscall eip, cs & ss */
    1000     pVMCB->guest.u64LSTAR           = pCtx->msrLSTAR;           /* 64-bit mode syscall rip */
    1001     pVMCB->guest.u64CSTAR           = pCtx->msrCSTAR;           /* compatibility mode syscall rip */
    1002     pVMCB->guest.u64SFMASK          = pCtx->msrSFMASK;          /* syscall flag mask */
    1003     pVMCB->guest.u64KernelGSBase    = pCtx->msrKERNELGSBASE;    /* SWAPGS exchange value */
     1027    pvVMCB->guest.u64STAR            = pCtx->msrSTAR;            /* legacy syscall eip, cs & ss */
     1028    pvVMCB->guest.u64LSTAR           = pCtx->msrLSTAR;           /* 64-bit mode syscall rip */
     1029    pvVMCB->guest.u64CSTAR           = pCtx->msrCSTAR;           /* compatibility mode syscall rip */
     1030    pvVMCB->guest.u64SFMASK          = pCtx->msrSFMASK;          /* syscall flag mask */
     1031    pvVMCB->guest.u64KernelGSBase    = pCtx->msrKERNELGSBASE;    /* SWAPGS exchange value */
    10041032
    10051033#ifdef DEBUG
     
    10071035    if (    DBGFIsStepping(pVCpu)
    10081036        ||  CPUMIsHyperDebugStateActive(pVCpu))
    1009         pVMCB->ctrl.u32InterceptException |=  RT_BIT(X86_XCPT_DB);
     1037        pvVMCB->ctrl.u32InterceptException |=  RT_BIT(X86_XCPT_DB);
    10101038    else
    1011         pVMCB->ctrl.u32InterceptException &= ~RT_BIT(X86_XCPT_DB);
     1039        pvVMCB->ctrl.u32InterceptException &= ~RT_BIT(X86_XCPT_DB);
    10121040#endif
    10131041
     
    10321060    AssertPtr(pVCpu);
    10331061
    1034     SVM_VMCB *pVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pVMCB;
     1062    SVM_VMCB *pvVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pvVMCB;
    10351063    pCpu = HMR0GetCurrentCpu();
    10361064
     
    10611089
    10621090    pVCpu->hm.s.idLastCpu = pCpu->idCpu;
    1063     pVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_NOTHING;
     1091    pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_NOTHING;
    10641092
    10651093    if (RT_UNLIKELY(pVM->hm.s.svm.fAlwaysFlushTLB))
     
    10711099        pVCpu->hm.s.uCurrentASID     = 1;
    10721100        pVCpu->hm.s.cTLBFlushes      = pCpu->cTLBFlushes;
    1073         pVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_ENTIRE;
     1101        pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_ENTIRE;
    10741102    }
    10751103    else if (pVCpu->hm.s.fForceTLBFlush)
     
    10871115                if (pVM->hm.s.svm.u32Features & AMD_CPUID_SVM_FEATURE_EDX_FLUSH_BY_ASID)
    10881116                {
    1089                     pVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_SINGLE_CONTEXT;
     1117                    pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_SINGLE_CONTEXT;
    10901118                    pCpu->fFlushASIDBeforeUse = true;
    10911119                }
    10921120                else
    10931121                {
    1094                     pVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_ENTIRE;
     1122                    pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_ENTIRE;
    10951123                    pCpu->fFlushASIDBeforeUse = false;
    10961124                }
     
    11011129            {
    11021130                if (pVM->hm.s.svm.u32Features & AMD_CPUID_SVM_FEATURE_EDX_FLUSH_BY_ASID)
    1103                     pVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_SINGLE_CONTEXT;
     1131                    pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_SINGLE_CONTEXT;
    11041132                else
    11051133                {
    1106                     pVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_ENTIRE;
     1134                    pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_ENTIRE;
    11071135                    pCpu->fFlushASIDBeforeUse = false;
    11081136                }
     
    11151143        {
    11161144            if (pVM->hm.s.svm.u32Features & AMD_CPUID_SVM_FEATURE_EDX_FLUSH_BY_ASID)
    1117                 pVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_SINGLE_CONTEXT;
     1145                pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_SINGLE_CONTEXT;
    11181146            else
    1119                 pVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_ENTIRE;
     1147                pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_ENTIRE;
    11201148        }
    11211149
     
    11321160            STAM_COUNTER_INC(&pVCpu->hm.s.StatTlbShootdown);
    11331161            for (unsigned i = 0; i < pVCpu->hm.s.TlbShootdown.cPages; i++)
    1134                 SVMR0InvlpgA(pVCpu->hm.s.TlbShootdown.aPages[i], pVMCB->ctrl.TLBCtrl.n.u32ASID);
     1162                SVMR0InvlpgA(pVCpu->hm.s.TlbShootdown.aPages[i], pvVMCB->ctrl.TLBCtrl.n.u32ASID);
    11351163        }
    11361164    }
     
    11401168
    11411169    /* Update VMCB with the ASID. */
    1142     pVMCB->ctrl.TLBCtrl.n.u32ASID = pVCpu->hm.s.uCurrentASID;
     1170    pvVMCB->ctrl.TLBCtrl.n.u32ASID = pVCpu->hm.s.uCurrentASID;
    11431171
    11441172    AssertMsg(pVCpu->hm.s.cTLBFlushes == pCpu->cTLBFlushes,
     
    11501178
    11511179#ifdef VBOX_WITH_STATISTICS
    1152     if (pVMCB->ctrl.TLBCtrl.n.u8TLBFlush == SVM_TLB_FLUSH_NOTHING)
     1180    if (pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush == SVM_TLB_FLUSH_NOTHING)
    11531181        STAM_COUNTER_INC(&pVCpu->hm.s.StatNoFlushTLBWorldSwitch);
    1154     else if (   pVMCB->ctrl.TLBCtrl.n.u8TLBFlush == SVM_TLB_FLUSH_SINGLE_CONTEXT
    1155              || pVMCB->ctrl.TLBCtrl.n.u8TLBFlush == SVM_TLB_FLUSH_SINGLE_CONTEXT_RETAIN_GLOBALS)
     1182    else if (   pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush == SVM_TLB_FLUSH_SINGLE_CONTEXT
     1183             || pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush == SVM_TLB_FLUSH_SINGLE_CONTEXT_RETAIN_GLOBALS)
    11561184    {
    11571185        STAM_COUNTER_INC(&pVCpu->hm.s.StatFlushASID);
     
    11801208    int             rc2;
    11811209    uint64_t        exitCode    = (uint64_t)SVM_EXIT_INVALID;
    1182     SVM_VMCB       *pVMCB       = NULL;
     1210    SVM_VMCB       *pvVMCB       = NULL;
    11831211    bool            fSyncTPR    = false;
    11841212    unsigned        cResume     = 0;
     
    11941222#endif
    11951223
    1196     pVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pVMCB;
    1197     AssertMsgReturn(pVMCB, ("Invalid pVMCB\n"), VERR_HMSVM_INVALID_PVMCB);
     1224    pvVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pvVMCB;
     1225    AssertMsgReturn(pvVMCB, ("Invalid pvVMCB\n"), VERR_HMSVM_INVALID_PVMCB);
    11981226
    11991227    /*
     
    12311259            VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS);
    12321260            /* Irq inhibition is no longer active; clear the corresponding SVM state. */
    1233             pVMCB->ctrl.u64IntShadow = 0;
     1261            pvVMCB->ctrl.u64IntShadow = 0;
    12341262        }
    12351263    }
     
    12371265    {
    12381266        /* Irq inhibition is no longer active; clear the corresponding SVM state. */
    1239         pVMCB->ctrl.u64IntShadow = 0;
     1267        pvVMCB->ctrl.u64IntShadow = 0;
    12401268    }
    12411269
     
    13371365     * Note: *After* VM_FF_INHIBIT_INTERRUPTS check!!
    13381366     */
    1339     rc = hmR0SvmCheckPendingInterrupt(pVM, pVCpu, pVMCB, pCtx);
     1367    rc = hmR0SvmCheckPendingInterrupt(pVM, pVCpu, pvVMCB, pCtx);
    13401368    if (RT_FAILURE(rc))
    13411369        goto end;
     
    13771405        {
    13781406            /* cr8 bits 3-0 correspond to bits 7-4 of the task priority mmio register. */
    1379             pVMCB->ctrl.IntCtrl.n.u8VTPR = (u8LastTPR >> 4);
     1407            pvVMCB->ctrl.IntCtrl.n.u8VTPR = (u8LastTPR >> 4);
    13801408
    13811409            if (fPending)
    13821410            {
    13831411                /* A TPR change could activate a pending interrupt, so catch cr8 writes. */
    1384                 pVMCB->ctrl.u16InterceptWrCRx |= RT_BIT(8);
     1412                pvVMCB->ctrl.u16InterceptWrCRx |= RT_BIT(8);
    13851413            }
    13861414            else
     
    13901418                 * There are enough world switches for detecting pending interrupts.
    13911419                 */
    1392                 pVMCB->ctrl.u16InterceptWrCRx &= ~RT_BIT(8);
     1420                pvVMCB->ctrl.u16InterceptWrCRx &= ~RT_BIT(8);
    13931421            }
    13941422        }
     
    13991427
    14001428    /* Enable nested paging if necessary (disabled each time after #VMEXIT). */
    1401     pVMCB->ctrl.NestedPaging.n.u1NestedPaging = pVM->hm.s.fNestedPaging;
     1429    pvVMCB->ctrl.NestedPaging.n.u1NestedPaging = pVM->hm.s.fNestedPaging;
    14021430
    14031431#ifdef LOG_ENABLED
     
    14471475    pVCpu->hm.s.fForceTLBFlush = pVM->hm.s.svm.fAlwaysFlushTLB;
    14481476
    1449     Assert(sizeof(pVCpu->hm.s.svm.pVMCBPhys) == 8);
    1450     Assert(pVMCB->ctrl.IntCtrl.n.u1VIrqMasking);
    1451     Assert(pVMCB->ctrl.u64IOPMPhysAddr  == pVM->hm.s.svm.pIOBitmapPhys);
    1452     Assert(pVMCB->ctrl.u64MSRPMPhysAddr == pVCpu->hm.s.svm.pMSRBitmapPhys);
    1453     Assert(pVMCB->ctrl.u64LBRVirt == 0);
     1477    Assert(sizeof(pVCpu->hm.s.svm.HCPhysVMCB) == 8);
     1478    Assert(pvVMCB->ctrl.IntCtrl.n.u1VIrqMasking);
     1479    Assert(pvVMCB->ctrl.u64IOPMPhysAddr  == pVM->hm.s.svm.HCPhysIOBitmap);
     1480    Assert(pvVMCB->ctrl.u64MSRPMPhysAddr == pVCpu->hm.s.svm.HCPhysMSRBitmap);
     1481    Assert(pvVMCB->ctrl.u64LBRVirt == 0);
    14541482
    14551483#ifdef VBOX_STRICT
     
    14641492    u32HostExtFeatures = pVM->hm.s.cpuid.u32AMDFeatureEDX;
    14651493    if (    (u32HostExtFeatures & X86_CPUID_EXT_FEATURE_EDX_RDTSCP)
    1466         && !(pVMCB->ctrl.u32InterceptCtrl2 & SVM_CTRL2_INTERCEPT_RDTSCP))
     1494        && !(pvVMCB->ctrl.u32InterceptCtrl2 & SVM_CTRL2_INTERCEPT_RDTSCP))
    14671495    {
    14681496        pVCpu->hm.s.u64HostTSCAux = ASMRdMsr(MSR_K8_TSC_AUX);
     
    14741502
    14751503#ifdef VBOX_WITH_KERNEL_USING_XMM
    1476     hmR0SVMRunWrapXMM(pVCpu->hm.s.svm.pVMCBHostPhys, pVCpu->hm.s.svm.pVMCBPhys, pCtx, pVM, pVCpu,
     1504    hmR0SVMRunWrapXMM(pVCpu->hm.s.svm.HCPhysVMCBHost, pVCpu->hm.s.svm.HCPhysVMCB, pCtx, pVM, pVCpu,
    14771505                          pVCpu->hm.s.svm.pfnVMRun);
    14781506#else
    1479     pVCpu->hm.s.svm.pfnVMRun(pVCpu->hm.s.svm.pVMCBHostPhys, pVCpu->hm.s.svm.pVMCBPhys, pCtx, pVM, pVCpu);
     1507    pVCpu->hm.s.svm.pfnVMRun(pVCpu->hm.s.svm.HCPhysVMCBHost, pVCpu->hm.s.svm.HCPhysVMCB, pCtx, pVM, pVCpu);
    14801508#endif
    14811509    ASMAtomicWriteBool(&pVCpu->hm.s.fCheckedTLBFlush, false);
    14821510    ASMAtomicIncU32(&pVCpu->hm.s.cWorldSwitchExits);
    14831511    /* Possibly the last TSC value seen by the guest (too high) (only when we're in TSC offset mode). */
    1484     if (!(pVMCB->ctrl.u32InterceptCtrl1 & SVM_CTRL1_INTERCEPT_RDTSC))
     1512    if (!(pvVMCB->ctrl.u32InterceptCtrl1 & SVM_CTRL1_INTERCEPT_RDTSC))
    14851513    {
    14861514        /* Restore host's TSC_AUX. */
     
    14891517
    14901518        TMCpuTickSetLastSeen(pVCpu, ASMReadTSC() +
    1491                              pVMCB->ctrl.u64TSCOffset - 0x400 /* guestimate of world switch overhead in clock ticks */);
     1519                             pvVMCB->ctrl.u64TSCOffset - 0x400 /* guestimate of world switch overhead in clock ticks */);
    14921520    }
    14931521    TMNotifyEndOfExecution(pVCpu);
     
    15061534
    15071535    /* Reason for the VM exit */
    1508     exitCode = pVMCB->ctrl.u64ExitCode;
     1536    exitCode = pvVMCB->ctrl.u64ExitCode;
    15091537
    15101538    if (RT_UNLIKELY(exitCode == (uint64_t)SVM_EXIT_INVALID))      /* Invalid guest state. */
     
    15121540        HMDumpRegs(pVM, pVCpu, pCtx);
    15131541#ifdef DEBUG
    1514         Log(("ctrl.u16InterceptRdCRx            %x\n",      pVMCB->ctrl.u16InterceptRdCRx));
    1515         Log(("ctrl.u16InterceptWrCRx            %x\n",      pVMCB->ctrl.u16InterceptWrCRx));
    1516         Log(("ctrl.u16InterceptRdDRx            %x\n",      pVMCB->ctrl.u16InterceptRdDRx));
    1517         Log(("ctrl.u16InterceptWrDRx            %x\n",      pVMCB->ctrl.u16InterceptWrDRx));
    1518         Log(("ctrl.u32InterceptException        %x\n",      pVMCB->ctrl.u32InterceptException));
    1519         Log(("ctrl.u32InterceptCtrl1            %x\n",      pVMCB->ctrl.u32InterceptCtrl1));
    1520         Log(("ctrl.u32InterceptCtrl2            %x\n",      pVMCB->ctrl.u32InterceptCtrl2));
    1521         Log(("ctrl.u64IOPMPhysAddr              %RX64\n",   pVMCB->ctrl.u64IOPMPhysAddr));
    1522         Log(("ctrl.u64MSRPMPhysAddr             %RX64\n",   pVMCB->ctrl.u64MSRPMPhysAddr));
    1523         Log(("ctrl.u64TSCOffset                 %RX64\n",   pVMCB->ctrl.u64TSCOffset));
    1524 
    1525         Log(("ctrl.TLBCtrl.u32ASID              %x\n",      pVMCB->ctrl.TLBCtrl.n.u32ASID));
    1526         Log(("ctrl.TLBCtrl.u8TLBFlush           %x\n",      pVMCB->ctrl.TLBCtrl.n.u8TLBFlush));
    1527         Log(("ctrl.TLBCtrl.u24Reserved          %x\n",      pVMCB->ctrl.TLBCtrl.n.u24Reserved));
    1528 
    1529         Log(("ctrl.IntCtrl.u8VTPR               %x\n",      pVMCB->ctrl.IntCtrl.n.u8VTPR));
    1530         Log(("ctrl.IntCtrl.u1VIrqValid          %x\n",      pVMCB->ctrl.IntCtrl.n.u1VIrqValid));
    1531         Log(("ctrl.IntCtrl.u7Reserved           %x\n",      pVMCB->ctrl.IntCtrl.n.u7Reserved));
    1532         Log(("ctrl.IntCtrl.u4VIrqPriority       %x\n",      pVMCB->ctrl.IntCtrl.n.u4VIrqPriority));
    1533         Log(("ctrl.IntCtrl.u1IgnoreTPR          %x\n",      pVMCB->ctrl.IntCtrl.n.u1IgnoreTPR));
    1534         Log(("ctrl.IntCtrl.u3Reserved           %x\n",      pVMCB->ctrl.IntCtrl.n.u3Reserved));
    1535         Log(("ctrl.IntCtrl.u1VIrqMasking        %x\n",      pVMCB->ctrl.IntCtrl.n.u1VIrqMasking));
    1536         Log(("ctrl.IntCtrl.u7Reserved2          %x\n",      pVMCB->ctrl.IntCtrl.n.u7Reserved2));
    1537         Log(("ctrl.IntCtrl.u8VIrqVector         %x\n",      pVMCB->ctrl.IntCtrl.n.u8VIrqVector));
    1538         Log(("ctrl.IntCtrl.u24Reserved          %x\n",      pVMCB->ctrl.IntCtrl.n.u24Reserved));
    1539 
    1540         Log(("ctrl.u64IntShadow                 %RX64\n",   pVMCB->ctrl.u64IntShadow));
    1541         Log(("ctrl.u64ExitCode                  %RX64\n",   pVMCB->ctrl.u64ExitCode));
    1542         Log(("ctrl.u64ExitInfo1                 %RX64\n",   pVMCB->ctrl.u64ExitInfo1));
    1543         Log(("ctrl.u64ExitInfo2                 %RX64\n",   pVMCB->ctrl.u64ExitInfo2));
    1544         Log(("ctrl.ExitIntInfo.u8Vector         %x\n",      pVMCB->ctrl.ExitIntInfo.n.u8Vector));
    1545         Log(("ctrl.ExitIntInfo.u3Type           %x\n",      pVMCB->ctrl.ExitIntInfo.n.u3Type));
    1546         Log(("ctrl.ExitIntInfo.u1ErrorCodeValid %x\n",      pVMCB->ctrl.ExitIntInfo.n.u1ErrorCodeValid));
    1547         Log(("ctrl.ExitIntInfo.u19Reserved      %x\n",      pVMCB->ctrl.ExitIntInfo.n.u19Reserved));
    1548         Log(("ctrl.ExitIntInfo.u1Valid          %x\n",      pVMCB->ctrl.ExitIntInfo.n.u1Valid));
    1549         Log(("ctrl.ExitIntInfo.u32ErrorCode     %x\n",      pVMCB->ctrl.ExitIntInfo.n.u32ErrorCode));
    1550         Log(("ctrl.NestedPaging                 %RX64\n",   pVMCB->ctrl.NestedPaging.au64));
    1551         Log(("ctrl.EventInject.u8Vector         %x\n",      pVMCB->ctrl.EventInject.n.u8Vector));
    1552         Log(("ctrl.EventInject.u3Type           %x\n",      pVMCB->ctrl.EventInject.n.u3Type));
    1553         Log(("ctrl.EventInject.u1ErrorCodeValid %x\n",      pVMCB->ctrl.EventInject.n.u1ErrorCodeValid));
    1554         Log(("ctrl.EventInject.u19Reserved      %x\n",      pVMCB->ctrl.EventInject.n.u19Reserved));
    1555         Log(("ctrl.EventInject.u1Valid          %x\n",      pVMCB->ctrl.EventInject.n.u1Valid));
    1556         Log(("ctrl.EventInject.u32ErrorCode     %x\n",      pVMCB->ctrl.EventInject.n.u32ErrorCode));
    1557 
    1558         Log(("ctrl.u64NestedPagingCR3           %RX64\n",   pVMCB->ctrl.u64NestedPagingCR3));
    1559         Log(("ctrl.u64LBRVirt                   %RX64\n",   pVMCB->ctrl.u64LBRVirt));
    1560 
    1561         Log(("guest.CS.u16Sel                   %04X\n",    pVMCB->guest.CS.u16Sel));
    1562         Log(("guest.CS.u16Attr                  %04X\n",    pVMCB->guest.CS.u16Attr));
    1563         Log(("guest.CS.u32Limit                 %X\n",      pVMCB->guest.CS.u32Limit));
    1564         Log(("guest.CS.u64Base                  %RX64\n",   pVMCB->guest.CS.u64Base));
    1565         Log(("guest.DS.u16Sel                   %04X\n",    pVMCB->guest.DS.u16Sel));
    1566         Log(("guest.DS.u16Attr                  %04X\n",    pVMCB->guest.DS.u16Attr));
    1567         Log(("guest.DS.u32Limit                 %X\n",      pVMCB->guest.DS.u32Limit));
    1568         Log(("guest.DS.u64Base                  %RX64\n",   pVMCB->guest.DS.u64Base));
    1569         Log(("guest.ES.u16Sel                   %04X\n",    pVMCB->guest.ES.u16Sel));
    1570         Log(("guest.ES.u16Attr                  %04X\n",    pVMCB->guest.ES.u16Attr));
    1571         Log(("guest.ES.u32Limit                 %X\n",      pVMCB->guest.ES.u32Limit));
    1572         Log(("guest.ES.u64Base                  %RX64\n",   pVMCB->guest.ES.u64Base));
    1573         Log(("guest.FS.u16Sel                   %04X\n",    pVMCB->guest.FS.u16Sel));
    1574         Log(("guest.FS.u16Attr                  %04X\n",    pVMCB->guest.FS.u16Attr));
    1575         Log(("guest.FS.u32Limit                 %X\n",      pVMCB->guest.FS.u32Limit));
    1576         Log(("guest.FS.u64Base                  %RX64\n",   pVMCB->guest.FS.u64Base));
    1577         Log(("guest.GS.u16Sel                   %04X\n",    pVMCB->guest.GS.u16Sel));
    1578         Log(("guest.GS.u16Attr                  %04X\n",    pVMCB->guest.GS.u16Attr));
    1579         Log(("guest.GS.u32Limit                 %X\n",      pVMCB->guest.GS.u32Limit));
    1580         Log(("guest.GS.u64Base                  %RX64\n",   pVMCB->guest.GS.u64Base));
    1581 
    1582         Log(("guest.GDTR.u32Limit               %X\n",      pVMCB->guest.GDTR.u32Limit));
    1583         Log(("guest.GDTR.u64Base                %RX64\n",   pVMCB->guest.GDTR.u64Base));
    1584 
    1585         Log(("guest.LDTR.u16Sel                 %04X\n",    pVMCB->guest.LDTR.u16Sel));
    1586         Log(("guest.LDTR.u16Attr                %04X\n",    pVMCB->guest.LDTR.u16Attr));
    1587         Log(("guest.LDTR.u32Limit               %X\n",      pVMCB->guest.LDTR.u32Limit));
    1588         Log(("guest.LDTR.u64Base                %RX64\n",   pVMCB->guest.LDTR.u64Base));
    1589 
    1590         Log(("guest.IDTR.u32Limit               %X\n",      pVMCB->guest.IDTR.u32Limit));
    1591         Log(("guest.IDTR.u64Base                %RX64\n",   pVMCB->guest.IDTR.u64Base));
    1592 
    1593         Log(("guest.TR.u16Sel                   %04X\n",    pVMCB->guest.TR.u16Sel));
    1594         Log(("guest.TR.u16Attr                  %04X\n",    pVMCB->guest.TR.u16Attr));
    1595         Log(("guest.TR.u32Limit                 %X\n",      pVMCB->guest.TR.u32Limit));
    1596         Log(("guest.TR.u64Base                  %RX64\n",   pVMCB->guest.TR.u64Base));
    1597 
    1598         Log(("guest.u8CPL                       %X\n",      pVMCB->guest.u8CPL));
    1599         Log(("guest.u64CR0                      %RX64\n",   pVMCB->guest.u64CR0));
    1600         Log(("guest.u64CR2                      %RX64\n",   pVMCB->guest.u64CR2));
    1601         Log(("guest.u64CR3                      %RX64\n",   pVMCB->guest.u64CR3));
    1602         Log(("guest.u64CR4                      %RX64\n",   pVMCB->guest.u64CR4));
    1603         Log(("guest.u64DR6                      %RX64\n",   pVMCB->guest.u64DR6));
    1604         Log(("guest.u64DR7                      %RX64\n",   pVMCB->guest.u64DR7));
    1605 
    1606         Log(("guest.u64RIP                      %RX64\n",   pVMCB->guest.u64RIP));
    1607         Log(("guest.u64RSP                      %RX64\n",   pVMCB->guest.u64RSP));
    1608         Log(("guest.u64RAX                      %RX64\n",   pVMCB->guest.u64RAX));
    1609         Log(("guest.u64RFlags                   %RX64\n",   pVMCB->guest.u64RFlags));
    1610 
    1611         Log(("guest.u64SysEnterCS               %RX64\n",   pVMCB->guest.u64SysEnterCS));
    1612         Log(("guest.u64SysEnterEIP              %RX64\n",   pVMCB->guest.u64SysEnterEIP));
    1613         Log(("guest.u64SysEnterESP              %RX64\n",   pVMCB->guest.u64SysEnterESP));
    1614 
    1615         Log(("guest.u64EFER                     %RX64\n",   pVMCB->guest.u64EFER));
    1616         Log(("guest.u64STAR                     %RX64\n",   pVMCB->guest.u64STAR));
    1617         Log(("guest.u64LSTAR                    %RX64\n",   pVMCB->guest.u64LSTAR));
    1618         Log(("guest.u64CSTAR                    %RX64\n",   pVMCB->guest.u64CSTAR));
    1619         Log(("guest.u64SFMASK                   %RX64\n",   pVMCB->guest.u64SFMASK));
    1620         Log(("guest.u64KernelGSBase             %RX64\n",   pVMCB->guest.u64KernelGSBase));
    1621         Log(("guest.u64GPAT                     %RX64\n",   pVMCB->guest.u64GPAT));
    1622         Log(("guest.u64DBGCTL                   %RX64\n",   pVMCB->guest.u64DBGCTL));
    1623         Log(("guest.u64BR_FROM                  %RX64\n",   pVMCB->guest.u64BR_FROM));
    1624         Log(("guest.u64BR_TO                    %RX64\n",   pVMCB->guest.u64BR_TO));
    1625         Log(("guest.u64LASTEXCPFROM             %RX64\n",   pVMCB->guest.u64LASTEXCPFROM));
    1626         Log(("guest.u64LASTEXCPTO               %RX64\n",   pVMCB->guest.u64LASTEXCPTO));
     1542        Log(("ctrl.u16InterceptRdCRx            %x\n",      pvVMCB->ctrl.u16InterceptRdCRx));
     1543        Log(("ctrl.u16InterceptWrCRx            %x\n",      pvVMCB->ctrl.u16InterceptWrCRx));
     1544        Log(("ctrl.u16InterceptRdDRx            %x\n",      pvVMCB->ctrl.u16InterceptRdDRx));
     1545        Log(("ctrl.u16InterceptWrDRx            %x\n",      pvVMCB->ctrl.u16InterceptWrDRx));
     1546        Log(("ctrl.u32InterceptException        %x\n",      pvVMCB->ctrl.u32InterceptException));
     1547        Log(("ctrl.u32InterceptCtrl1            %x\n",      pvVMCB->ctrl.u32InterceptCtrl1));
     1548        Log(("ctrl.u32InterceptCtrl2            %x\n",      pvVMCB->ctrl.u32InterceptCtrl2));
     1549        Log(("ctrl.u64IOPMPhysAddr              %RX64\n",   pvVMCB->ctrl.u64IOPMPhysAddr));
     1550        Log(("ctrl.u64MSRPMPhysAddr             %RX64\n",   pvVMCB->ctrl.u64MSRPMPhysAddr));
     1551        Log(("ctrl.u64TSCOffset                 %RX64\n",   pvVMCB->ctrl.u64TSCOffset));
     1552
     1553        Log(("ctrl.TLBCtrl.u32ASID              %x\n",      pvVMCB->ctrl.TLBCtrl.n.u32ASID));
     1554        Log(("ctrl.TLBCtrl.u8TLBFlush           %x\n",      pvVMCB->ctrl.TLBCtrl.n.u8TLBFlush));
     1555        Log(("ctrl.TLBCtrl.u24Reserved          %x\n",      pvVMCB->ctrl.TLBCtrl.n.u24Reserved));
     1556
     1557        Log(("ctrl.IntCtrl.u8VTPR               %x\n",      pvVMCB->ctrl.IntCtrl.n.u8VTPR));
     1558        Log(("ctrl.IntCtrl.u1VIrqValid          %x\n",      pvVMCB->ctrl.IntCtrl.n.u1VIrqValid));
     1559        Log(("ctrl.IntCtrl.u7Reserved           %x\n",      pvVMCB->ctrl.IntCtrl.n.u7Reserved));
     1560        Log(("ctrl.IntCtrl.u4VIrqPriority       %x\n",      pvVMCB->ctrl.IntCtrl.n.u4VIrqPriority));
     1561        Log(("ctrl.IntCtrl.u1IgnoreTPR          %x\n",      pvVMCB->ctrl.IntCtrl.n.u1IgnoreTPR));
     1562        Log(("ctrl.IntCtrl.u3Reserved           %x\n",      pvVMCB->ctrl.IntCtrl.n.u3Reserved));
     1563        Log(("ctrl.IntCtrl.u1VIrqMasking        %x\n",      pvVMCB->ctrl.IntCtrl.n.u1VIrqMasking));
     1564        Log(("ctrl.IntCtrl.u7Reserved2          %x\n",      pvVMCB->ctrl.IntCtrl.n.u7Reserved2));
     1565        Log(("ctrl.IntCtrl.u8VIrqVector         %x\n",      pvVMCB->ctrl.IntCtrl.n.u8VIrqVector));
     1566        Log(("ctrl.IntCtrl.u24Reserved          %x\n",      pvVMCB->ctrl.IntCtrl.n.u24Reserved));
     1567
     1568        Log(("ctrl.u64IntShadow                 %RX64\n",   pvVMCB->ctrl.u64IntShadow));
     1569        Log(("ctrl.u64ExitCode                  %RX64\n",   pvVMCB->ctrl.u64ExitCode));
     1570        Log(("ctrl.u64ExitInfo1                 %RX64\n",   pvVMCB->ctrl.u64ExitInfo1));
     1571        Log(("ctrl.u64ExitInfo2                 %RX64\n",   pvVMCB->ctrl.u64ExitInfo2));
     1572        Log(("ctrl.ExitIntInfo.u8Vector         %x\n",      pvVMCB->ctrl.ExitIntInfo.n.u8Vector));
     1573        Log(("ctrl.ExitIntInfo.u3Type           %x\n",      pvVMCB->ctrl.ExitIntInfo.n.u3Type));
     1574        Log(("ctrl.ExitIntInfo.u1ErrorCodeValid %x\n",      pvVMCB->ctrl.ExitIntInfo.n.u1ErrorCodeValid));
     1575        Log(("ctrl.ExitIntInfo.u19Reserved      %x\n",      pvVMCB->ctrl.ExitIntInfo.n.u19Reserved));
     1576        Log(("ctrl.ExitIntInfo.u1Valid          %x\n",      pvVMCB->ctrl.ExitIntInfo.n.u1Valid));
     1577        Log(("ctrl.ExitIntInfo.u32ErrorCode     %x\n",      pvVMCB->ctrl.ExitIntInfo.n.u32ErrorCode));
     1578        Log(("ctrl.NestedPaging                 %RX64\n",   pvVMCB->ctrl.NestedPaging.au64));
     1579        Log(("ctrl.EventInject.u8Vector         %x\n",      pvVMCB->ctrl.EventInject.n.u8Vector));
     1580        Log(("ctrl.EventInject.u3Type           %x\n",      pvVMCB->ctrl.EventInject.n.u3Type));
     1581        Log(("ctrl.EventInject.u1ErrorCodeValid %x\n",      pvVMCB->ctrl.EventInject.n.u1ErrorCodeValid));
     1582        Log(("ctrl.EventInject.u19Reserved      %x\n",      pvVMCB->ctrl.EventInject.n.u19Reserved));
     1583        Log(("ctrl.EventInject.u1Valid          %x\n",      pvVMCB->ctrl.EventInject.n.u1Valid));
     1584        Log(("ctrl.EventInject.u32ErrorCode     %x\n",      pvVMCB->ctrl.EventInject.n.u32ErrorCode));
     1585
     1586        Log(("ctrl.u64NestedPagingCR3           %RX64\n",   pvVMCB->ctrl.u64NestedPagingCR3));
     1587        Log(("ctrl.u64LBRVirt                   %RX64\n",   pvVMCB->ctrl.u64LBRVirt));
     1588
     1589        Log(("guest.CS.u16Sel                   %04X\n",    pvVMCB->guest.CS.u16Sel));
     1590        Log(("guest.CS.u16Attr                  %04X\n",    pvVMCB->guest.CS.u16Attr));
     1591        Log(("guest.CS.u32Limit                 %X\n",      pvVMCB->guest.CS.u32Limit));
     1592        Log(("guest.CS.u64Base                  %RX64\n",   pvVMCB->guest.CS.u64Base));
     1593        Log(("guest.DS.u16Sel                   %04X\n",    pvVMCB->guest.DS.u16Sel));
     1594        Log(("guest.DS.u16Attr                  %04X\n",    pvVMCB->guest.DS.u16Attr));
     1595        Log(("guest.DS.u32Limit                 %X\n",      pvVMCB->guest.DS.u32Limit));
     1596        Log(("guest.DS.u64Base                  %RX64\n",   pvVMCB->guest.DS.u64Base));
     1597        Log(("guest.ES.u16Sel                   %04X\n",    pvVMCB->guest.ES.u16Sel));
     1598        Log(("guest.ES.u16Attr                  %04X\n",    pvVMCB->guest.ES.u16Attr));
     1599        Log(("guest.ES.u32Limit                 %X\n",      pvVMCB->guest.ES.u32Limit));
     1600        Log(("guest.ES.u64Base                  %RX64\n",   pvVMCB->guest.ES.u64Base));
     1601        Log(("guest.FS.u16Sel                   %04X\n",    pvVMCB->guest.FS.u16Sel));
     1602        Log(("guest.FS.u16Attr                  %04X\n",    pvVMCB->guest.FS.u16Attr));
     1603        Log(("guest.FS.u32Limit                 %X\n",      pvVMCB->guest.FS.u32Limit));
     1604        Log(("guest.FS.u64Base                  %RX64\n",   pvVMCB->guest.FS.u64Base));
     1605        Log(("guest.GS.u16Sel                   %04X\n",    pvVMCB->guest.GS.u16Sel));
     1606        Log(("guest.GS.u16Attr                  %04X\n",    pvVMCB->guest.GS.u16Attr));
     1607        Log(("guest.GS.u32Limit                 %X\n",      pvVMCB->guest.GS.u32Limit));
     1608        Log(("guest.GS.u64Base                  %RX64\n",   pvVMCB->guest.GS.u64Base));
     1609
     1610        Log(("guest.GDTR.u32Limit               %X\n",      pvVMCB->guest.GDTR.u32Limit));
     1611        Log(("guest.GDTR.u64Base                %RX64\n",   pvVMCB->guest.GDTR.u64Base));
     1612
     1613        Log(("guest.LDTR.u16Sel                 %04X\n",    pvVMCB->guest.LDTR.u16Sel));
     1614        Log(("guest.LDTR.u16Attr                %04X\n",    pvVMCB->guest.LDTR.u16Attr));
     1615        Log(("guest.LDTR.u32Limit               %X\n",      pvVMCB->guest.LDTR.u32Limit));
     1616        Log(("guest.LDTR.u64Base                %RX64\n",   pvVMCB->guest.LDTR.u64Base));
     1617
     1618        Log(("guest.IDTR.u32Limit               %X\n",      pvVMCB->guest.IDTR.u32Limit));
     1619        Log(("guest.IDTR.u64Base                %RX64\n",   pvVMCB->guest.IDTR.u64Base));
     1620
     1621        Log(("guest.TR.u16Sel                   %04X\n",    pvVMCB->guest.TR.u16Sel));
     1622        Log(("guest.TR.u16Attr                  %04X\n",    pvVMCB->guest.TR.u16Attr));
     1623        Log(("guest.TR.u32Limit                 %X\n",      pvVMCB->guest.TR.u32Limit));
     1624        Log(("guest.TR.u64Base                  %RX64\n",   pvVMCB->guest.TR.u64Base));
     1625
     1626        Log(("guest.u8CPL                       %X\n",      pvVMCB->guest.u8CPL));
     1627        Log(("guest.u64CR0                      %RX64\n",   pvVMCB->guest.u64CR0));
     1628        Log(("guest.u64CR2                      %RX64\n",   pvVMCB->guest.u64CR2));
     1629        Log(("guest.u64CR3                      %RX64\n",   pvVMCB->guest.u64CR3));
     1630        Log(("guest.u64CR4                      %RX64\n",   pvVMCB->guest.u64CR4));
     1631        Log(("guest.u64DR6                      %RX64\n",   pvVMCB->guest.u64DR6));
     1632        Log(("guest.u64DR7                      %RX64\n",   pvVMCB->guest.u64DR7));
     1633
     1634        Log(("guest.u64RIP                      %RX64\n",   pvVMCB->guest.u64RIP));
     1635        Log(("guest.u64RSP                      %RX64\n",   pvVMCB->guest.u64RSP));
     1636        Log(("guest.u64RAX                      %RX64\n",   pvVMCB->guest.u64RAX));
     1637        Log(("guest.u64RFlags                   %RX64\n",   pvVMCB->guest.u64RFlags));
     1638
     1639        Log(("guest.u64SysEnterCS               %RX64\n",   pvVMCB->guest.u64SysEnterCS));
     1640        Log(("guest.u64SysEnterEIP              %RX64\n",   pvVMCB->guest.u64SysEnterEIP));
     1641        Log(("guest.u64SysEnterESP              %RX64\n",   pvVMCB->guest.u64SysEnterESP));
     1642
     1643        Log(("guest.u64EFER                     %RX64\n",   pvVMCB->guest.u64EFER));
     1644        Log(("guest.u64STAR                     %RX64\n",   pvVMCB->guest.u64STAR));
     1645        Log(("guest.u64LSTAR                    %RX64\n",   pvVMCB->guest.u64LSTAR));
     1646        Log(("guest.u64CSTAR                    %RX64\n",   pvVMCB->guest.u64CSTAR));
     1647        Log(("guest.u64SFMASK                   %RX64\n",   pvVMCB->guest.u64SFMASK));
     1648        Log(("guest.u64KernelGSBase             %RX64\n",   pvVMCB->guest.u64KernelGSBase));
     1649        Log(("guest.u64GPAT                     %RX64\n",   pvVMCB->guest.u64GPAT));
     1650        Log(("guest.u64DBGCTL                   %RX64\n",   pvVMCB->guest.u64DBGCTL));
     1651        Log(("guest.u64BR_FROM                  %RX64\n",   pvVMCB->guest.u64BR_FROM));
     1652        Log(("guest.u64BR_TO                    %RX64\n",   pvVMCB->guest.u64BR_TO));
     1653        Log(("guest.u64LASTEXCPFROM             %RX64\n",   pvVMCB->guest.u64LASTEXCPFROM));
     1654        Log(("guest.u64LASTEXCPTO               %RX64\n",   pvVMCB->guest.u64LASTEXCPTO));
    16271655#endif
    16281656        rc = VERR_SVM_UNABLE_TO_START_VM;
     
    16321660
    16331661    /* Let's first sync back EIP, ESP, and EFLAGS. */
    1634     pCtx->rip        = pVMCB->guest.u64RIP;
    1635     pCtx->rsp        = pVMCB->guest.u64RSP;
    1636     pCtx->eflags.u32 = pVMCB->guest.u64RFlags;
     1662    pCtx->rip        = pvVMCB->guest.u64RIP;
     1663    pCtx->rsp        = pvVMCB->guest.u64RSP;
     1664    pCtx->eflags.u32 = pvVMCB->guest.u64RFlags;
    16371665    /* eax is saved/restore across the vmrun instruction */
    1638     pCtx->rax        = pVMCB->guest.u64RAX;
     1666    pCtx->rax        = pvVMCB->guest.u64RAX;
    16391667
    16401668    /*
     
    16421670     * FS & GS base are saved with SVM_READ_SELREG.
    16431671     */
    1644     pCtx->msrSTAR         = pVMCB->guest.u64STAR;            /* legacy syscall eip, cs & ss */
    1645     pCtx->msrLSTAR        = pVMCB->guest.u64LSTAR;           /* 64-bit mode syscall rip */
    1646     pCtx->msrCSTAR        = pVMCB->guest.u64CSTAR;           /* compatibility mode syscall rip */
    1647     pCtx->msrSFMASK       = pVMCB->guest.u64SFMASK;          /* syscall flag mask */
    1648     pCtx->msrKERNELGSBASE = pVMCB->guest.u64KernelGSBase;    /* swapgs exchange value */
    1649     pCtx->SysEnter.cs     = pVMCB->guest.u64SysEnterCS;
    1650     pCtx->SysEnter.eip    = pVMCB->guest.u64SysEnterEIP;
    1651     pCtx->SysEnter.esp    = pVMCB->guest.u64SysEnterESP;
     1672    pCtx->msrSTAR         = pvVMCB->guest.u64STAR;            /* legacy syscall eip, cs & ss */
     1673    pCtx->msrLSTAR        = pvVMCB->guest.u64LSTAR;           /* 64-bit mode syscall rip */
     1674    pCtx->msrCSTAR        = pvVMCB->guest.u64CSTAR;           /* compatibility mode syscall rip */
     1675    pCtx->msrSFMASK       = pvVMCB->guest.u64SFMASK;          /* syscall flag mask */
     1676    pCtx->msrKERNELGSBASE = pvVMCB->guest.u64KernelGSBase;    /* swapgs exchange value */
     1677    pCtx->SysEnter.cs     = pvVMCB->guest.u64SysEnterCS;
     1678    pCtx->SysEnter.eip    = pvVMCB->guest.u64SysEnterEIP;
     1679    pCtx->SysEnter.esp    = pvVMCB->guest.u64SysEnterESP;
    16521680
    16531681    /* Can be updated behind our back in the nested paging case. */
    1654     pCtx->cr2        = pVMCB->guest.u64CR2;
     1682    pCtx->cr2        = pvVMCB->guest.u64CR2;
    16551683
    16561684    /* Guest CPU context: ES, CS, SS, DS, FS, GS. */
     
    16931721     * SS (chapter AMD spec. 15.5.1 Basic operation).
    16941722     */
    1695     Assert(!(pVMCB->guest.u8CPL & ~0x3));
    1696     pCtx->ss.Attr.n.u2Dpl = pVMCB->guest.u8CPL & 0x3;
     1723    Assert(!(pvVMCB->guest.u8CPL & ~0x3));
     1724    pCtx->ss.Attr.n.u2Dpl = pvVMCB->guest.u8CPL & 0x3;
    16971725
    16981726    /*
     
    17031731    SVM_READ_SELREG(TR, tr);
    17041732
    1705     pCtx->gdtr.cbGdt        = pVMCB->guest.GDTR.u32Limit;
    1706     pCtx->gdtr.pGdt         = pVMCB->guest.GDTR.u64Base;
    1707 
    1708     pCtx->idtr.cbIdt        = pVMCB->guest.IDTR.u32Limit;
    1709     pCtx->idtr.pIdt         = pVMCB->guest.IDTR.u64Base;
     1733    pCtx->gdtr.cbGdt        = pvVMCB->guest.GDTR.u32Limit;
     1734    pCtx->gdtr.pGdt         = pvVMCB->guest.GDTR.u64Base;
     1735
     1736    pCtx->idtr.cbIdt        = pvVMCB->guest.IDTR.u32Limit;
     1737    pCtx->idtr.pIdt         = pvVMCB->guest.IDTR.u64Base;
    17101738
    17111739    /*
     
    17141742     */
    17151743    if (   pVM->hm.s.fNestedPaging
    1716         && pCtx->cr3 != pVMCB->guest.u64CR3)
    1717     {
    1718         CPUMSetGuestCR3(pVCpu, pVMCB->guest.u64CR3);
    1719         PGMUpdateCR3(pVCpu, pVMCB->guest.u64CR3);
     1744        && pCtx->cr3 != pvVMCB->guest.u64CR3)
     1745    {
     1746        CPUMSetGuestCR3(pVCpu, pvVMCB->guest.u64CR3);
     1747        PGMUpdateCR3(pVCpu, pvVMCB->guest.u64CR3);
    17201748    }
    17211749
     
    17241752
    17251753    /* Take care of instruction fusing (sti, mov ss) (see AMD spec. 15.20.5 Interrupt Shadows) */
    1726     if (pVMCB->ctrl.u64IntShadow & SVM_INTERRUPT_SHADOW_ACTIVE)
    1727     {
    1728         Log(("uInterruptState %x rip=%RGv\n", pVMCB->ctrl.u64IntShadow, (RTGCPTR)pCtx->rip));
     1754    if (pvVMCB->ctrl.u64IntShadow & SVM_INTERRUPT_SHADOW_ACTIVE)
     1755    {
     1756        Log(("uInterruptState %x rip=%RGv\n", pvVMCB->ctrl.u64IntShadow, (RTGCPTR)pCtx->rip));
    17291757        EMSetInhibitInterruptsPC(pVCpu, pCtx->rip);
    17301758    }
     
    17351763
    17361764    /* Sync back DR6 as it could have been changed by hitting breakpoints. */
    1737     pCtx->dr[6] = pVMCB->guest.u64DR6;
     1765    pCtx->dr[6] = pvVMCB->guest.u64DR6;
    17381766    /* DR7.GD can be cleared by debug exceptions, so sync it back as well. */
    1739     pCtx->dr[7] = pVMCB->guest.u64DR7;
     1767    pCtx->dr[7] = pvVMCB->guest.u64DR7;
    17401768
    17411769    /* Check if an injected event was interrupted prematurely. */
    1742     pVCpu->hm.s.Event.intInfo = pVMCB->ctrl.ExitIntInfo.au64[0];
    1743     if (    pVMCB->ctrl.ExitIntInfo.n.u1Valid
     1770    pVCpu->hm.s.Event.intInfo = pvVMCB->ctrl.ExitIntInfo.au64[0];
     1771    if (    pvVMCB->ctrl.ExitIntInfo.n.u1Valid
    17441772            /* we don't care about 'int xx' as the instruction will be restarted. */
    1745         &&  pVMCB->ctrl.ExitIntInfo.n.u3Type != SVM_EVENT_SOFTWARE_INT)
     1773        &&  pvVMCB->ctrl.ExitIntInfo.n.u3Type != SVM_EVENT_SOFTWARE_INT)
    17461774    {
    17471775        Log(("Pending inject %RX64 at %RGv exit=%08x\n", pVCpu->hm.s.Event.intInfo, (RTGCPTR)pCtx->rip, exitCode));
     
    17601788        pVCpu->hm.s.Event.fPending = true;
    17611789        /* Error code present? (redundant) */
    1762         if (pVMCB->ctrl.ExitIntInfo.n.u1ErrorCodeValid)
    1763             pVCpu->hm.s.Event.errCode  = pVMCB->ctrl.ExitIntInfo.n.u32ErrorCode;
     1790        if (pvVMCB->ctrl.ExitIntInfo.n.u1ErrorCodeValid)
     1791            pVCpu->hm.s.Event.errCode  = pvVMCB->ctrl.ExitIntInfo.n.u32ErrorCode;
    17641792        else
    17651793            pVCpu->hm.s.Event.errCode  = 0;
     
    17861814        else
    17871815        {
    1788             if ((uint8_t)(u8LastTPR >> 4) != pVMCB->ctrl.IntCtrl.n.u8VTPR)
     1816            if ((uint8_t)(u8LastTPR >> 4) != pvVMCB->ctrl.IntCtrl.n.u8VTPR)
    17891817            {
    17901818                /* cr8 bits 3-0 correspond to bits 7-4 of the task priority mmio register. */
    1791                 rc2 = PDMApicSetTPR(pVCpu, pVMCB->ctrl.IntCtrl.n.u8VTPR << 4);
     1819                rc2 = PDMApicSetTPR(pVCpu, pvVMCB->ctrl.IntCtrl.n.u8VTPR << 4);
    17921820                AssertRC(rc2);
    17931821            }
     
    17981826    RTTraceBufAddMsgF(pVM->CTX_SUFF(hTraceBuf), "vmexit %08x at %04:%08RX64 %RX64 %RX64 %RX64",
    17991827                      exitCode, pCtx->cs.Sel, pCtx->rip,
    1800                       pVMCB->ctrl.u64ExitInfo1, pVMCB->ctrl.u64ExitInfo2, pVMCB->ctrl.ExitIntInfo.au64[0]);
     1828                      pvVMCB->ctrl.u64ExitInfo1, pvVMCB->ctrl.u64ExitInfo2, pvVMCB->ctrl.ExitIntInfo.au64[0]);
    18011829#endif
    18021830#if ARCH_BITS == 64 /* for the time being */
    1803     VBOXVMM_R0_HMSVM_VMEXIT(pVCpu, pCtx, exitCode, pVMCB->ctrl.u64ExitInfo1, pVMCB->ctrl.u64ExitInfo2,
    1804                             pVMCB->ctrl.ExitIntInfo.au64[0], UINT64_MAX);
     1831    VBOXVMM_R0_HMSVM_VMEXIT(pVCpu, pCtx, exitCode, pvVMCB->ctrl.u64ExitInfo1, pvVMCB->ctrl.u64ExitInfo2,
     1832                            pvVMCB->ctrl.ExitIntInfo.au64[0], UINT64_MAX);
    18051833#endif
    18061834    STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatExit1, &pVCpu->hm.s.StatExit2, x);
     
    18431871                Event.n.u8Vector = X86_XCPT_DB;
    18441872
    1845                 hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     1873                hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    18461874                goto ResumeExecution;
    18471875            }
     
    18771905            Event.n.u8Vector = X86_XCPT_NM;
    18781906
    1879             hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     1907            hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    18801908            goto ResumeExecution;
    18811909        }
     
    18831911        case X86_XCPT_PF: /* Page fault */
    18841912        {
    1885             uint32_t    errCode        = pVMCB->ctrl.u64ExitInfo1;     /* EXITINFO1 = error code */
    1886             RTGCUINTPTR uFaultAddress  = pVMCB->ctrl.u64ExitInfo2;     /* EXITINFO2 = fault address */
     1913            uint32_t    errCode        = pvVMCB->ctrl.u64ExitInfo1;     /* EXITINFO1 = error code */
     1914            RTGCUINTPTR uFaultAddress  = pvVMCB->ctrl.u64ExitInfo2;     /* EXITINFO2 = fault address */
    18871915
    18881916#ifdef VBOX_ALWAYS_TRAP_PF
     
    19061934                Event.n.u32ErrorCode        = errCode;
    19071935
    1908                 hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     1936                hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    19091937                goto ResumeExecution;
    19101938            }
     
    19802008                Event.n.u32ErrorCode        = errCode;
    19812009
    1982                 hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     2010                hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    19832011                goto ResumeExecution;
    19842012            }
     
    20092037            Event.n.u8Vector = X86_XCPT_MF;
    20102038
    2011             hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     2039            hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    20122040            goto ResumeExecution;
    20132041        }
     
    20312059                    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestGP);
    20322060                    Event.n.u1ErrorCodeValid    = 1;
    2033                     Event.n.u32ErrorCode        = pVMCB->ctrl.u64ExitInfo1; /* EXITINFO1 = error code */
     2061                    Event.n.u32ErrorCode        = pvVMCB->ctrl.u64ExitInfo1; /* EXITINFO1 = error code */
    20342062                    break;
    20352063                case X86_XCPT_BP:
     
    20452073                    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestSS);
    20462074                    Event.n.u1ErrorCodeValid    = 1;
    2047                     Event.n.u32ErrorCode        = pVMCB->ctrl.u64ExitInfo1; /* EXITINFO1 = error code */
     2075                    Event.n.u32ErrorCode        = pvVMCB->ctrl.u64ExitInfo1; /* EXITINFO1 = error code */
    20482076                    break;
    20492077                case X86_XCPT_NP:
    20502078                    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestNP);
    20512079                    Event.n.u1ErrorCodeValid    = 1;
    2052                     Event.n.u32ErrorCode        = pVMCB->ctrl.u64ExitInfo1; /* EXITINFO1 = error code */
     2080                    Event.n.u32ErrorCode        = pvVMCB->ctrl.u64ExitInfo1; /* EXITINFO1 = error code */
    20532081                    break;
    20542082            }
    20552083            Log(("Trap %x at %04x:%RGv esi=%x\n", vector, pCtx->cs.Sel, (RTGCPTR)pCtx->rip, pCtx->esi));
    2056             hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     2084            hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    20572085            goto ResumeExecution;
    20582086        }
     
    20702098    {
    20712099        /* EXITINFO1 contains fault errorcode; EXITINFO2 contains the guest physical address causing the fault. */
    2072         uint32_t    errCode        = pVMCB->ctrl.u64ExitInfo1;     /* EXITINFO1 = error code */
    2073         RTGCPHYS    GCPhysFault    = pVMCB->ctrl.u64ExitInfo2;     /* EXITINFO2 = fault address */
     2100        uint32_t    errCode        = pvVMCB->ctrl.u64ExitInfo1;     /* EXITINFO1 = error code */
     2101        RTGCPHYS    GCPhysFault    = pvVMCB->ctrl.u64ExitInfo2;     /* EXITINFO2 = fault address */
    20742102        PGMMODE     enmShwPagingMode;
    20752103
     
    21712199        /* A virtual interrupt is about to be delivered, which means IF=1. */
    21722200        Log(("SVM_EXIT_VINTR IF=%d\n", pCtx->eflags.Bits.u1IF));
    2173         pVMCB->ctrl.IntCtrl.n.u1VIrqValid    = 0;
    2174         pVMCB->ctrl.IntCtrl.n.u8VIrqVector   = 0;
     2201        pvVMCB->ctrl.IntCtrl.n.u1VIrqValid    = 0;
     2202        pvVMCB->ctrl.IntCtrl.n.u8VIrqVector   = 0;
    21752203        goto ResumeExecution;
    21762204
     
    23412369
    23422370            /* Disable drx move intercepts. */
    2343             pVMCB->ctrl.u16InterceptRdDRx = 0;
    2344             pVMCB->ctrl.u16InterceptWrDRx = 0;
     2371            pvVMCB->ctrl.u16InterceptRdDRx = 0;
     2372            pvVMCB->ctrl.u16InterceptWrDRx = 0;
    23452373
    23462374            /* Save the host and load the guest debug state. */
     
    23762404
    23772405            /* Disable DRx move intercepts. */
    2378             pVMCB->ctrl.u16InterceptRdDRx = 0;
    2379             pVMCB->ctrl.u16InterceptWrDRx = 0;
     2406            pvVMCB->ctrl.u16InterceptRdDRx = 0;
     2407            pvVMCB->ctrl.u16InterceptWrDRx = 0;
    23802408
    23812409            /* Save the host and load the guest debug state. */
     
    24012429        SVM_IOIO_EXIT   IoExitInfo;
    24022430
    2403         IoExitInfo.au32[0] = pVMCB->ctrl.u64ExitInfo1;
     2431        IoExitInfo.au32[0] = pvVMCB->ctrl.u64ExitInfo1;
    24042432        unsigned uIdx      = (IoExitInfo.au32[0] >> 4) & 0x7;
    24052433        uint32_t uIOSize   = g_aIOSize[uIdx];
     
    24522480                if (rc == VINF_IOM_R3_IOPORT_WRITE)
    24532481                {
    2454                     HMR0SavePendingIOPortWrite(pVCpu, pCtx->rip, pVMCB->ctrl.u64ExitInfo2, IoExitInfo.n.u16Port,
     2482                    HMR0SavePendingIOPortWrite(pVCpu, pCtx->rip, pvVMCB->ctrl.u64ExitInfo2, IoExitInfo.n.u16Port,
    24552483                                                   uAndVal, uIOSize);
    24562484                }
     
    24712499                else if (rc == VINF_IOM_R3_IOPORT_READ)
    24722500                {
    2473                     HMR0SavePendingIOPortRead(pVCpu, pCtx->rip, pVMCB->ctrl.u64ExitInfo2, IoExitInfo.n.u16Port,
     2501                    HMR0SavePendingIOPortRead(pVCpu, pCtx->rip, pvVMCB->ctrl.u64ExitInfo2, IoExitInfo.n.u16Port,
    24742502                                                  uAndVal, uIOSize);
    24752503                }
     
    24842512        {
    24852513            /* Update EIP and continue execution. */
    2486             pCtx->rip = pVMCB->ctrl.u64ExitInfo2;      /* RIP/EIP of the next instruction is saved in EXITINFO2. */
     2514            pCtx->rip = pvVMCB->ctrl.u64ExitInfo2;      /* RIP/EIP of the next instruction is saved in EXITINFO2. */
    24872515            if (RT_LIKELY(rc == VINF_SUCCESS))
    24882516            {
     
    25152543                             * by software after the contents have been read.
    25162544                             */
    2517                             pVMCB->guest.u64DR6 = pCtx->dr[6];
     2545                            pvVMCB->guest.u64DR6 = pCtx->dr[6];
    25182546
    25192547                            /* X86_DR7_GD will be cleared if drx accesses should be trapped inside the guest. */
     
    25252553                            pCtx->dr[7] |= 0x400;                                                   /* must be one */
    25262554
    2527                             pVMCB->guest.u64DR7 = pCtx->dr[7];
     2555                            pvVMCB->guest.u64DR7 = pCtx->dr[7];
    25282556
    25292557                            /* Inject the exception. */
     
    25352563                            Event.n.u8Vector = X86_XCPT_DB;
    25362564
    2537                             hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     2565                            hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    25382566                            goto ResumeExecution;
    25392567                        }
     
    26362664
    26372665        Log(("Forced #UD trap at %RGv\n", (RTGCPTR)pCtx->rip));
    2638         hmR0SvmInjectEvent(pVCpu, pVMCB, pCtx, &Event);
     2666        hmR0SvmInjectEvent(pVCpu, pvVMCB, pCtx, &Event);
    26392667        goto ResumeExecution;
    26402668    }
     
    26462674        if (    pVM->hm.s.fTPRPatchingActive
    26472675            &&  pCtx->ecx == MSR_K8_LSTAR
    2648             &&  pVMCB->ctrl.u64ExitInfo1 == 1 /* wrmsr */)
     2676            &&  pvVMCB->ctrl.u64ExitInfo1 == 1 /* wrmsr */)
    26492677        {
    26502678            if ((pCtx->eax & 0xff) != u8LastTPR)
     
    26682696         * so we play safe by completely disassembling the instruction.
    26692697         */
    2670         STAM_COUNTER_INC((pVMCB->ctrl.u64ExitInfo1 == 0) ? &pVCpu->hm.s.StatExitRdmsr : &pVCpu->hm.s.StatExitWrmsr);
    2671         Log(("SVM: %s\n", (pVMCB->ctrl.u64ExitInfo1 == 0) ? "rdmsr" : "wrmsr"));
     2698        STAM_COUNTER_INC((pvVMCB->ctrl.u64ExitInfo1 == 0) ? &pVCpu->hm.s.StatExitRdmsr : &pVCpu->hm.s.StatExitWrmsr);
     2699        Log(("SVM: %s\n", (pvVMCB->ctrl.u64ExitInfo1 == 0) ? "rdmsr" : "wrmsr"));
    26722700        rc = EMInterpretInstruction(pVCpu, CPUMCTX2CORE(pCtx), 0);
    26732701        if (rc == VINF_SUCCESS)
     
    26772705            goto ResumeExecution;
    26782706        }
    2679         AssertMsg(rc == VERR_EM_INTERPRETER, ("EMU: %s failed with %Rrc\n", (pVMCB->ctrl.u64ExitInfo1 == 0) ? "rdmsr" : "wrmsr",
     2707        AssertMsg(rc == VERR_EM_INTERPRETER, ("EMU: %s failed with %Rrc\n", (pvVMCB->ctrl.u64ExitInfo1 == 0) ? "rdmsr" : "wrmsr",
    26802708                                              VBOXSTRICTRC_VAL(rc)));
    26812709        break;
     
    26832711
    26842712    case SVM_EXIT_TASK_SWITCH:          /* too complicated to emulate, so fall back to the recompiler */
    2685         Log(("SVM_EXIT_TASK_SWITCH: exit2=%RX64\n", pVMCB->ctrl.u64ExitInfo2));
    2686         if (    !(pVMCB->ctrl.u64ExitInfo2 & (SVM_EXIT2_TASK_SWITCH_IRET | SVM_EXIT2_TASK_SWITCH_JMP))
     2713        Log(("SVM_EXIT_TASK_SWITCH: exit2=%RX64\n", pvVMCB->ctrl.u64ExitInfo2));
     2714        if (    !(pvVMCB->ctrl.u64ExitInfo2 & (SVM_EXIT2_TASK_SWITCH_IRET | SVM_EXIT2_TASK_SWITCH_JMP))
    26872715            &&  pVCpu->hm.s.Event.fPending)
    26882716        {
     
    28872915VMMR0DECL(int) SVMR0Leave(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
    28882916{
    2889     SVM_VMCB *pVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pVMCB;
     2917    SVM_VMCB *pvVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pvVMCB;
    28902918
    28912919    Assert(pVM->hm.s.svm.fSupported);
     
    29042932
    29052933        /* Intercept all DRx reads and writes again. Changed later on. */
    2906         pVMCB->ctrl.u16InterceptRdDRx = 0xFFFF;
    2907         pVMCB->ctrl.u16InterceptWrDRx = 0xFFFF;
     2934        pvVMCB->ctrl.u16InterceptRdDRx = 0xFFFF;
     2935        pvVMCB->ctrl.u16InterceptWrDRx = 0xFFFF;
    29082936
    29092937        /* Resync the debug registers the next time. */
     
    29112939    }
    29122940    else
    2913         Assert(pVMCB->ctrl.u16InterceptRdDRx == 0xFFFF && pVMCB->ctrl.u16InterceptWrDRx == 0xFFFF);
     2941        Assert(pvVMCB->ctrl.u16InterceptRdDRx == 0xFFFF && pvVMCB->ctrl.u16InterceptWrDRx == 0xFFFF);
    29142942
    29152943    return VINF_SUCCESS;
     
    30083036    if (!fFlushPending)
    30093037    {
    3010         SVM_VMCB   *pVMCB;
     3038        SVM_VMCB   *pvVMCB;
    30113039
    30123040        Log2(("SVMR0InvalidatePage %RGv\n", GCVirt));
     
    30143042        Assert(pVM->hm.s.svm.fSupported);
    30153043
    3016         pVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pVMCB;
    3017         AssertMsgReturn(pVMCB, ("Invalid pVMCB\n"), VERR_HMSVM_INVALID_PVMCB);
     3044        pvVMCB = (SVM_VMCB *)pVCpu->hm.s.svm.pvVMCB;
     3045        AssertMsgReturn(pvVMCB, ("Invalid pvVMCB\n"), VERR_HMSVM_INVALID_PVMCB);
    30183046
    30193047#if HC_ARCH_BITS == 32
     
    30233051        else
    30243052#endif
    3025             SVMR0InvlpgA(GCVirt, pVMCB->ctrl.TLBCtrl.n.u32ASID);
     3053            SVMR0InvlpgA(GCVirt, pvVMCB->ctrl.TLBCtrl.n.u32ASID);
    30263054    }
    30273055    return VINF_SUCCESS;
     
    30543082 *
    30553083 * @returns VBox status code.
    3056  * @param   pVMCBHostPhys   Physical address of host VMCB.
    3057  * @param   pVMCBPhys       Physical address of the VMCB.
     3084 * @param   HCPhysVMCBHost  Physical address of host VMCB.
     3085 * @param   HCPhysVMCB      Physical address of the VMCB.
    30583086 * @param   pCtx            Pointer to the guest CPU context.
    30593087 * @param   pVM             Pointer to the VM.
    30603088 * @param   pVCpu           Pointer to the VMCPU.
    30613089 */
    3062 DECLASM(int) SVMR0VMSwitcherRun64(RTHCPHYS pVMCBHostPhys, RTHCPHYS pVMCBPhys, PCPUMCTX pCtx, PVM pVM, PVMCPU pVCpu)
     3090DECLASM(int) SVMR0VMSwitcherRun64(RTHCPHYS HCPhysVMCBHost, RTHCPHYS HCPhysVMCB, PCPUMCTX pCtx, PVM pVM, PVMCPU pVCpu)
    30633091{
    30643092    uint32_t aParam[4];
    30653093
    3066     aParam[0] = (uint32_t)(pVMCBHostPhys);                  /* Param 1: pVMCBHostPhys - Lo. */
    3067     aParam[1] = (uint32_t)(pVMCBHostPhys >> 32);            /* Param 1: pVMCBHostPhys - Hi. */
    3068     aParam[2] = (uint32_t)(pVMCBPhys);                      /* Param 2: pVMCBPhys - Lo. */
    3069     aParam[3] = (uint32_t)(pVMCBPhys >> 32);                /* Param 2: pVMCBPhys - Hi. */
     3094    aParam[0] = (uint32_t)(HCPhysVMCBHost);                  /* Param 1: HCPhysVMCBHost - Lo. */
     3095    aParam[1] = (uint32_t)(HCPhysVMCBHost >> 32);            /* Param 1: HCPhysVMCBHost - Hi. */
     3096    aParam[2] = (uint32_t)(HCPhysVMCB);                      /* Param 2: HCPhysVMCB - Lo. */
     3097    aParam[3] = (uint32_t)(HCPhysVMCB >> 32);                /* Param 2: HCPhysVMCB - Hi. */
    30703098
    30713099    return SVMR0Execute64BitsHandler(pVM, pVCpu, pCtx, pVM->hm.s.pfnSVMGCVMRun64, 4, &aParam[0]);
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