f3962cac114293c7444716e3d018316b7e4d8d23
[reactos.git] / reactos / ntoskrnl / mm / wset.c
1 /*
2 * ReactOS kernel
3 * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19 /* $Id$
20 *
21 * PROJECT: ReactOS kernel
22 * FILE: ntoskrnl/mm/wset.c
23 * PURPOSE: Manages working sets
24 * PROGRAMMER: David Welch (welch@cwcom.net)
25 * UPDATE HISTORY:
26 * Created 22/05/98
27 */
28
29 /* INCLUDES *****************************************************************/
30
31 #include <ntoskrnl.h>
32 #define NDEBUG
33 #include <internal/debug.h>
34
35 /* FUNCTIONS *****************************************************************/
36
37 NTSTATUS
38 MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages)
39 {
40 PFN_TYPE CurrentPage;
41 PFN_TYPE NextPage;
42 NTSTATUS Status;
43
44 (*NrFreedPages) = 0;
45
46 CurrentPage = MmGetLRUFirstUserPage();
47 while (CurrentPage != 0 && Target > 0)
48 {
49 NextPage = MmGetLRUNextUserPage(CurrentPage);
50
51 Status = MmPageOutPhysicalAddress(CurrentPage);
52 if (NT_SUCCESS(Status))
53 {
54 DPRINT("Succeeded\n");
55 Target--;
56 (*NrFreedPages)++;
57 }
58 else if (Status == STATUS_PAGEFILE_QUOTA)
59 {
60 MmSetLRULastPage(CurrentPage);
61 }
62
63 CurrentPage = NextPage;
64 }
65 return(STATUS_SUCCESS);
66 }
67
68 /*
69 * @unimplemented
70 */
71 ULONG
72 STDCALL
73 MmTrimAllSystemPagableMemory (
74 IN ULONG PurgeTransitionList
75 )
76 {
77 UNIMPLEMENTED;
78 return 0;
79 }