VirtualBox

Changeset 55896 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
May 17, 2015 8:20:30 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
100353
Message:

PGM: Renamed the ring-0 and raw-mode context physical page access handler callbacks to 'PfHandler' to indicate that these are for page-fault callbacks. Will add non-PF handlers similar to the ring-3 one later.

Location:
trunk/src/VBox/VMM/VMMAll
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp

    r55841 r55896  
    17411741 * @param   pvUser      Pointer to the MMIO ring-3 range entry.
    17421742 */
    1743 VMMDECL(int) IOMMMIOHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pCtxCore, RTGCPTR pvFault, RTGCPHYS GCPhysFault, void *pvUser)
    1744 {
    1745     LogFlow(("IOMMMIOHandler: GCPhys=%RGp uErr=%#x pvFault=%RGv rip=%RGv\n",
     1743DECLEXPORT(int) iomMmioPfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pCtxCore, RTGCPTR pvFault,
     1744                                 RTGCPHYS GCPhysFault, void *pvUser)
     1745{
     1746    LogFlow(("iomMmioPfHandler: GCPhys=%RGp uErr=%#x pvFault=%RGv rip=%RGv\n",
    17461747             GCPhysFault, (uint32_t)uErrorCode, pvFault, (RTGCPTR)pCtxCore->rip));
    17471748    VBOXSTRICTRC rcStrict = iomMMIOHandler(pVM, VMMGetCpu(pVM), (uint32_t)uErrorCode, pCtxCore, GCPhysFault, pvUser);
     
    17991800 * @param   pvUser          Pointer to the MMIO range entry.
    18001801 */
    1801 DECLCALLBACK(int) IOMR3MMIOHandler(PVM pVM, RTGCPHYS GCPhysFault, void *pvPhys, void *pvBuf, size_t cbBuf,
     1802DECLCALLBACK(int) iomR3MmioHandler(PVM pVM, RTGCPHYS GCPhysFault, void *pvPhys, void *pvBuf, size_t cbBuf,
    18021803                                   PGMACCESSTYPE enmAccessType, void *pvUser)
    18031804{
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r55895 r55896  
    248248            }
    249249
    250             if (pCurType->CTX_SUFF(pfnHandler))
     250            if (pCurType->CTX_SUFF(pfnPfHandler))
    251251            {
    252                 PPGMPOOL            pPool      = pVM->pgm.s.CTX_SUFF(pPool);
    253                 void               *pvUser     = pCur->CTX_SUFF(pvUser);
    254 #  ifdef IN_RING0
    255                 PFNPGMR0PHYSHANDLER pfnHandler = pCurType->CTX_SUFF(pfnHandler);
    256 #  else
    257                 PFNPGMRCPHYSHANDLER pfnHandler = pCurType->CTX_SUFF(pfnHandler);
    258 #  endif
     252                PPGMPOOL    pPool  = pVM->pgm.s.CTX_SUFF(pPool);
     253                void       *pvUser = pCur->CTX_SUFF(pvUser);
    259254
    260255                STAM_PROFILE_START(&pCur->Stat, h);
     
    265260                }
    266261
    267                 rc = pfnHandler(pVM, uErr, pRegFrame, pvFault, GCPhysFault, pvUser);
     262                rc = pCurType->CTX_SUFF(pfnPfHandler)(pVM, uErr, pRegFrame, pvFault, GCPhysFault, pvUser);
    268263
    269264#  ifdef VBOX_WITH_STATISTICS
  • trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp

    r55889 r55896  
    6464 * @param   pvUser      User argument.
    6565 */
    66 VMMDECL(int) pgmPhysHandlerRedirectToHC(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPHYS GCPhysFault, void *pvUser)
     66VMMDECL(int) pgmPhysPfHandlerRedirectToHC(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     67                                          RTGCPHYS GCPhysFault, void *pvUser)
    6768{
    6869    NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(GCPhysFault); NOREF(pvUser);
     
    8384 * @param   pvUser      User argument. Pointer to the ROM range structure.
    8485 */
    85 VMMDECL(int) pgmPhysRomWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPHYS GCPhysFault, void *pvUser)
     86DECLEXPORT(int) pgmPhysRomWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     87                                         RTGCPHYS GCPhysFault, void *pvUser)
    8688{
    8789    int             rc;
     
    23552357        {
    23562358            Assert(GCPhys >= pCur->Core.Key && GCPhys <= pCur->Core.KeyLast);
    2357             Assert(PGMPHYSHANDLER_GET_TYPE(pVM, pCur)->CTX_SUFF(pfnHandler));
    23582359
    23592360            size_t cbRange = pCur->Core.KeyLast - GCPhys + 1;
     
    23682369
    23692370#else  /* IN_RING3 */
     2371            Assert(PGMPHYSHANDLER_GET_TYPE(pVM, pCur)->CTX_SUFF(pfnHandler));
    23702372            Log5(("pgmPhysWriteHandler: GCPhys=%RGp cbRange=%#x pPage=%R[pgmpage] phys %s\n",
    23712373                  GCPhys, cbRange, pPage, R3STRING(pCur->pszDesc) ));
  • trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp

    r55493 r55896  
    5252static void pgmPoolMonitorModifiedRemove(PPGMPOOL pPool, PPGMPOOLPAGE pPage);
    5353#ifndef IN_RING3
    54 DECLEXPORT(int) pgmPoolAccessHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPHYS GCPhysFault, void *pvUser);
     54DECLEXPORT(CTX_MID(FNPGM,PHYSPFHANDLER)) pgmPoolAccessPfHandler;
    5555#endif
    5656#if defined(LOG_ENABLED) || defined(VBOX_STRICT)
     
    823823 * @todo VBOXSTRICTRC
    824824 */
    825 static int pgmPoolAccessHandlerFlush(PVM pVM, PVMCPU pVCpu, PPGMPOOL pPool, PPGMPOOLPAGE pPage, PDISCPUSTATE pDis,
    826                                      PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, RTGCPTR pvFault)
     825static int pgmPoolAccessPfHandlerFlush(PVM pVM, PVMCPU pVCpu, PPGMPOOL pPool, PPGMPOOLPAGE pPage, PDISCPUSTATE pDis,
     826                                       PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, RTGCPTR pvFault)
    827827{
    828828    NOREF(pVM); NOREF(GCPhysFault);
     
    855855        if (PATMIsPatchGCAddr(pVM, pRegFrame->eip))
    856856        {
    857             LogFlow(("pgmPoolAccessHandlerPTWorker: Interpretation failed for patch code %04x:%RGv, ignoring.\n",
     857            LogFlow(("pgmPoolAccessPfHandlerPTWorker: Interpretation failed for patch code %04x:%RGv, ignoring.\n",
    858858                     pRegFrame->cs.Sel, (RTGCPTR)pRegFrame->eip));
    859859            rc = VINF_SUCCESS;
     
    872872        AssertMsgFailed(("%Rrc\n", VBOXSTRICTRC_VAL(rc2))); /* ASSUMES no complicated stuff here. */
    873873
    874     LogFlow(("pgmPoolAccessHandlerPT: returns %Rrc (flushed)\n", rc));
     874    LogFlow(("pgmPoolAccessPfHandlerPT: returns %Rrc (flushed)\n", rc));
    875875    return rc;
    876876}
     
    889889 * @param   pvFault     The fault address.
    890890 */
    891 DECLINLINE(int) pgmPoolAccessHandlerSTOSD(PVM pVM, PPGMPOOL pPool, PPGMPOOLPAGE pPage, PDISCPUSTATE pDis,
    892                                           PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, RTGCPTR pvFault)
     891DECLINLINE(int) pgmPoolAccessPfHandlerSTOSD(PVM pVM, PPGMPOOL pPool, PPGMPOOLPAGE pPage, PDISCPUSTATE pDis,
     892                                            PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, RTGCPTR pvFault)
    893893{
    894894    unsigned uIncrement = pDis->Param1.cb;
     
    905905#endif
    906906
    907     Log3(("pgmPoolAccessHandlerSTOSD\n"));
     907    Log3(("pgmPoolAccessPfHandlerSTOSD\n"));
    908908
    909909    /*
     
    943943    pRegFrame->rip += pDis->cbInstr;
    944944
    945     LogFlow(("pgmPoolAccessHandlerSTOSD: returns\n"));
     945    LogFlow(("pgmPoolAccessPfHandlerSTOSD: returns\n"));
    946946    return VINF_SUCCESS;
    947947}
     
    962962 * @param   pfReused    Reused state (in/out)
    963963 */
    964 DECLINLINE(int) pgmPoolAccessHandlerSimple(PVM pVM, PVMCPU pVCpu, PPGMPOOL pPool, PPGMPOOLPAGE pPage, PDISCPUSTATE pDis,
    965                                            PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, RTGCPTR pvFault, bool *pfReused)
    966 {
    967     Log3(("pgmPoolAccessHandlerSimple\n"));
     964DECLINLINE(int) pgmPoolAccessPfHandlerSimple(PVM pVM, PVMCPU pVCpu, PPGMPOOL pPool, PPGMPOOLPAGE pPage, PDISCPUSTATE pDis,
     965                                             PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, RTGCPTR pvFault, bool *pfReused)
     966{
     967    Log3(("pgmPoolAccessPfHandlerSimple\n"));
    968968    NOREF(pVM);
    969969    NOREF(pfReused); /* initialized by caller */
     
    10051005    else if (rc == VERR_EM_INTERPRETER)
    10061006    {
    1007         LogFlow(("pgmPoolAccessHandlerPTWorker: Interpretation failed for %04x:%RGv - opcode=%d\n",
     1007        LogFlow(("pgmPoolAccessPfHandlerPTWorker: Interpretation failed for %04x:%RGv - opcode=%d\n",
    10081008                  pRegFrame->cs.Sel, (RTGCPTR)pRegFrame->rip, pDis->pCurInstr->uOpcode));
    10091009        rc = VINF_EM_RAW_EMULATE_INSTR;
     
    10411041#endif
    10421042
    1043     LogFlow(("pgmPoolAccessHandlerSimple: returns %Rrc\n", VBOXSTRICTRC_VAL(rc)));
     1043    LogFlow(("pgmPoolAccessPfHandlerSimple: returns %Rrc\n", VBOXSTRICTRC_VAL(rc)));
    10441044    return VBOXSTRICTRC_VAL(rc);
    10451045}
     
    10581058 * @param   pvUser      User argument.
    10591059 */
    1060 DECLEXPORT(int) pgmPoolAccessHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    1061                                      RTGCPHYS GCPhysFault, void *pvUser)
     1060DECLEXPORT(int) pgmPoolAccessPfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     1061                                       RTGCPHYS GCPhysFault, void *pvUser)
    10621062{
    10631063    STAM_PROFILE_START(&pVM->pgm.s.CTX_SUFF(pPool)->CTX_SUFF_Z(StatMonitor), a);
     
    10691069    NOREF(uErrorCode);
    10701070
    1071     LogFlow(("pgmPoolAccessHandler: pvFault=%RGv pPage=%p:{.idx=%d} GCPhysFault=%RGp\n", pvFault, pPage, pPage->idx, GCPhysFault));
     1071    LogFlow(("pgmPoolAccessPfHandler: pvFault=%RGv pPage=%p:{.idx=%d} GCPhysFault=%RGp\n", pvFault, pPage, pPage->idx, GCPhysFault));
    10721072
    10731073    pgmLock(pVM);
     
    10751075    {
    10761076        /* Pool page changed while we were waiting for the lock; ignore. */
    1077         Log(("CPU%d: pgmPoolAccessHandler pgm pool page for %RGp changed (to %RGp) while waiting!\n", pVCpu->idCpu, PHYS_PAGE_ADDRESS(GCPhysFault), PHYS_PAGE_ADDRESS(pPage->GCPhys)));
     1077        Log(("CPU%d: pgmPoolAccessPfHandler pgm pool page for %RGp changed (to %RGp) while waiting!\n", pVCpu->idCpu, PHYS_PAGE_ADDRESS(GCPhysFault), PHYS_PAGE_ADDRESS(pPage->GCPhys)));
    10781078        STAM_PROFILE_STOP_EX(&pVM->pgm.s.CTX_SUFF(pPool)->CTX_SUFF_Z(StatMonitor), &pPool->CTX_MID_Z(StatMonitor,Handled), a);
    10791079        pgmUnlock(pVM);
     
    11731173        if (!(pDis->fPrefix & (DISPREFIX_REP | DISPREFIX_REPNE)))
    11741174        {
    1175             rc = pgmPoolAccessHandlerSimple(pVM, pVCpu, pPool, pPage, pDis, pRegFrame, GCPhysFault, pvFault, &fReused);
     1175            rc = pgmPoolAccessPfHandlerSimple(pVM, pVCpu, pPool, pPage, pDis, pRegFrame, GCPhysFault, pvFault, &fReused);
    11761176            if (fReused)
    11771177                goto flushPage;
     
    12441244            if (fValidStosd)
    12451245            {
    1246                 rc = pgmPoolAccessHandlerSTOSD(pVM, pPool, pPage, pDis, pRegFrame, GCPhysFault, pvFault);
     1246                rc = pgmPoolAccessPfHandlerSTOSD(pVM, pPool, pPage, pDis, pRegFrame, GCPhysFault, pvFault);
    12471247                STAM_PROFILE_STOP_EX(&pVM->pgm.s.CTX_SUFF(pPool)->CTX_SUFF_Z(StatMonitor), &pPool->CTX_MID_Z(StatMonitor,RepStosd), a);
    12481248                pgmUnlock(pVM);
     
    12531253        /* REP prefix, don't bother. */
    12541254        STAM_COUNTER_INC(&pPool->CTX_MID_Z(StatMonitor,RepPrefix));
    1255         Log4(("pgmPoolAccessHandler: eax=%#x ecx=%#x edi=%#x esi=%#x rip=%RGv opcode=%d prefix=%#x\n",
     1255        Log4(("pgmPoolAccessPfHandler: eax=%#x ecx=%#x edi=%#x esi=%#x rip=%RGv opcode=%d prefix=%#x\n",
    12561256              pRegFrame->eax, pRegFrame->ecx, pRegFrame->edi, pRegFrame->esi, (RTGCPTR)pRegFrame->rip, pDis->pCurInstr->uOpcode, pDis->fPrefix));
    12571257        fNotReusedNotForking = true;
     
    13411341     * the reuse detection must be fixed.
    13421342     */
    1343     rc = pgmPoolAccessHandlerFlush(pVM, pVCpu, pPool, pPage, pDis, pRegFrame, GCPhysFault, pvFault);
     1343    rc = pgmPoolAccessPfHandlerFlush(pVM, pVCpu, pPool, pPage, pDis, pRegFrame, GCPhysFault, pvFault);
    13441344    if (    rc == VINF_EM_RAW_EMULATE_INSTR
    13451345        &&  fReused)
Note: See TracChangeset for help on using the changeset viewer.

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