summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_page.h
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>2000-05-29 22:40:54 +0000
committerdillon <dillon@FreeBSD.org>2000-05-29 22:40:54 +0000
commit82627e96a026e438a7251b0e5dc0a5322435693c (patch)
tree30efad495e652bce5e17011dd662ffce150ecd07 /sys/vm/vm_page.h
parent2e7f60e876b44bc7a2762fa018f17c30864bc19d (diff)
downloadFreeBSD-src-82627e96a026e438a7251b0e5dc0a5322435693c.zip
FreeBSD-src-82627e96a026e438a7251b0e5dc0a5322435693c.tar.gz
This is a cleanup patch to Peter's new OBJT_PHYS VM object type
and sysv shared memory support for it. It implements a new PG_UNMANAGED flag that has slightly different characteristics from PG_FICTICIOUS. A new sysctl, kern.ipc.shm_use_phys has been added to enable the use of physically-backed sysv shared memory rather then swap-backed. Physically backed shm segments are not tracked with PV entries, allowing programs which use a large shm segment as a rendezvous point to operate without eating an insane amount of KVM in the PV entry management. Read: Oracle. Peter's OBJT_PHYS object will also allow us to eventually implement page-table sharing and/or 4MB physical page support for such segments. We're half way there.
Diffstat (limited to 'sys/vm/vm_page.h')
-rw-r--r--sys/vm/vm_page.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h
index e61be7f..a25c6ac 100644
--- a/sys/vm/vm_page.h
+++ b/sys/vm/vm_page.h
@@ -225,6 +225,13 @@ extern struct vpgqueues vm_page_queues[PQ_COUNT];
* These are the flags defined for vm_page.
*
* Note: PG_FILLED and PG_DIRTY are added for the filesystems.
+ *
+ * Note: PG_UNMANAGED (used by OBJT_PHYS) indicates that the page is
+ * not under PV management but otherwise should be treated as a
+ * normal page. Pages not under PV management cannot be paged out
+ * via the object/vm_page_t because there is no knowledge of their
+ * pte mappings, nor can they be removed from their objects via
+ * the object, and such pages are also not on any PQ queue.
*/
#define PG_BUSY 0x0001 /* page is in transit (O) */
#define PG_WANTED 0x0002 /* someone is waiting for page (O) */
@@ -236,6 +243,7 @@ extern struct vpgqueues vm_page_queues[PQ_COUNT];
#define PG_CLEANCHK 0x0100 /* page will be checked for cleaning */
#define PG_SWAPINPROG 0x0200 /* swap I/O in progress on page */
#define PG_NOSYNC 0x0400 /* do not collect for syncer */
+#define PG_UNMANAGED 0x0800 /* No PV management for page */
/*
* Misc constants.
@@ -399,6 +407,7 @@ void vm_page_remove __P((vm_page_t));
void vm_page_rename __P((vm_page_t, vm_object_t, vm_pindex_t));
vm_offset_t vm_page_startup __P((vm_offset_t, vm_offset_t, vm_offset_t));
vm_page_t vm_add_new_page __P((vm_offset_t pa));
+void vm_page_unmanage __P((vm_page_t));
void vm_page_unwire __P((vm_page_t, int));
void vm_page_wire __P((vm_page_t));
void vm_page_unqueue __P((vm_page_t));
OpenPOWER on IntegriCloud