VirtualBox

Changeset 19871 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
May 20, 2009 2:51:20 PM (16 years ago)
Author:
vboxsync
Message:

Protect SyncPage with a lock as well.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r19835 r19871  
    421421                                && !(uErr & X86_TRAP_PF_P))
    422422                            {
     423                                pgmLock(pVM);
    423424                                rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, pvFault, PGM_SYNC_NR_PAGES, uErr);
     425                                pgmUnlock(pVM);
    424426                                if (    RT_FAILURE(rc)
    425427                                    || !(uErr & X86_TRAP_PF_RW)
     
    467469                            && !(uErr & X86_TRAP_PF_P))
    468470                        {
     471                            pgmLock(pVM);
    469472                            rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, pvFault, PGM_SYNC_NR_PAGES, uErr);
     473                            pgmUnlock(pVM);
    470474                            if (    RT_FAILURE(rc)
    471475                                ||  rc == VINF_PGM_SYNCPAGE_MODIFIED_PDE
     
    561565                        &&  !(uErr & X86_TRAP_PF_P))
    562566                    {
     567                        pgmLock(pVM);
    563568                        rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, pvFault, PGM_SYNC_NR_PAGES, uErr);
     569                        pgmUnlock(pVM);
    564570                        if (    RT_FAILURE(rc)
    565571                            ||  rc == VINF_PGM_SYNCPAGE_MODIFIED_PDE
     
    695701                                 */
    696702                                LogFlow(("CSAM ring 3 job\n"));
     703                                pgmLock(pVM);
    697704                                int rc2 = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, pvFault, 1, uErr);
     705                                pgmUnlock(pVM);
    698706                                AssertRC(rc2);
    699707
     
    743751                }
    744752#   endif /* PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) && !defined(IN_RING0) */
     753                pgmLock(pVM);
    745754                rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, pvFault, PGM_SYNC_NR_PAGES, uErr);
     755                pgmUnlock(pVM);
    746756                if (RT_SUCCESS(rc))
    747757                {
     
    788798                     *       page is not present, which is not true in this case.
    789799                     */
     800                    pgmLock(pVM);
    790801                    rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, pvFault, 1, uErr);
     802                    pgmUnlock(pVM);
    791803                    if (RT_SUCCESS(rc))
    792804                    {
     
    16151627    PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool);
    16161628    LogFlow(("SyncPage: GCPtrPage=%RGv cPages=%u uErr=%#x\n", GCPtrPage, cPages, uErr));
     1629
     1630    Assert(PGMIsLockOwner(pVM));
    16171631
    16181632#if    (   PGM_GST_TYPE == PGM_TYPE_32BIT  \
     
    29672981    ASMAtomicWriteSize(pPdeDst, PdeDst.u);
    29682982
     2983    pgmLock(pVM);
    29692984    rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, GCPtrPage, PGM_SYNC_NR_PAGES, 0 /* page not present */);
     2985    pgmUnlock(pVM);
    29702986    STAM_PROFILE_STOP(&pVCpu->pgm.s.CTX_MID_Z(Stat,SyncPT), a);
    29712987    return rc;
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