home *** CD-ROM | disk | FTP | other *** search
- /***
- * vmlock.c -
- *
- * Copyright (c) 1989-1992, Microsoft Corporation. All rights reserved.
- *
- *Purpose:
- *
- * PUBLIC Functions:
- *
- * PVmLockVp:
- * This function locks the page containing the specified virtual
- * address using PVmLockVpCb.
- *
- * VmUnlockVp:
- * This function unlocks the page containing the specified virtual
- * address using VmUnlockVpCb.
- *
- *******************************************************************************/
-
- #pragma title("Virtual Memory Manager")
- #pragma subtitle("Locking functions")
-
- #include <version.h>
- #include <vmassert.h>
- #include <system.h>
- #include <error.h>
- #include <vm.h>
- #include <vmp.h>
-
- #include <limits.h>
- #include <stddef.h>
-
- unsigned _near _timeCur; /* Current timestamp value */
-
- #pragma page()
-
- PVOID PUBLIC __PVmLockVp(VPVOID vp)
- {
- PVOID pv;
- HPGD hpgd;
-
- VmTracePrintf(("PVmLockVp: vp = %08lX.\n", vp));
-
- pv = __PVmLoadVp(vp, FALSE);
- if (pv == NULL)
- return(NULL);
-
- hpgd = __HpgdSearchCache(vp);
- Assert(hpgd != hpgdNil);
-
- PpgdOfHpgd(hpgd)->cLock++;
-
- return(pv);
- }
-
-
- #pragma page()
-
- void PUBLIC __VmUnlockVp(VPVOID vp, int fDirty)
- {
- HPGD hpgd;
-
- VmTracePrintf(("VmUnlockVp: vp = %08lX, fDirty = %u.\n", vp, fDirty));
-
- hpgd = __HpgdSearchCache(vp);
- Assert(hpgd != hpgdNil);
-
- Assert(PpgdOfHpgd(hpgd)->cLock != 0);
- PpgdOfHpgd(hpgd)->cLock--;
-
- if (++_timeCur == UINT_MAX)
- __VmUpdateTimestamps();
-
- PpgdOfHpgd(hpgd)->timeRef = _timeCur;
-
- if (fDirty) /* Mark page as dirty if requested */
- PpgdOfHpgd(hpgd)->Flags |= fDirtyPgd;
- }
-