VirtualBox

忽略:
時間撮記:
2008-9-26 下午04:13:09 (16 年 以前)
作者:
vboxsync
訊息:

#1865: IOM.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp

    r12688 r12772  
    11/* $Id$ */
    22/** @file
    3  * IOM - Input / Output Monitor - Guest Context.
     3 * IOM - Input / Output Monitor - Any Context, MMIO & String I/O.
    44 */
    55
     
    4646
    4747
    48 
    4948/*******************************************************************************
    5049*   Global Variables                                                           *
     
    7574/**
    7675 * Wrapper which does the write and updates range statistics when such are enabled.
    77  * @warning VBOX_SUCCESS(rc=VINF_IOM_HC_MMIO_WRITE) is TRUE!
     76 * @warning RT_SUCCESS(rc=VINF_IOM_HC_MMIO_WRITE) is TRUE!
    7877 */
    7978DECLINLINE(int) iomMMIODoWrite(PVM pVM, PIOMMMIORANGE pRange, RTGCPHYS GCPhysFault, const void *pvData, unsigned cb)
     
    8584
    8685    int rc;
    87     if (RT_LIKELY(pRange->CTXALLSUFF(pfnWriteCallback)))
    88         rc = pRange->CTXALLSUFF(pfnWriteCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), GCPhysFault, (void *)pvData, cb); /* @todo fix const!! */
     86    if (RT_LIKELY(pRange->CTX_SUFF(pfnWriteCallback)))
     87        rc = pRange->CTX_SUFF(pfnWriteCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), GCPhysFault, (void *)pvData, cb); /* @todo fix const!! */
    8988    else
    9089        rc = VINF_SUCCESS;
    9190    if (rc != VINF_IOM_HC_MMIO_WRITE)
    92         STAM_COUNTER_INC(&pStats->CTXALLSUFF(Write));
     91        STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Write));
    9392    return rc;
    9493}
     94
    9595
    9696/**
     
    105105
    106106    int rc;
    107     if (RT_LIKELY(pRange->CTXALLSUFF(pfnReadCallback)))
    108         rc = pRange->CTXALLSUFF(pfnReadCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), GCPhysFault, pvData, cb);
     107    if (RT_LIKELY(pRange->CTX_SUFF(pfnReadCallback)))
     108        rc = pRange->CTX_SUFF(pfnReadCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), GCPhysFault, pvData, cb);
    109109    else
    110110    {
     111/** @todo r=bird: this is (probably) wrong, all bits should be set here I
     112 *        think. */
    111113        switch (cb)
    112114        {
     
    122124    }
    123125    if (rc != VINF_IOM_HC_MMIO_READ)
    124         STAM_COUNTER_INC(&pStats->CTXALLSUFF(Read));
     126        STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Read));
    125127    return rc;
    126128}
    127129
    128 /*
     130
     131/**
    129132 * Internal - statistics only.
    130133 */
     
    135138    {
    136139        case 1:
    137             STAM_COUNTER_INC(&pVM->iom.s.StatGCMMIO1Byte);
     140            STAM_COUNTER_INC(&pVM->iom.s.StatRZMMIO1Byte);
    138141            break;
    139142        case 2:
    140             STAM_COUNTER_INC(&pVM->iom.s.StatGCMMIO2Bytes);
     143            STAM_COUNTER_INC(&pVM->iom.s.StatRZMMIO2Bytes);
    141144            break;
    142145        case 4:
    143             STAM_COUNTER_INC(&pVM->iom.s.StatGCMMIO4Bytes);
     146            STAM_COUNTER_INC(&pVM->iom.s.StatRZMMIO4Bytes);
    144147            break;
    145148        case 8:
    146             STAM_COUNTER_INC(&pVM->iom.s.StatGCMMIO8Bytes);
     149            STAM_COUNTER_INC(&pVM->iom.s.StatRZMMIO8Bytes);
    147150            break;
    148151        default:
     
    172175static int iomInterpretMOVxXRead(PVM pVM, PCPUMCTXCORE pRegFrame, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange, RTGCPHYS GCPhysFault)
    173176{
    174     Assert(pRange->CTXALLSUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
     177    Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
    175178
    176179    /*
     
    231234static int iomInterpretMOVxXWrite(PVM pVM, PCPUMCTXCORE pRegFrame, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange, RTGCPHYS GCPhysFault)
    232235{
    233     Assert(pRange->CTXALLSUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3);
     236    Assert(pRange->CTX_SUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3);
    234237
    235238    /*
     
    271274
    272275
    273 #ifdef iom_MOVS_SUPPORT
     276#ifdef IOM_WITH_MOVS_SUPPORT
    274277/**
    275278 * [REP] MOVSB
     
    288291 * @param   pCpu        Disassembler CPU state.
    289292 * @param   pRange      Pointer MMIO range.
    290  */
    291 static int iomInterpretMOVS(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange)
     293 * @param   ppStat      Which sub-sample to attribute this call to.
     294 */
     295static int iomInterpretMOVS(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange, PSTAMPROFILE *ppStat)
    292296{
    293297    /*
     
    299303
    300304    /*
    301      * Get bytes/words/dwords count to copy.
     305     * Get bytes/words/dwords/qword count to copy.
    302306     */
    303307    uint32_t cTransfers = 1;
     
    343347         * ds:esi (Virt Src) -> es:edi (Phys Dst)
    344348         */
    345         STAM_PROFILE_START(&pVM->iom.s.StatGCInstMovsToMMIO, a2);
     349        STAM_STATS({ *ppStat = &pVM->iom.s.StatRZInstMovsToMMIO; });
    346350
    347351        /* Check callback. */
    348         if (!pRange->CTXALLSUFF(pfnWriteCallback))
    349         {
    350             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsToMMIO, a2);
     352        if (!pRange->CTX_SUFF(pfnWriteCallback))
    351353            return VINF_IOM_HC_MMIO_WRITE;
    352         }
    353354
    354355        /* Convert source address ds:esi. */
     
    357358                          SELMTOFLAT_FLAGS_HYPER | SELMTOFLAT_FLAGS_NO_PL,
    358359                          (PRTGCPTR)&pu8Virt);
    359         if (VBOX_SUCCESS(rc))
     360        if (RT_SUCCESS(rc))
    360361        {
    361362
     
    365366            {
    366367                Log(("MOVS will generate a trap -> recompiler, rc=%d\n", rc));
    367                 STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsToMMIO, a2);
    368368                return VINF_EM_RAW_EMULATE_INSTR;
    369369            }
     
    396396            if (pCpu->prefix & PREFIX_REP)
    397397                pRegFrame->ecx = cTransfers;
    398             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsToMMIO, a2);
    399398        }
    400399        else
     
    407406         * ds:[eSI] (Phys Src) -> es:[eDI] (Virt Dst)
    408407         */
     408        STAM_STATS({ *ppStat = &pVM->iom.s.StatRZInstMovsFromMMIO; });
     409
    409410        /* Check callback. */
    410         if (!pRange->pfnReadCallback)
     411        if (!pRange->CTX_SUFF(pfnReadCallback))
    411412            return VINF_IOM_HC_MMIO_READ;
    412413
     
    416417                          SELMTOFLAT_FLAGS_HYPER | SELMTOFLAT_FLAGS_NO_PL,
    417418                          (RTGCPTR *)&pu8Virt);
    418         if (VBOX_FAILURE(rc))
     419        if (RT_FAILURE(rc))
    419420            return VINF_EM_RAW_GUEST_TRAP;
    420421
     
    424425        rc = PGMGstGetPage(pVM, (RTGCPTR)pu8Virt, NULL, &PhysDst);
    425426        PhysDst |= (RTGCUINTPTR)pu8Virt & PAGE_OFFSET_MASK;
    426         if (    VBOX_SUCCESS(rc)
     427        if (    RT_SUCCESS(rc)
    427428            &&  (pMMIODst = iomMMIOGetRange(&pVM->iom.s, PhysDst)))
    428429        {
     
    430431             * Extra: [MMIO] -> [MMIO]
    431432             */
    432             STAM_PROFILE_START(&pVM->iom.s.StatGCInstMovsMMIO, d);
    433             STAM_PROFILE_START(&pVM->iom.s.StatGCInstMovsFromMMIO, c);
    434 
    435             if (!pMMIODst->CTXALLSUFF(pfnWriteCallback) && pMMIODst->pfnWriteCallbackR3)
    436             {
    437                 STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsMMIO, d);
    438                 STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsFromMMIO, c);
     433            STAM_STATS({ *ppStat = &pVM->iom.s.StatRZInstMovsMMIO; });
     434            if (!pMMIODst->CTX_SUFF(pfnWriteCallback) && pMMIODst->pfnWriteCallbackR3)
    439435                return VINF_IOM_HC_MMIO_READ_WRITE;
    440             }
    441436
    442437            /* copy loop. */
     
    457452                cTransfers--;
    458453            }
    459             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsMMIO, d);
    460             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsFromMMIO, c);
    461454        }
    462455        else
     
    465458             * Normal: [MMIO] -> [Mem]
    466459             */
    467             STAM_PROFILE_START(&pVM->iom.s.StatGCInstMovsFromMMIO, c);
    468 
    469460            /* Access verification first; we currently can't recover properly from traps inside this instruction */
    470461            rc = PGMVerifyAccess(pVM, pu8Virt, cTransfers * cb, X86_PTE_RW | ((cpl == 3) ? X86_PTE_US : 0));
     
    472463            {
    473464                Log(("MOVS will generate a trap -> recompiler, rc=%d\n", rc));
    474                 STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsFromMMIO, c);
    475465                return VINF_EM_RAW_EMULATE_INSTR;
    476466            }
     
    502492            MMGCRamDeregisterTrapHandler(pVM);
    503493#endif
    504             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovsFromMMIO, c);
    505494        }
    506495
     
    512501    /* work statistics. */
    513502    if (rc == VINF_SUCCESS)
    514     {
    515503        iomMMIOStatLength(pVM, cb);
    516     }
     504    NOREF(ppStat);
    517505    return rc;
    518506}
    519 #endif
    520 
     507#endif /* IOM_WITH_MOVS_SUPPORT */
    521508
    522509
     
    565552    }
    566553
     554/** @todo r=bird: bounds checks! */
     555
    567556    /*
    568557     * Get data size.
     
    581570    uint32_t    u32Data = pRegFrame->eax;
    582571    int rc;
    583     if (pRange->CTXALLSUFF(pfnFillCallback))
     572    if (pRange->CTX_SUFF(pfnFillCallback))
    584573    {
    585574        /*
     
    590579        {
    591580            /* addr++ variant. */
    592             rc = pRange->CTXALLSUFF(pfnFillCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), Phys, u32Data, cb, cTransfers);
     581            rc = pRange->CTX_SUFF(pfnFillCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), Phys, u32Data, cb, cTransfers);
    593582            if (rc == VINF_SUCCESS)
    594583            {
     
    602591        {
    603592            /* addr-- variant. */
    604             rc = pRange->CTXALLSUFF(pfnFillCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), (Phys - (cTransfers - 1)) << SIZE_2_SHIFT(cb), u32Data, cb, cTransfers);
     593            rc = pRange->CTX_SUFF(pfnFillCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), (Phys - (cTransfers - 1)) << SIZE_2_SHIFT(cb), u32Data, cb, cTransfers);
    605594            if (rc == VINF_SUCCESS)
    606595            {
     
    617606         * Use the write callback.
    618607         */
    619         Assert(pRange->CTXALLSUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3);
     608        Assert(pRange->CTX_SUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3);
    620609
    621610        /* fill loop. */
     
    663652static int iomInterpretLODS(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange)
    664653{
    665     Assert(pRange->CTXALLSUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
     654    Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
    666655
    667656    /*
     
    711700static int iomInterpretCMP(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange)
    712701{
    713     Assert(pRange->CTXALLSUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
     702    Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
    714703
    715704    /*
     
    787776    {
    788777        /* and reg, [MMIO]. */
    789         Assert(pRange->CTXALLSUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
     778        Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
    790779        fAndWrite = false;
    791780        rc = iomMMIODoRead(pVM, pRange, GCPhysFault, &uData2, cb);
     
    795784        /* and [MMIO], reg|imm. */
    796785        fAndWrite = true;
    797         if (    (pRange->CTXALLSUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3)
    798             &&  (pRange->CTXALLSUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3))
     786        if (    (pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3)
     787            &&  (pRange->CTX_SUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3))
    799788            rc = iomMMIODoRead(pVM, pRange, GCPhysFault, &uData1, cb);
    800789        else
     
    835824}
    836825
     826
    837827/**
    838828 * TEST [MMIO], reg|imm
     
    852842static int iomInterpretTEST(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange)
    853843{
    854     Assert(pRange->CTXALLSUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
     844    Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
    855845
    856846    unsigned    cb     = 0;
     
    887877}
    888878
     879
    889880/**
    890881 * BT [MMIO], reg|imm
     
    903894static int iomInterpretBT(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange)
    904895{
    905     Assert(pRange->CTXALLSUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
     896    Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
    906897
    907898    uint64_t    uBit   = 0;
     
    954945{
    955946    /* Check for read & write handlers since IOMMMIOHandler doesn't cover this. */
    956     if (    (!pRange->CTXALLSUFF(pfnReadCallback) && pRange->pfnReadCallbackR3)
    957         ||  (!pRange->CTXALLSUFF(pfnWriteCallback) && pRange->pfnWriteCallbackR3))
     947    if (    (!pRange->CTX_SUFF(pfnReadCallback) && pRange->pfnReadCallbackR3)
     948        ||  (!pRange->CTX_SUFF(pfnWriteCallback) && pRange->pfnWriteCallbackR3))
    958949        return VINF_IOM_HC_MMIO_READ_WRITE;
    959950
     
    10141005/**
    10151006 * \#PF Handler callback for MMIO ranges.
    1016  * Note: we are on ring0 in Hypervisor and interrupts are disabled.
    10171007 *
    10181008 * @returns VBox status code (appropriate for GC return).
     
    10261016IOMDECL(int) IOMMMIOHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pCtxCore, RTGCPTR pvFault, RTGCPHYS GCPhysFault, void *pvUser)
    10271017{
    1028     STAM_PROFILE_START(&pVM->iom.s.StatGCMMIOHandler, a);
     1018    STAM_PROFILE_START(&pVM->iom.s.StatRZMMIOHandler, a);
    10291019    Log(("IOMMMIOHandler: GCPhys=%RGp uErr=%#x pvFault=%VGv eip=%VGv\n",
    10301020          GCPhysFault, (uint32_t)uErrorCode, pvFault, pCtxCore->rip));
     
    10441034        return VERR_NO_MEMORY;
    10451035# else
    1046         STAM_PROFILE_STOP(&pVM->iom.s.StatGCMMIOHandler, a);
    1047         STAM_COUNTER_INC(&pVM->iom.s.StatGCMMIOFailures);
     1036        STAM_PROFILE_STOP(&pVM->iom.s.StatRZMMIOHandler, a);
     1037        STAM_COUNTER_INC(&pVM->iom.s.StatRZMMIOFailures);
    10481038        return uErrorCode & X86_TRAP_PF_RW ? VINF_IOM_HC_MMIO_WRITE : VINF_IOM_HC_MMIO_READ;
    10491039# endif
     
    10561046     */
    10571047    if (uErrorCode & X86_TRAP_PF_RW
    1058         ? !pRange->CTXALLSUFF(pfnWriteCallback) && pRange->pfnWriteCallbackR3
    1059         : !pRange->CTXALLSUFF(pfnReadCallback)  && pRange->pfnReadCallbackR3)
     1048        ? !pRange->CTX_SUFF(pfnWriteCallback) && pRange->pfnWriteCallbackR3
     1049        : !pRange->CTX_SUFF(pfnReadCallback)  && pRange->pfnReadCallbackR3)
    10601050    {
    10611051# ifdef VBOX_WITH_STATISTICS
    10621052        if (uErrorCode & X86_TRAP_PF_RW)
    1063             STAM_COUNTER_INC(&pStats->CTXALLMID(Write,ToR3));
     1053            STAM_COUNTER_INC(&pStats->CTX_MID_Z(Write,ToR3));
    10641054        else
    1065             STAM_COUNTER_INC(&pStats->CTXALLMID(Read,ToR3));
     1055            STAM_COUNTER_INC(&pStats->CTX_MID_Z(Read,ToR3));
    10661056# endif
    10671057
    1068         STAM_PROFILE_STOP(&pVM->iom.s.StatGCMMIOHandler, a);
    1069         STAM_COUNTER_INC(&pVM->iom.s.StatGCMMIOFailures);
     1058        STAM_PROFILE_STOP(&pVM->iom.s.StatRZMMIOHandler, a);
     1059        STAM_COUNTER_INC(&pVM->iom.s.StatRZMMIOFailures);
    10701060        return uErrorCode & X86_TRAP_PF_RW ? VINF_IOM_HC_MMIO_WRITE : VINF_IOM_HC_MMIO_READ;
    10711061    }
     
    10851075        case OP_MOVSX:
    10861076        {
    1087             STAM_PROFILE_START(&pVM->iom.s.StatGCInstMov, b);
     1077            STAM_PROFILE_START(&pVM->iom.s.StatRZInstMov, b);
    10881078            if (uErrorCode & X86_TRAP_PF_RW)
    10891079                rc = iomInterpretMOVxXWrite(pVM, pCtxCore, &Cpu, pRange, GCPhysFault);
    10901080            else
    10911081                rc = iomInterpretMOVxXRead(pVM, pCtxCore, &Cpu, pRange, GCPhysFault);
    1092             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMov, b);
     1082            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstMov, b);
    10931083            break;
    10941084        }
    10951085
    10961086
    1097 #ifdef iom_MOVS_SUPPORT
     1087#ifdef IOM_WITH_MOVS_SUPPORT
    10981088        case OP_MOVSB:
    10991089        case OP_MOVSWD:
    1100             STAM_PROFILE_START(&pVM->iom.s.StatGCInstMovs, c);
    1101             rc = iomInterpretMOVS(pVM, uErrorCode, pCtxCore, GCPhysFault, &Cpu, pRange);
    1102             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstMovs, c);
    1103             break;
     1090        {
     1091            STAM_PROFILE_ADV_START(&pVM->iom.s.StatRZInstMovs, c);
     1092            PSTAMPROFILE pStat = NULL;
     1093            rc = iomInterpretMOVS(pVM, uErrorCode, pCtxCore, GCPhysFault, &Cpu, pRange, &pStat);
     1094            STAM_PROFILE_ADV_STOP_EX(&pVM->iom.s.StatRZInstMovs, pStat, c);
     1095            break;
     1096        }
    11041097#endif
    11051098
     
    11071100        case OP_STOSWD:
    11081101            Assert(uErrorCode & X86_TRAP_PF_RW);
    1109             STAM_PROFILE_START(&pVM->iom.s.StatGCInstStos, d);
     1102            STAM_PROFILE_START(&pVM->iom.s.StatRZInstStos, d);
    11101103            rc = iomInterpretSTOS(pVM, pCtxCore, GCPhysFault, &Cpu, pRange);
    1111             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstStos, d);
     1104            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstStos, d);
    11121105            break;
    11131106
     
    11151108        case OP_LODSWD:
    11161109            Assert(!(uErrorCode & X86_TRAP_PF_RW));
    1117             STAM_PROFILE_START(&pVM->iom.s.StatGCInstLods, e);
     1110            STAM_PROFILE_START(&pVM->iom.s.StatRZInstLods, e);
    11181111            rc = iomInterpretLODS(pVM, pCtxCore, GCPhysFault, &Cpu, pRange);
    1119             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstLods, e);
     1112            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstLods, e);
    11201113            break;
    11211114
    11221115        case OP_CMP:
    11231116            Assert(!(uErrorCode & X86_TRAP_PF_RW));
    1124             STAM_PROFILE_START(&pVM->iom.s.StatGCInstCmp, f);
     1117            STAM_PROFILE_START(&pVM->iom.s.StatRZInstCmp, f);
    11251118            rc = iomInterpretCMP(pVM, pCtxCore, GCPhysFault, &Cpu, pRange);
    1126             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstCmp, f);
     1119            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstCmp, f);
    11271120            break;
    11281121
    11291122        case OP_AND:
    1130             STAM_PROFILE_START(&pVM->iom.s.StatGCInstAnd, g);
     1123            STAM_PROFILE_START(&pVM->iom.s.StatRZInstAnd, g);
    11311124            rc = iomInterpretOrXorAnd(pVM, pCtxCore, GCPhysFault, &Cpu, pRange, EMEmulateAnd);
    1132             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstAnd, g);
     1125            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstAnd, g);
    11331126            break;
    11341127
    11351128        case OP_OR:
    1136             STAM_PROFILE_START(&pVM->iom.s.StatGCInstOr, k);
     1129            STAM_PROFILE_START(&pVM->iom.s.StatRZInstOr, k);
    11371130            rc = iomInterpretOrXorAnd(pVM, pCtxCore, GCPhysFault, &Cpu, pRange, EMEmulateOr);
    1138             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstOr, k);
     1131            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstOr, k);
    11391132            break;
    11401133
    11411134        case OP_XOR:
    1142             STAM_PROFILE_START(&pVM->iom.s.StatGCInstXor, m);
     1135            STAM_PROFILE_START(&pVM->iom.s.StatRZInstXor, m);
    11431136            rc = iomInterpretOrXorAnd(pVM, pCtxCore, GCPhysFault, &Cpu, pRange, EMEmulateXor);
    1144             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstXor, m);
     1137            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstXor, m);
    11451138            break;
    11461139
    11471140        case OP_TEST:
    11481141            Assert(!(uErrorCode & X86_TRAP_PF_RW));
    1149             STAM_PROFILE_START(&pVM->iom.s.StatGCInstTest, h);
     1142            STAM_PROFILE_START(&pVM->iom.s.StatRZInstTest, h);
    11501143            rc = iomInterpretTEST(pVM, pCtxCore, GCPhysFault, &Cpu, pRange);
    1151             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstTest, h);
     1144            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstTest, h);
    11521145            break;
    11531146
    11541147        case OP_BT:
    11551148            Assert(!(uErrorCode & X86_TRAP_PF_RW));
    1156             STAM_PROFILE_START(&pVM->iom.s.StatGCInstBt, l);
     1149            STAM_PROFILE_START(&pVM->iom.s.StatRZInstBt, l);
    11571150            rc = iomInterpretBT(pVM, pCtxCore, GCPhysFault, &Cpu, pRange);
    1158             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstBt, l);
     1151            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstBt, l);
    11591152            break;
    11601153
    11611154        case OP_XCHG:
    1162             STAM_PROFILE_START(&pVM->iom.s.StatGCInstXchg, i);
     1155            STAM_PROFILE_START(&pVM->iom.s.StatRZInstXchg, i);
    11631156            rc = iomInterpretXCHG(pVM, pCtxCore, GCPhysFault, &Cpu, pRange);
    1164             STAM_PROFILE_STOP(&pVM->iom.s.StatGCInstXchg, i);
     1157            STAM_PROFILE_STOP(&pVM->iom.s.StatRZInstXchg, i);
    11651158            break;
    11661159
     
    11701163         */
    11711164        default:
    1172             STAM_COUNTER_INC(&pVM->iom.s.StatGCInstOther);
     1165            STAM_COUNTER_INC(&pVM->iom.s.StatRZInstOther);
    11731166            rc = (uErrorCode & X86_TRAP_PF_RW) ? VINF_IOM_HC_MMIO_WRITE : VINF_IOM_HC_MMIO_READ;
    11741167            break;
     
    11821175    else
    11831176    {
    1184         STAM_COUNTER_INC(&pVM->iom.s.StatGCMMIOFailures);
     1177        STAM_COUNTER_INC(&pVM->iom.s.StatRZMMIOFailures);
    11851178#if defined(VBOX_WITH_STATISTICS) && !defined(IN_RING3)
    11861179        switch (rc)
     
    11881181            case VINF_IOM_HC_MMIO_READ:
    11891182            case VINF_IOM_HC_MMIO_READ_WRITE:
    1190                 STAM_COUNTER_INC(&pStats->CTXALLMID(Read,ToR3));
     1183                STAM_COUNTER_INC(&pStats->CTX_MID_Z(Read,ToR3));
    11911184                break;
    11921185            case VINF_IOM_HC_MMIO_WRITE:
    1193                 STAM_COUNTER_INC(&pStats->CTXALLMID(Write,ToR3));
     1186                STAM_COUNTER_INC(&pStats->CTX_MID_Z(Write,ToR3));
    11941187                break;
    11951188        }
     
    11971190    }
    11981191
    1199     STAM_PROFILE_STOP(&pVM->iom.s.StatGCMMIOHandler, a);
     1192    STAM_PROFILE_STOP(&pVM->iom.s.StatRZMMIOHandler, a);
    12001193    return rc;
    12011194}
     
    12201213    int           rc;
    12211214    PIOMMMIORANGE pRange = (PIOMMMIORANGE)pvUser;
     1215    STAM_COUNTER_INC(&pVM->iom.s.StatR3MMIOHandler);
     1216
     1217    AssertMsg(cbBuf == 1 || cbBuf == 2 || cbBuf == 4 || cbBuf == 8, ("%zu\n", cbBuf));
    12221218
    12231219    Assert(pRange);
     
    12631259# endif
    12641260#endif /* VBOX_WITH_STATISTICS */
    1265     if (pRange->CTXALLSUFF(pfnReadCallback))
     1261    if (pRange->CTX_SUFF(pfnReadCallback))
    12661262    {
    12671263        /*
     
    12701266#ifdef VBOX_WITH_STATISTICS
    12711267        if (pStats)
    1272             STAM_PROFILE_ADV_START(&pStats->CTXALLSUFF(ProfRead), a);
    1273 #endif
    1274         int rc = pRange->CTXALLSUFF(pfnReadCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), GCPhys, pu32Value, cbValue);
     1268            STAM_PROFILE_ADV_START(&pStats->CTX_SUFF_Z(ProfRead), a);
     1269#endif
     1270        int rc = pRange->CTX_SUFF(pfnReadCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), GCPhys, pu32Value, cbValue);
    12751271#ifdef VBOX_WITH_STATISTICS
    12761272        if (pStats)
    1277             STAM_PROFILE_ADV_STOP(&pStats->CTXALLSUFF(ProfRead), a);
     1273            STAM_PROFILE_ADV_STOP(&pStats->CTX_SUFF_Z(ProfRead), a);
    12781274        if (pStats && rc != VINF_IOM_HC_MMIO_READ)
    1279             STAM_COUNTER_INC(&pStats->CTXALLSUFF(Read));
     1275            STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Read));
    12801276#endif
    12811277        switch (rc)
     
    13141310    if (pRange->pfnReadCallbackR3)
    13151311    {
    1316         STAM_COUNTER_INC(&pStats->CTXALLMID(Read,ToR3));
     1312        STAM_COUNTER_INC(&pStats->CTX_MID_Z(Read,ToR3));
    13171313        return VINF_IOM_HC_MMIO_READ;
    13181314    }
     
    13241320#ifdef VBOX_WITH_STATISTICS
    13251321    if (pStats)
    1326         STAM_COUNTER_INC(&pStats->CTXALLSUFF(Read));
     1322        STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Read));
    13271323#endif
    13281324    /* Unassigned memory; this is actually not supposed to happen. */
     
    13731369     * to defer it to ring-3.
    13741370     */
    1375     if (pRange->CTXALLSUFF(pfnWriteCallback))
     1371    if (pRange->CTX_SUFF(pfnWriteCallback))
    13761372    {
    13771373#ifdef VBOX_WITH_STATISTICS
    13781374        if (pStats)
    1379             STAM_PROFILE_ADV_START(&pStats->CTXALLSUFF(ProfWrite), a);
    1380 #endif
    1381         int rc = pRange->CTXALLSUFF(pfnWriteCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), GCPhys, &u32Value, cbValue);
     1375            STAM_PROFILE_ADV_START(&pStats->CTX_SUFF_Z(ProfWrite), a);
     1376#endif
     1377        int rc = pRange->CTX_SUFF(pfnWriteCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), GCPhys, &u32Value, cbValue);
    13821378#ifdef VBOX_WITH_STATISTICS
    13831379        if (pStats)
    1384             STAM_PROFILE_ADV_STOP(&pStats->CTXALLSUFF(ProfWrite), a);
     1380            STAM_PROFILE_ADV_STOP(&pStats->CTX_SUFF_Z(ProfWrite), a);
    13851381        if (pStats && rc != VINF_IOM_HC_MMIO_WRITE)
    1386             STAM_COUNTER_INC(&pStats->CTXALLSUFF(Write));
     1382            STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Write));
    13871383#endif
    13881384        Log4(("IOMMMIOWrite: GCPhys=%RGp u32=%08RX32 cb=%d rc=%Vrc\n", GCPhys, u32Value, cbValue, rc));
     
    13921388    if (pRange->pfnWriteCallbackR3)
    13931389    {
    1394         STAM_COUNTER_INC(&pStats->CTXALLMID(Write,ToR3));
     1390        STAM_COUNTER_INC(&pStats->CTX_MID_Z(Write,ToR3));
    13951391        return VINF_IOM_HC_MMIO_WRITE;
    13961392    }
     
    14021398#ifdef VBOX_WITH_STATISTICS
    14031399    if (pStats)
    1404         STAM_COUNTER_INC(&pStats->CTXALLSUFF(Write));
     1400        STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Write));
    14051401#endif
    14061402    Log4(("IOMMMIOWrite: GCPhys=%RGp u32=%08RX32 cb=%d rc=%Vrc\n", GCPhys, u32Value, cbValue, VINF_SUCCESS));
     
    14351431{
    14361432#ifdef VBOX_WITH_STATISTICS
    1437     STAM_COUNTER_INC(&pVM->iom.s.StatGCInstIns);
     1433    STAM_COUNTER_INC(&pVM->iom.s.StatInstIns);
    14381434#endif
    14391435
     
    14711467                          SELMTOFLAT_FLAGS_HYPER | SELMTOFLAT_FLAGS_NO_PL,
    14721468                          &GCPtrDst);
    1473     if (VBOX_FAILURE(rc))
     1469    if (RT_FAILURE(rc))
    14741470    {
    14751471        Log(("INS destination address conversion failed -> fallback, rc=%d\n", rc));
     
    15231519        pRegFrame->ecx = cTransfers;
    15241520
    1525     AssertMsg(rc == VINF_SUCCESS || rc == VINF_IOM_HC_IOPORT_READ || (rc >= VINF_EM_FIRST && rc <= VINF_EM_LAST) || VBOX_FAILURE(rc), ("%Vrc\n", rc));
     1521    AssertMsg(rc == VINF_SUCCESS || rc == VINF_IOM_HC_IOPORT_READ || (rc >= VINF_EM_FIRST && rc <= VINF_EM_LAST) || RT_FAILURE(rc), ("%Vrc\n", rc));
    15261522    return rc;
    15271523}
     
    15631559    if (RT_UNLIKELY(rc != VINF_SUCCESS))
    15641560    {
    1565         AssertMsg(rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_TRPM_XCPT_DISPATCHED || rc == VINF_TRPM_XCPT_DISPATCHED || VBOX_FAILURE(rc), ("%Vrc\n", rc));
     1561        AssertMsg(rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_TRPM_XCPT_DISPATCHED || rc == VINF_TRPM_XCPT_DISPATCHED || RT_FAILURE(rc), ("%Vrc\n", rc));
    15661562        return rc;
    15671563    }
     
    15961592{
    15971593#ifdef VBOX_WITH_STATISTICS
    1598     STAM_COUNTER_INC(&pVM->iom.s.StatGCInstOuts);
     1594    STAM_COUNTER_INC(&pVM->iom.s.StatInstOuts);
    15991595#endif
    16001596
     
    16311627                          SELMTOFLAT_FLAGS_HYPER | SELMTOFLAT_FLAGS_NO_PL,
    16321628                          &GCPtrSrc);
    1633     if (VBOX_FAILURE(rc))
     1629    if (RT_FAILURE(rc))
    16341630    {
    16351631        Log(("OUTS source address conversion failed -> fallback, rc=%Vrc\n", rc));
     
    16861682        pRegFrame->ecx = cTransfers;
    16871683
    1688     AssertMsg(rc == VINF_SUCCESS || rc == VINF_IOM_HC_IOPORT_WRITE || (rc >= VINF_EM_FIRST && rc <= VINF_EM_LAST) || VBOX_FAILURE(rc), ("%Vrc\n", rc));
     1684    AssertMsg(rc == VINF_SUCCESS || rc == VINF_IOM_HC_IOPORT_WRITE || (rc >= VINF_EM_FIRST && rc <= VINF_EM_LAST) || RT_FAILURE(rc), ("%Vrc\n", rc));
    16891685    return rc;
    16901686}
     
    17281724    if (RT_UNLIKELY(rc != VINF_SUCCESS))
    17291725    {
    1730         AssertMsg(rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_TRPM_XCPT_DISPATCHED || rc == VINF_TRPM_XCPT_DISPATCHED || VBOX_FAILURE(rc), ("%Vrc\n", rc));
     1726        AssertMsg(rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_TRPM_XCPT_DISPATCHED || rc == VINF_TRPM_XCPT_DISPATCHED || RT_FAILURE(rc), ("%Vrc\n", rc));
    17311727        return rc;
    17321728    }
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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