VirtualBox

Changeset 20071 in vbox for trunk/src/recompiler


Ignore:
Timestamp:
May 27, 2009 12:07:38 PM (16 years ago)
Author:
vboxsync
Message:

Bit more REM locking

Location:
trunk/src/recompiler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/recompiler/VBoxREMWrapper.cpp

    r20002 r20071  
    11071107    { "DISInstr",                               (void *)(uintptr_t)&DISInstr,                       &g_aArgsDISInstr[0],                        RT_ELEMENTS(g_aArgsDISInstr),                          REMFNDESC_FLAGS_RET_INT,    sizeof(bool),       NULL },
    11081108    { "EMR3FatalError",                         (void *)(uintptr_t)&EMR3FatalError,                 &g_aArgsEMR3FatalError[0],                  RT_ELEMENTS(g_aArgsEMR3FatalError),                    REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
     1109    { "EMR3RemLock",                            (void *)(uintptr_t)&EMR3RemLock,                    &g_aArgsVM[0],                              RT_ELEMENTS(g_aArgsVM),                                REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
     1110    { "EMR3RemUnlock",                          (void *)(uintptr_t)&EMR3RemUnlock,                  &g_aArgsVM[0],                              RT_ELEMENTS(g_aArgsVM),                                REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
    11091111    { "HWACCMR3CanExecuteGuest",                (void *)(uintptr_t)&HWACCMR3CanExecuteGuest,        &g_aArgsHWACCMR3CanExecuteGuest[0],         RT_ELEMENTS(g_aArgsHWACCMR3CanExecuteGuest),           REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
    11101112    { "IOMIOPortRead",                          (void *)(uintptr_t)&IOMIOPortRead,                  &g_aArgsIOMIOPortRead[0],                   RT_ELEMENTS(g_aArgsIOMIOPortRead),                     REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
     
    11501152    { "PGMR3PhysWriteU64",                      (void *)(uintptr_t)&PGMR3PhysWriteU64,              &g_aArgsPGMR3PhysWriteU64[0],               RT_ELEMENTS(g_aArgsPGMR3PhysWriteU32),                 REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
    11511153    { "PGMR3PhysTlbGCPhys2Ptr",                 (void *)(uintptr_t)&PGMR3PhysTlbGCPhys2Ptr,         &g_aArgsPGMR3PhysTlbGCPhys2Ptr[0],          RT_ELEMENTS(g_aArgsPGMR3PhysTlbGCPhys2Ptr),            REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
     1154    { "PGMIsLockOwner",                         (void *)(uintptr_t)&PGMIsLockOwner,                 &g_aArgsVM[0],                              RT_ELEMENTS(g_aArgsVM),                                REMFNDESC_FLAGS_RET_INT,    sizeof(bool),       NULL },
    11521155    { "SSMR3GetGCPtr",                          (void *)(uintptr_t)&SSMR3GetGCPtr,                  &g_aArgsSSMR3GetGCPtr[0],                   RT_ELEMENTS(g_aArgsSSMR3GetGCPtr),                     REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
    11531156    { "SSMR3GetMem",                            (void *)(uintptr_t)&SSMR3GetMem,                    &g_aArgsSSMR3GetMem[0],                     RT_ELEMENTS(g_aArgsSSMR3GetMem),                       REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
  • trunk/src/recompiler/VBoxRecompiler.c

    r20002 r20071  
    28392839    Assert(RT_ALIGN_Z(cb, PAGE_SIZE) == cb);
    28402840    AssertMsg(fFlags == REM_NOTIFY_PHYS_RAM_FLAGS_RAM || fFlags == REM_NOTIFY_PHYS_RAM_FLAGS_MMIO2, ("#x\n", fFlags));
     2841    Assert(!PGMIsLockOwner(pVM));
     2842
     2843    EMR3RemLock(pVM);
    28412844
    28422845    /*
     
    28612864    Assert(pVM->rem.s.fIgnoreAll);
    28622865    pVM->rem.s.fIgnoreAll = false;
     2866    EMR3RemUnlock(pVM);
    28632867}
    28642868
     
    28862890    Assert(cb);
    28872891    Assert(RT_ALIGN_Z(cb, PAGE_SIZE) == cb);
    2888 
     2892    Assert(!PGMIsLockOwner(pVM));
     2893
     2894    EMR3RemLock(pVM);
    28892895    /*
    28902896     * Register the rom.
     
    28972903    Assert(pVM->rem.s.fIgnoreAll);
    28982904    pVM->rem.s.fIgnoreAll = false;
     2905    EMR3RemUnlock(pVM);
    28992906}
    29002907
     
    29182925    Assert(cb);
    29192926    Assert(RT_ALIGN_Z(cb, PAGE_SIZE) == cb);
     2927    Assert(!PGMIsLockOwner(pVM));
     2928
     2929    EMR3RemLock(pVM);
    29202930
    29212931    /*
     
    29292939    Assert(pVM->rem.s.fIgnoreAll);
    29302940    pVM->rem.s.fIgnoreAll = false;
     2941    EMR3RemUnlock(pVM);
    29312942}
    29322943
     
    29512962    Assert(RT_ALIGN_T(GCPhys, PAGE_SIZE, RTGCPHYS) == GCPhys);
    29522963    Assert(RT_ALIGN_T(cb, PAGE_SIZE, RTGCPHYS) == cb);
    2953 
     2964    Assert(!PGMIsLockOwner(pVM));
     2965
     2966    EMR3RemLock(pVM);
    29542967    if (pVM->rem.s.cHandlerNotifications)
    29552968        REMR3ReplayHandlerNotifications(pVM);
     
    29652978    Assert(pVM->rem.s.fIgnoreAll);
    29662979    pVM->rem.s.fIgnoreAll = false;
     2980    EMR3RemUnlock(pVM);
    29672981}
    29682982
     
    29832997          enmType, GCPhys, cb, fHasHCHandler, fRestoreAsRAM, MMR3PhysGetRamSize(pVM)));
    29842998    VM_ASSERT_EMT(pVM);
     2999    Assert(!PGMIsLockOwner(pVM));
     3000
     3001    EMR3RemLock(pVM);
    29853002
    29863003    if (pVM->rem.s.cHandlerNotifications)
     
    30103027    Assert(pVM->rem.s.fIgnoreAll);
    30113028    pVM->rem.s.fIgnoreAll = false;
     3029    EMR3RemUnlock(pVM);
    30123030}
    30133031
     
    30303048    VM_ASSERT_EMT(pVM);
    30313049    AssertReleaseMsg(enmType != PGMPHYSHANDLERTYPE_MMIO, ("enmType=%d\n", enmType));
     3050    Assert(!PGMIsLockOwner(pVM));
     3051
     3052    EMR3RemLock(pVM);
    30323053
    30333054    if (pVM->rem.s.cHandlerNotifications)
     
    30623083        pVM->rem.s.fIgnoreAll = false;
    30633084    }
     3085    EMR3RemUnlock(pVM);
    30643086}
    30653087
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