--- Gnu-Mach/vm/vm_page.h 2020/09/02 04:36:57 1.1 +++ Gnu-Mach/vm/vm_page.h 2020/09/02 04:45:26 1.1.1.3 @@ -34,15 +34,13 @@ #ifndef _VM_VM_PAGE_H_ #define _VM_VM_PAGE_H_ -#include - #include #include #include #include +#include #include #include -#include #include #include /* definitions of wait/wakeup */ @@ -93,6 +91,8 @@ struct vm_page { laundry:1, /* page is being cleaned now (P)*/ free:1, /* page is on free list (P) */ reference:1, /* page has been used (P) */ + external:1, /* page considered external (P) */ + extcounted:1, /* page counted in ext counts (P) */ :0; /* (force to 'long' boundary) */ #ifdef ns32000 int pad; /* extra space for ns32000 bit ops */ @@ -123,10 +123,6 @@ struct vm_page { vm_prot_t unlock_request; /* Outstanding unlock request (O) */ }; -typedef struct vm_page *vm_page_t; - -#define VM_PAGE_NULL ((vm_page_t) 0) - /* * For debugging, this macro can be defined to perform * some useful check on a page structure. @@ -184,6 +180,17 @@ extern int vm_page_free_reserved; /* How many pages reserved to do pageout */ extern int vm_page_laundry_count; /* How many pages being laundered? */ +extern +int vm_page_external_limit; /* Max number of pages for external objects */ + +/* Only objects marked with the extcounted bit are included in this total. + Pages which we scan for possible pageout, but which are not actually + dirty, don't get considered against the external page limits any more + in this way. */ +extern +int vm_page_external_count; /* How many pages for external objects? */ + + decl_simple_lock_data(extern,vm_page_queue_lock)/* lock on active and inactive page queues */ @@ -209,10 +216,10 @@ extern vm_page_t vm_page_lookup( vm_offset_t offset); extern vm_page_t vm_page_grab_fictitious(void); extern void vm_page_release_fictitious(vm_page_t); -extern boolean_t vm_page_convert(vm_page_t); +extern boolean_t vm_page_convert(vm_page_t, boolean_t); extern void vm_page_more_fictitious(void); -extern vm_page_t vm_page_grab(void); -extern void vm_page_release(vm_page_t); +extern vm_page_t vm_page_grab(boolean_t); +extern void vm_page_release(vm_page_t, boolean_t); extern void vm_page_wait(void (*)(void)); extern vm_page_t vm_page_alloc( vm_object_t object,