Subject: CVS commit: syssrc
To: None <firstname.lastname@example.org>
From: Jason R Thorpe <email@example.com>
Date: 07/06/1999 23:02:23
Module Name: syssrc
Committed By: thorpej
Date: Wed Jul 7 06:02:22 UTC 1999
syssrc/sys/uvm: uvm_map.c uvm_mmap.c
Add some more meat to madvise(2):
* Implement MADV_DONTNEED: deactivate pages in the specified range,
semantics similar to Solaris's MADV_DONTNEED.
* Add MADV_FREE: free pages and swap resources associated with the
specified range, causing the range to be reloaded from backing
store (vnodes) or zero-fill (anonymous), semantics like FreeBSD's
MADV_FREE and like Digital UNIX's MADV_DONTNEED (isn't it SO GREAT
that madvise(2) isn't standardized!?)
As part of this, move the non-map-modifying advice handling out of
uvm_map_advise(), and into sys_madvise().
As another part, implement general amap cleaning in uvm_map_clean(), and
change uvm_map_clean() to only push dirty pages to disk if PGO_CLEANIT
is set in its flags (and update sys___msync13() accordingly). XXX Add
a patchable global "amap_clean_works", defaulting to 1, which can disable
the amap cleaning code, just in case problems are unearthed; this gives
a developer/user a quick way to recover and send a bug report (e.g. boot
into DDB and change the value).
XXX Still need to implement a real uao_flush().
XXX Need to update the manual page.
With these changes, rebuilding libc will automatically cause the new
malloc(3) to use MADV_FREE to actually release pages and swap resources
when it decides that can be done.
To generate a diff of this commit:
cvs rdiff -r1.23 -r1.24 syssrc/sys/sys/mman.h
cvs rdiff -r1.60 -r1.61 syssrc/sys/uvm/uvm_map.c
cvs rdiff -r1.28 -r1.29 syssrc/sys/uvm/uvm_mmap.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.