mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 19:22:58 +00:00
[NTOS:MM] Do proper checks & acquire proper locks when sweeping user pages
CORE-17595
This commit is contained in:
parent
789d7a7741
commit
7c006df7e0
1 changed files with 14 additions and 7 deletions
|
@ -213,15 +213,22 @@ MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages)
|
||||||
|
|
||||||
MmLockAddressSpace(&Process->Vm);
|
MmLockAddressSpace(&Process->Vm);
|
||||||
|
|
||||||
/* Be sure this is still valid. */
|
if (!Process->VmDeleted)
|
||||||
PMMPTE Pte = MiAddressToPte(Address);
|
|
||||||
if (Pte->u.Hard.Valid)
|
|
||||||
{
|
{
|
||||||
Accessed = Accessed || Pte->u.Hard.Accessed;
|
MiLockProcessWorkingSetUnsafe(Process, PsGetCurrentThread());
|
||||||
Pte->u.Hard.Accessed = 0;
|
|
||||||
|
|
||||||
/* There is no need to invalidate, the balancer thread is never on a user process */
|
/* Be sure this is still valid. */
|
||||||
//KeInvalidateTlbEntry(Address);
|
if (MmIsAddressValid(Address))
|
||||||
|
{
|
||||||
|
PMMPTE Pte = MiAddressToPte(Address);
|
||||||
|
Accessed = Accessed || Pte->u.Hard.Accessed;
|
||||||
|
Pte->u.Hard.Accessed = 0;
|
||||||
|
|
||||||
|
/* There is no need to invalidate, the balancer thread is never on a user process */
|
||||||
|
//KeInvalidateTlbEntry(Address);
|
||||||
|
}
|
||||||
|
|
||||||
|
MiUnlockProcessWorkingSet(Process, PsGetCurrentThread());
|
||||||
}
|
}
|
||||||
|
|
||||||
MmUnlockAddressSpace(&Process->Vm);
|
MmUnlockAddressSpace(&Process->Vm);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue