diff options
author | dillon <dillon@FreeBSD.org> | 2000-05-29 22:40:54 +0000 |
---|---|---|
committer | dillon <dillon@FreeBSD.org> | 2000-05-29 22:40:54 +0000 |
commit | 82627e96a026e438a7251b0e5dc0a5322435693c (patch) | |
tree | 30efad495e652bce5e17011dd662ffce150ecd07 /sys/vm/vm_object.c | |
parent | 2e7f60e876b44bc7a2762fa018f17c30864bc19d (diff) | |
download | FreeBSD-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_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 1b33f78..e5403d1 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -833,12 +833,14 @@ shadowlookup: /* * If the page is busy or not in a normal active state, - * we skip it. Things can break if we mess with pages - * in any of the below states. + * we skip it. If the page is not managed there are no + * page queues to mess with. Things can break if we mess + * with pages in any of the below states. */ if ( m->hold_count || m->wire_count || + (m->flags & PG_UNMANAGED) || m->valid != VM_PAGE_BITS_ALL ) { continue; @@ -1394,6 +1396,13 @@ vm_object_page_remove(object, start, end, clean_only) all = ((end == 0) && (start == 0)); + /* + * Since physically-backed objects do not use managed pages, we can't + * remove pages from the object (we must instead remove the page + * references, and then destroy the object). + */ + KASSERT(object->type != OBJT_PHYS, ("attempt to remove pages from a physical object")); + vm_object_pip_add(object, 1); again: size = end - start; |