VirtualBox

Changeset 55900 in vbox


Ignore:
Timestamp:
May 18, 2015 10:17:35 AM (10 years ago)
Author:
vboxsync
Message:

PGM: Added a pVCpu parameter to all virtual handler callouts and also a PGMACCESSORIGIN parameter to the ring-3 one.

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/pgm.h

    r55899 r55900  
    7474/** Pointer to a relocation callback function. */
    7575typedef FNPGMRELOCATE *PFNPGMRELOCATE;
     76
     77
     78/**
     79 * Memory access origin.
     80 */
     81typedef enum PGMACCESSORIGIN
     82{
     83    /** Invalid zero value. */
     84    PGMACCESSORIGIN_INVALID = 0,
     85    /** IEM is access memory. */
     86    PGMACCESSORIGIN_IEM,
     87    /** HM is access memory. */
     88    PGMACCESSORIGIN_HM,
     89    /** Some device is access memory. */
     90    PGMACCESSORIGIN_DEVICE,
     91    /** Someone debugging is access memory. */
     92    PGMACCESSORIGIN_DEBUGGER,
     93    /** SELM is access memory. */
     94    PGMACCESSORIGIN_SELM,
     95    /** FTM is access memory. */
     96    PGMACCESSORIGIN_FTM,
     97    /** REM is access memory. */
     98    PGMACCESSORIGIN_REM,
     99    /** IOM is access memory. */
     100    PGMACCESSORIGIN_IOM,
     101    /** End of valid values. */
     102    PGMACCESSORIGIN_END,
     103    /** Type size hack. */
     104    PGMACCESSORIGIN_32BIT_HACK = 0x7fffffff
     105} PGMACCESSORIGIN;
    76106
    77107
     
    182212 * @returns VBox status code (appropriate for GC return).
    183213 * @param   pVM             VM Handle.
     214 * @param   pVCpu           Pointer to the cross context CPU context for the
     215 *                          calling EMT.
    184216 * @param   uErrorCode      CPU Error code (X86_TRAP_PF_XXX).
    185217 * @param   pRegFrame       Trap register frame.
     
    189221 *                          (If it's a EIP range this is the EIP, if not it's pvFault.)
    190222 * @param   pvUser          User argument.
    191  * @todo    Add pVCpu, possibly replacing pVM.
    192223 */
    193224typedef DECLCALLBACK(int) FNPGMRCVIRTPFHANDLER(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     
    212243 * @param   cbBuf           How much it's reading/writing.
    213244 * @param   enmAccessType   The access type.
     245 * @param   enmOrigin       Who is calling.
    214246 * @param   pvUser          User argument.
    215  * @todo    Add pVCpu, possibly replacing pVM.
    216  */
    217 typedef DECLCALLBACK(int) FNPGMR3VIRTHANDLER(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
    218                                              PGMACCESSTYPE enmAccessType, void *pvUser);
     247 */
     248typedef DECLCALLBACK(int) FNPGMR3VIRTHANDLER(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     249                                             PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser);
    219250/** Pointer to PGM access callback. */
    220251typedef FNPGMR3VIRTHANDLER *PFNPGMR3VIRTHANDLER;
    221252
    222 
    223253/**
    224254 * \#PF Handler callback for invalidation of virtual access handler ranges.
    225255 *
    226256 * @param   pVM             VM Handle.
     257 * @param   pVCpu           Pointer to the cross context CPU context for the
     258 *                          calling EMT.
    227259 * @param   GCPtr           The virtual address the guest has changed.
    228260 * @param   pvUser          User argument.
    229261 */
    230 typedef DECLCALLBACK(int) FNPGMR3VIRTINVALIDATE(PVM pVM, RTGCPTR GCPtr, void *pvUser);
     262typedef DECLCALLBACK(int) FNPGMR3VIRTINVALIDATE(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvUser);
    231263/** Pointer to PGM invalidation callback. */
    232264typedef FNPGMR3VIRTINVALIDATE *PFNPGMR3VIRTINVALIDATE;
     265
    233266
    234267/**
     
    244277/** Pointer to PGMR3PhysEnumDirtyFTPages callback. */
    245278typedef FNPGMENUMDIRTYFTPAGES *PFNPGMENUMDIRTYFTPAGES;
     279
    246280
    247281/**
     
    400434VMMDECL(int)        PGMPhysGCPtr2GCPhys(PVMCPU pVCpu, RTGCPTR GCPtr, PRTGCPHYS pGCPhys);
    401435VMMDECL(void)       PGMPhysReleasePageMappingLock(PVM pVM, PPGMPAGEMAPLOCK pLock);
    402 /** Memory access origin. */
    403 typedef enum PGMACCESSORIGIN
    404 {
    405     PGMACCESSORIGIN_INVALID = 0,
    406     PGMACCESSORIGIN_IEM,
    407     PGMACCESSORIGIN_HM,
    408     PGMACCESSORIGIN_DEVICE,
    409     PGMACCESSORIGIN_DEBUGGER,
    410     PGMACCESSORIGIN_SELM,
    411     PGMACCESSORIGIN_FTM,
    412     PGMACCESSORIGIN_IOM,
    413     PGMACCESSORIGIN_REM,
    414     PGMACCESSORIGIN_END,
    415     PGMACCESSORIGIN_32BIT_HACK = 0x7fffffff
    416 } PGMACCESSORIGIN;
    417436VMMDECL(int)        PGMPhysRead(PVM pVM, RTGCPHYS GCPhys, void *pvBuf, size_t cbRead, PGMACCESSORIGIN enmOrigin);
    418437VMMDECL(int)        PGMPhysWrite(PVM pVM, RTGCPHYS GCPhys, const void *pvBuf, size_t cbWrite, PGMACCESSORIGIN enmOrigin);
  • trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp

    r55899 r55900  
    20822082 * @param   pvBuf       Where to put the bits we read.
    20832083 * @param   cb          How much to read - less or equal to a page.
    2084  */
    2085 static int pgmPhysReadHandler(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void *pvBuf, size_t cb)
     2084 * @param   enmOrigin       The origin of this call.
     2085 */
     2086static int pgmPhysReadHandler(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void *pvBuf, size_t cb, PGMACCESSORIGIN enmOrigin)
    20862087{
    20872088    /*
     
    21082109     * Deal with any physical handlers.
    21092110     */
     2111    PVMCPU pVCpu = VMMGetCpu(pVM);
    21102112#ifdef IN_RING3
    21112113    PPGMPHYSHANDLER pPhys = NULL;
     
    21742176
    21752177            STAM_PROFILE_START(&pVirt->Stat, h);
    2176             rc2 = pVirtType->CTX_SUFF(pfnHandler)(pVM, GCPtr, (void *)pvSrc, pvBuf, cb, PGMACCESSTYPE_READ,
     2178            rc2 = pVirtType->CTX_SUFF(pfnHandler)(pVM, pVCpu, GCPtr, (void *)pvSrc, pvBuf, cb, PGMACCESSTYPE_READ, enmOrigin,
    21772179                                                  pVirt->CTX_SUFF(pvUser));
    21782180            STAM_PROFILE_STOP(&pVirt->Stat, h);
     
    22542256                                || PGM_PAGE_IS_SPECIAL_ALIAS_MMIO(pPage)))
    22552257                {
    2256                     int rc = pgmPhysReadHandler(pVM, pPage, pRam->GCPhys + off, pvBuf, cb);
     2258                    int rc = pgmPhysReadHandler(pVM, pPage, pRam->GCPhys + off, pvBuf, cb, enmOrigin);
    22572259                    if (RT_FAILURE(rc))
    22582260                    {
     
    23372339 * @param   pvBuf       What to write.
    23382340 * @param   cbWrite     How much to write - less or equal to a page.
    2339  */
    2340 static int pgmPhysWriteHandler(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void const *pvBuf, size_t cbWrite)
     2341 * @param   enmOrigin       The origin of this call.
     2342 */
     2343static int pgmPhysWriteHandler(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void const *pvBuf, size_t cbWrite,
     2344                               PGMACCESSORIGIN enmOrigin)
    23412345{
    23422346    PGMPAGEMAPLOCK  PgMpLck;
     
    23512355     * the heavy usage of full page handlers in the page pool.
    23522356     */
     2357    PVMCPU pVCpu = VMMGetCpu(pVM);
    23532358    if (   !PGM_PAGE_HAS_ACTIVE_VIRTUAL_HANDLERS(pPage)
    23542359        || PGM_PAGE_IS_MMIO_OR_SPECIAL_ALIAS(pPage) /* screw virtual handlers on MMIO pages */)
     
    24612466
    24622467                    STAM_PROFILE_START(&pCur->Stat, h);
    2463                     rc = pCurType->CTX_SUFF(pfnHandler)(pVM, GCPtr, pvDst, (void *)pvBuf, cbRange, PGMACCESSTYPE_WRITE,
    2464                                                         pCur->CTX_SUFF(pvUser));
     2468                    rc = pCurType->CTX_SUFF(pfnHandler)(pVM, pVCpu, GCPtr, pvDst, (void *)pvBuf, cbRange, PGMACCESSTYPE_WRITE,
     2469                                                        enmOrigin, pCur->CTX_SUFF(pvUser));
    24652470                    STAM_PROFILE_STOP(&pCur->Stat, h);
    24662471                }
     
    26492654                                  + (GCPhys & PAGE_OFFSET_MASK);
    26502655                STAM_PROFILE_START(&pVirt->Stat, h);
    2651                 rc = pVirtType->CTX_SUFF(pfnHandler)(pVM, GCPtr, pvDst, (void *)pvBuf, cbRange, PGMACCESSTYPE_WRITE,
    2652                                                      pVirt->CTX_SUFF(pvUser));
     2656                rc = pVirtType->CTX_SUFF(pfnHandler)(pVM, pVCpu, GCPtr, pvDst, (void *)pvBuf, cbRange, PGMACCESSTYPE_WRITE,
     2657                                                     enmOrigin, pVirt->CTX_SUFF(pvUser));
    26532658                STAM_PROFILE_STOP(&pVirt->Stat, h);
    26542659                AssertLogRelMsg(rc == VINF_SUCCESS || rc == VINF_PGM_HANDLER_DO_DEFAULT, ("rc=%Rrc GCPhys=%RGp pPage=%R[pgmpage] %s\n", rc, GCPhys, pPage, pVirt->pszDesc));
     
    27042709                                  + (GCPhys & PAGE_OFFSET_MASK);
    27052710                STAM_PROFILE_START(&pVirt->Stat, h2);
    2706                 int rc2 = pVirtType->CTX_SUFF(pfnHandler)(pVM, GCPtr, pvDst, (void *)pvBuf, cbRange, PGMACCESSTYPE_WRITE,
    2707                                                           pVirt->CTX_SUFF(pvUser));
     2711                int rc2 = pVirtType->CTX_SUFF(pfnHandler)(pVM, pVCpu, GCPtr, pvDst, (void *)pvBuf, cbRange, PGMACCESSTYPE_WRITE,
     2712                                                          enmOrigin, pVirt->CTX_SUFF(pvUser));
    27082713                STAM_PROFILE_STOP(&pVirt->Stat, h2);
    27092714                if (rc2 == VINF_SUCCESS && rc == VINF_PGM_HANDLER_DO_DEFAULT)
     
    28012806                    || PGM_PAGE_IS_SPECIAL_ALIAS_MMIO(pPage))
    28022807                {
    2803                     int rc = pgmPhysWriteHandler(pVM, pPage, pRam->GCPhys + off, pvBuf, cb);
     2808                    int rc = pgmPhysWriteHandler(pVM, pPage, pRam->GCPhys + off, pvBuf, cb, enmOrigin);
    28042809                    if (RT_FAILURE(rc))
    28052810                    {
  • trunk/src/VBox/VMM/VMMR3/CSAM.cpp

    r55897 r55900  
    21722172 * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
    21732173 * @param   pVM             Pointer to the VM.
     2174 * @param   pVCpu       Pointer to the cross context CPU context for the
     2175 *                      calling EMT.
    21742176 * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
    21752177 * @param   pvPtr           The HC mapping of that address.
     
    21772179 * @param   cbBuf           How much it's reading/writing.
    21782180 * @param   enmAccessType   The access type.
     2181 * @param   enmOrigin       Who is making this write.
    21792182 * @param   pvUser          User argument.
    21802183 */
    2181 static DECLCALLBACK(int) csamR3CodePageWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
    2182                                                     PGMACCESSTYPE enmAccessType, void *pvUser)
     2184static DECLCALLBACK(int) csamR3CodePageWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     2185                                                    PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser)
    21832186{
    21842187    int rc;
     
    21992202    else
    22002203    {
     2204        AssertFailed(); /* PGM should make sure this does not happen anymore! */
    22012205        /* Queue the write instead otherwise we'll get concurrency issues. */
    22022206        /** @note in theory not correct to let it write the data first before disabling a patch!
     
    22162220 *
    22172221 * @param   pVM             Pointer to the VM.
     2222 * @param   pVCpu           Pointer to the cross context CPU context for the
     2223 *                          calling EMT.
    22182224 * @param   GCPtr           The virtual address the guest has changed.
    22192225 */
    2220 static DECLCALLBACK(int) csamR3CodePageInvalidate(PVM pVM, RTGCPTR GCPtr, void *pvUser)
     2226static DECLCALLBACK(int) csamR3CodePageInvalidate(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvUser)
    22212227{
    22222228    g_fInCsamR3CodePageInvalidate = true;
  • trunk/src/VBox/VMM/VMMR3/PATM.cpp

    r55897 r55900  
    984984 * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
    985985 * @param   pVM             Pointer to the VM.
     986 * @param   pVCpu           Pointer to the cross context CPU context for the
     987 *                          calling EMT.
    986988 * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
    987989 * @param   pvPtr           The HC mapping of that address.
     
    989991 * @param   cbBuf           How much it's reading/writing.
    990992 * @param   enmAccessType   The access type.
    991  * @param   pvUser          User argument.
    992  */
    993 static DECLCALLBACK(int) patmR3VirtPageHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
    994                                                PGMACCESSTYPE enmAccessType, void *pvUser)
     993 * @param   enmOrigin       Who is making this write.
     994 * @param   pvUser          The address of the guest page we're monitoring.
     995 */
     996static DECLCALLBACK(int) patmR3VirtPageHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     997                                               PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser)
    995998{
    996999    Assert(enmAccessType == PGMACCESSTYPE_WRITE); NOREF(enmAccessType);
    997     NOREF(pvPtr); NOREF(pvBuf); NOREF(cbBuf); NOREF(pvUser);
     1000    NOREF(pVCpu); NOREF(pvPtr); NOREF(pvBuf); NOREF(cbBuf); NOREF(enmOrigin); NOREF(pvUser);
    9981001
    9991002    /** @todo could be the wrong virtual address (alias) */
  • trunk/src/VBox/VMM/VMMR3/SELM.cpp

    r55897 r55900  
    14911491 * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
    14921492 * @param   pVM             Pointer to the VM.
     1493 * @param   pVCpu           Pointer to the cross context CPU context for the
     1494 *                          calling EMT.
    14931495 * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
    14941496 * @param   pvPtr           The HC mapping of that address.
     
    14961498 * @param   cbBuf           How much it's reading/writing.
    14971499 * @param   enmAccessType   The access type.
    1498  * @param   pvUser          User argument.
    1499  */
    1500 static DECLCALLBACK(int) selmR3GuestGDTWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
    1501                                                     PGMACCESSTYPE enmAccessType, void *pvUser)
     1500 * @param   enmOrigin       Who is making this write.
     1501 * @param   pvUser          Unused.
     1502 */
     1503static DECLCALLBACK(int) selmR3GuestGDTWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     1504                                                    PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser)
    15021505{
    15031506    Assert(enmAccessType == PGMACCESSTYPE_WRITE); NOREF(enmAccessType);
    15041507    Log(("selmR3GuestGDTWriteHandler: write to %RGv size %d\n", GCPtr, cbBuf)); NOREF(GCPtr); NOREF(cbBuf);
    1505     NOREF(pvPtr); NOREF(pvBuf); NOREF(pvUser);
    1506 
    1507     VMCPU_FF_SET(VMMGetCpu(pVM), VMCPU_FF_SELM_SYNC_GDT);
     1508    NOREF(pvPtr); NOREF(pvBuf); NOREF(enmOrigin); NOREF(pvUser);
     1509
     1510    VMCPU_FF_SET(pVCpu, VMCPU_FF_SELM_SYNC_GDT);
    15081511    return VINF_PGM_HANDLER_DO_DEFAULT;
    15091512}
     
    15201523 * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
    15211524 * @param   pVM             Pointer to the VM.
     1525 * @param   pVCpu           Pointer to the cross context CPU context for the
     1526 *                          calling EMT.
    15221527 * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
    15231528 * @param   pvPtr           The HC mapping of that address.
     
    15251530 * @param   cbBuf           How much it's reading/writing.
    15261531 * @param   enmAccessType   The access type.
    1527  * @param   pvUser          User argument.
    1528  */
    1529 static DECLCALLBACK(int) selmR3GuestLDTWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
    1530                                                     PGMACCESSTYPE enmAccessType, void *pvUser)
     1532 * @param   enmOrigin       Who is making this write.
     1533 * @param   pvUser          Unused.
     1534 */
     1535static DECLCALLBACK(int) selmR3GuestLDTWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     1536                                                    PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser)
    15311537{
    15321538    Assert(enmAccessType == PGMACCESSTYPE_WRITE); NOREF(enmAccessType);
    15331539    Log(("selmR3GuestLDTWriteHandler: write to %RGv size %d\n", GCPtr, cbBuf)); NOREF(GCPtr); NOREF(cbBuf);
    1534     NOREF(pvPtr); NOREF(pvBuf); NOREF(pvUser);
    1535 
    1536     VMCPU_FF_SET(VMMGetCpu(pVM), VMCPU_FF_SELM_SYNC_LDT);
     1540    NOREF(pvPtr); NOREF(pvBuf); NOREF(enmOrigin); NOREF(pvUser);
     1541
     1542    VMCPU_FF_SET(pVCpu, VMCPU_FF_SELM_SYNC_LDT);
    15371543    return VINF_PGM_HANDLER_DO_DEFAULT;
    15381544}
     
    15501556 * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
    15511557 * @param   pVM             Pointer to the VM.
     1558 * @param   pVCpu           Pointer to the cross context CPU context for the
     1559 *                          calling EMT.
    15521560 * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
    15531561 * @param   pvPtr           The HC mapping of that address.
     
    15551563 * @param   cbBuf           How much it's reading/writing.
    15561564 * @param   enmAccessType   The access type.
    1557  * @param   pvUser          User argument.
    1558  */
    1559 static DECLCALLBACK(int) selmR3GuestTSSWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
    1560                                                     PGMACCESSTYPE enmAccessType, void *pvUser)
     1565 * @param   enmOrigin       Who is making this write.
     1566 * @param   pvUser          Unused.
     1567 */
     1568static DECLCALLBACK(int) selmR3GuestTSSWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     1569                                                    PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser)
    15611570{
    15621571    Assert(enmAccessType == PGMACCESSTYPE_WRITE); NOREF(enmAccessType);
    15631572    Log(("selmR3GuestTSSWriteHandler: write %.*Rhxs to %RGv size %d\n", RT_MIN(8, cbBuf), pvBuf, GCPtr, cbBuf));
    1564     NOREF(pvBuf); NOREF(GCPtr); NOREF(cbBuf); NOREF(pvUser);NOREF(pvPtr);
     1573    NOREF(pvBuf); NOREF(GCPtr); NOREF(cbBuf); NOREF(enmOrigin); NOREF(pvUser); NOREF(pvPtr);
    15651574
    15661575    /** @todo This can be optimized by checking for the ESP0 offset and tracking TR
     
    15691578     *        changes while we're in REM. */
    15701579
    1571     VMCPU_FF_SET(VMMGetCpu(pVM), VMCPU_FF_SELM_SYNC_TSS);
     1580    VMCPU_FF_SET(pVCpu, VMCPU_FF_SELM_SYNC_TSS);
    15721581    return VINF_PGM_HANDLER_DO_DEFAULT;
    15731582}
  • trunk/src/VBox/VMM/VMMR3/TRPM.cpp

    r55897 r55900  
    442442static DECLCALLBACK(int) trpmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
    443443#ifdef TRPM_TRACK_GUEST_IDT_CHANGES
    444 static DECLCALLBACK(int) trpmR3GuestIDTWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf, PGMACCESSTYPE enmAccessType, void *pvUser);
     444static FNPGMR3VIRTHANDLER trpmR3GuestIDTWriteHandler;
    445445#endif
    446446
     
    11811181 * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
    11821182 * @param   pVM             Pointer to the VM.
     1183 * @param   pVCpu           Pointer to the cross context CPU context for the
     1184 *                          calling EMT.
    11831185 * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
    11841186 * @param   pvPtr           The HC mapping of that address.
     
    11861188 * @param   cbBuf           How much it's reading/writing.
    11871189 * @param   enmAccessType   The access type.
     1190 * @param   enmOrigin       The origin of this call.
    11881191 * @param   pvUser          User argument.
    11891192 */
    1190 static DECLCALLBACK(int) trpmR3GuestIDTWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
    1191                                                     PGMACCESSTYPE enmAccessType, void *pvUser)
     1193static DECLCALLBACK(int) trpmR3GuestIDTWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     1194                                                    PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser)
    11921195{
    11931196    Assert(enmAccessType == PGMACCESSTYPE_WRITE); NOREF(enmAccessType);
    11941197    Log(("trpmR3GuestIDTWriteHandler: write to %RGv size %d\n", GCPtr, cbBuf)); NOREF(GCPtr); NOREF(cbBuf);
    1195     NOREF(pvPtr); NOREF(pvUser); NOREF(pvBuf);
     1198    NOREF(pvPtr); NOREF(pvUser); NOREF(pvBuf); NOREF(enmOrigin); NOREF(pvUser);
    11961199    Assert(!HMIsEnabled(pVM));
    11971200
    1198     VMCPU_FF_SET(VMMGetCpu(pVM), VMCPU_FF_TRPM_SYNC_IDT);
     1201    VMCPU_FF_SET(pVCpu, VMCPU_FF_TRPM_SYNC_IDT);
    11991202    return VINF_PGM_HANDLER_DO_DEFAULT;
    12001203}
  • trunk/src/VBox/VMM/VMMRC/CSAMRC.cpp

    r55895 r55900  
    5757 * @returns VBox status code (appropriate for GC return).
    5858 * @param   pVM         Pointer to the VM.
    59  * @param   uErrorCode   CPU Error code.
     59 * @param   pVCpu       Pointer to the cross context CPU context for the calling
     60 *                      EMT.
     61 * @param   uErrorCode  CPU Error code.
    6062 * @param   pRegFrame   Trap register frame.
    6163 * @param   pvFault     The fault address (cr2).
     
    6567 * @param   pvUser      Ignored.
    6668 */
    67 DECLEXPORT(int) csamRCCodePageWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     69DECLEXPORT(int) csamRCCodePageWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    6870                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    6971{
     
    7173    bool         fPatchCode = PATMIsPatchGCAddr(pVM, pRegFrame->eip);
    7274    int          rc;
    73     PVMCPU       pVCpu = VMMGetCpu0(pVM);
    7475    NOREF(uErrorCode);
    7576
  • trunk/src/VBox/VMM/VMMRC/PATMRC.cpp

    r55895 r55900  
    5050 * @returns VBox status code (appropriate for trap handling and GC return).
    5151 * @param   pVM         Pointer to the VM.
    52  * @param   uErrorCode   CPU Error code.
     52 * @param   pVCpu       Pointer to the cross context CPU context for the
     53 *                      calling EMT.
     54 * @param   uErrorCode  CPU Error code.
    5355 * @param   pRegFrame   Trap register frame.
    5456 * @param   pvFault     The fault address (cr2).
     
    5658 * @param   offRange    The offset of the access into this range.
    5759 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
     60 * @param   pvUser      The physical address of the guest page being monitored.
    5861 */
    59 DECLEXPORT(int) patmRCVirtPagePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     62DECLEXPORT(int) patmRCVirtPagePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    6063                                        RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    6164{
    62     NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange);
     65    NOREF(pVCpu); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    6366    pVM->patm.s.pvFaultMonitor = (RTRCPTR)(RTRCUINTPTR)pvFault;
    6467    return VINF_PATM_CHECK_PATCH_PAGE;
  • trunk/src/VBox/VMM/VMMRC/SELMRC.cpp

    r55895 r55900  
    228228 * @returns VBox status code (appropriate for trap handling and GC return).
    229229 * @param   pVM         Pointer to the VM.
     230 * @param   pVCpu       Pointer to the cross context CPU context for the
     231 *                      calling EMT.
    230232 * @param   uErrorCode  CPU Error code.
    231233 * @param   pRegFrame   Trap register frame.
     
    235237 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    236238 */
    237 DECLEXPORT(int) selmRCGuestGDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     239DECLEXPORT(int) selmRCGuestGDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    238240                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    239241{
    240     PVMCPU pVCpu = VMMGetCpu0(pVM);
    241242    LogFlow(("selmRCGuestGDTWritePfHandler errcode=%x fault=%RGv offRange=%08x\n", (uint32_t)uErrorCode, pvFault, offRange));
    242243    NOREF(pvRange); NOREF(pvUser);
     
    322323 * @returns VBox status code (appropriate for trap handling and GC return).
    323324 * @param   pVM         Pointer to the VM.
     325 * @param   pVCpu       Pointer to the cross context CPU context for the
     326 *                      calling EMT.
    324327 * @param   uErrorCode   CPU Error code.
    325328 * @param   pRegFrame   Trap register frame.
     
    330333 * @param   pvUser      Unused.
    331334 */
    332 DECLEXPORT(int) selmRCGuestLDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     335DECLEXPORT(int) selmRCGuestLDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    333336                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    334337{
     
    337340    NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    338341
    339     VMCPU_FF_SET(VMMGetCpu0(pVM), VMCPU_FF_SELM_SYNC_LDT);
     342    VMCPU_FF_SET(pVCpu, VMCPU_FF_SELM_SYNC_LDT);
    340343    STAM_COUNTER_INC(&pVM->selm.s.StatRCWriteGuestLDT);
    341344    return VINF_EM_RAW_EMULATE_INSTR_LDT_FAULT;
     
    377380 * @returns VBox status code (appropriate for trap handling and GC return).
    378381 * @param   pVM         Pointer to the VM.
     382 * @param   pVCpu       Pointer to the cross context CPU context for the
     383 *                      calling EMT.
    379384 * @param   uErrorCode  CPU Error code.
    380385 * @param   pRegFrame   Trap register frame.
     
    385390 * @param   pvUser      Unused.
    386391 */
    387 DECLEXPORT(int) selmRCGuestTSSWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     392DECLEXPORT(int) selmRCGuestTSSWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    388393                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    389394{
    390     PVMCPU pVCpu = VMMGetCpu0(pVM);
    391395    LogFlow(("selmRCGuestTSSWritePfHandler errcode=%x fault=%RGv offRange=%08x\n", (uint32_t)uErrorCode, pvFault, offRange));
    392396    NOREF(pvRange); NOREF(pvUser);
     
    532536 * @returns VBox status code (appropriate for trap handling and GC return).
    533537 * @param   pVM         Pointer to the VM.
     538 * @param   pVCpu       Pointer to the cross context CPU context for the
     539 *                      calling EMT.
    534540 * @param   uErrorCode   CPU Error code.
    535541 * @param   pRegFrame   Trap register frame.
     
    540546 * @param   pvUser      Unused.
    541547 */
    542 DECLEXPORT(int) selmRCShadowGDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     548DECLEXPORT(int) selmRCShadowGDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    543549                                              RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    544550{
    545551    LogRel(("FATAL ERROR: selmRCShadowGDTWritePfHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    546     NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
     552    NOREF(pVM); NOREF(pVCpu); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    547553    return VERR_SELM_SHADOW_GDT_WRITE;
    548554}
     
    556562 * @returns VBox status code (appropriate for trap handling and GC return).
    557563 * @param   pVM         Pointer to the VM.
     564 * @param   pVCpu       Pointer to the cross context CPU context for the
     565 *                      calling EMT.
    558566 * @param   uErrorCode   CPU Error code.
    559567 * @param   pRegFrame   Trap register frame.
     
    564572 * @param   pvUser      Unused.
    565573 */
    566 DECLEXPORT(int) selmRCShadowLDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     574DECLEXPORT(int) selmRCShadowLDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    567575                                              RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    568576{
    569577    LogRel(("FATAL ERROR: selmRCShadowLDTWritePfHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    570578    Assert(pvFault - (uintptr_t)pVM->selm.s.pvLdtRC < (unsigned)(65536U + PAGE_SIZE));
    571     NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
     579    NOREF(pVM); NOREF(pVCpu); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    572580    return VERR_SELM_SHADOW_LDT_WRITE;
    573581}
     
    581589 * @returns VBox status code (appropriate for trap handling and GC return).
    582590 * @param   pVM         Pointer to the VM.
     591 * @param   pVCpu       Pointer to the cross context CPU context for the
     592 *                      calling EMT.
    583593 * @param   uErrorCode   CPU Error code.
    584594 * @param   pRegFrame   Trap register frame.
     
    589599 * @param   pvUser      Unused.
    590600 */
    591 DECLEXPORT(int) selmRCShadowTSSWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     601DECLEXPORT(int) selmRCShadowTSSWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    592602                                              RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    593603{
    594604    LogRel(("FATAL ERROR: selmRCShadowTSSWritePfHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    595     NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
     605    NOREF(pVM); NOREF(pVCpu); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    596606    return VERR_SELM_SHADOW_TSS_WRITE;
    597607}
  • trunk/src/VBox/VMM/VMMRC/TRPMRC.cpp

    r55895 r55900  
    9595 * @returns VBox status code (appropriate for trap handling and GC return).
    9696 * @param   pVM         Pointer to the VM.
     97 * @param   pVCpu       Pointer to the cross context CPU context for the
     98 *                      calling EMT.
    9799 * @param   uErrorCode   CPU Error code.
    98100 * @param   pRegFrame   Trap register frame.
     
    103105 * @param   pvUser      Unused.
    104106 */
    105 DECLEXPORT(int) trpmRCGuestIDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     107DECLEXPORT(int) trpmRCGuestIDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    106108                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    107109{
    108     PVMCPU      pVCpu = VMMGetCpu0(pVM);
    109110    uint16_t    cbIDT;
    110111    RTGCPTR     GCPtrIDT    = (RTGCPTR)CPUMGetGuestIDTR(pVCpu, &cbIDT);
     
    160161 * @returns VBox status code (appropriate for trap handling and GC return).
    161162 * @param   pVM         Pointer to the VM.
    162  * @param   uErrorCode   CPU Error code.
     163 * @param   pVCpu       Pointer to the cross context CPU context for the
     164 *                      calling EMT.
     165 * @param   uErrorCode  CPU Error code.
    163166 * @param   pRegFrame   Trap register frame.
    164167 * @param   pvFault     The fault address (cr2).
     
    168171 * @param   pvUser      Unused.
    169172 */
    170 DECLEXPORT(int) trpmRCShadowIDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     173DECLEXPORT(int) trpmRCShadowIDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
    171174                                              RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    172175{
    173     PVMCPU pVCpu = VMMGetCpu0(pVM);
    174176    LogRel(("FATAL ERROR: trpmRCShadowIDTWritePfHandler: eip=%08X pvFault=%RGv pvRange=%08RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    175177    NOREF(uErrorCode); NOREF(offRange); NOREF(pvUser);
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