as with user-land programs, include files are installed by each directory
in the tree that has includes to install. (This allows more flexibility
as to what gets installed, makes 'partial installs' easier, and gives us
more options as to which machines' includes get installed at any given
time.) The old SYS_INCLUDES={symlinks,copies} behaviours are _both_
still supported, though at least one bug in the 'symlinks' case is
fixed by this change. Include files can't be build before installation,
so directories that have includes as targets (e.g. dev/pci) have to move
those targets into a different Makefile.
write protection. this stops data corruption where it was possible
to change the in-memory copy of an append-only file (but not the on-disk
copy). this is documented in NetBSD security advisory 1998-003. thanks
to darrenr, lukem, cgd, mycroft and mrg for this.
the new proc structure when performing a fork. This makes it much
easier to abort a fork operation and return an error if we run out
of KVA space.
The U-area pages are still wired down in {,u}vm_fork(), as before.
calling vm_pager_get() doesn't count as a "majflt" unless the pager
returns VM_PAGER_OK. when walking an object chain we can get VM_PAGER_FAIL
(indicating that the requested data does not reside in this object
and we must continue to walk the chain) -- we don't want to count this
as a majflt.
i also added code to count ru_minflt.
UVM was written by chuck cranor <chuck@maria.wustl.edu>, with some
minor portions derived from the old Mach code. i provided some help
getting swap and paging working, and other bug fixes/ideas. chuck
silvers <chuq@chuq.com> also provided some other fixes.
these are the changes to the old Mach VM system to allow both to be
available in the kernel.
string. The actual functional changes are:
1. in vm_page_alloc(), restore some long lost code by Paul Kranenburg
that reserves the last few pages for kernel objects, adding an
additional escape for the pageout daemon.
2. In vm_wait() (replaces VM_WAIT), recognize the amusing fatal
deadlock where the pagedemon sleeps on a channel that only it ever
wakes up, and add a timeout and printf. Mod 1 should generally
prevent this from happening in any case.
3. Fix a livelock in vm_pageout_page() caused by a pre-wakeup of
page consumers prior to the pageout, which can easily fail over
memory issues in NFS and IP code. Also, ++ cnt.v_pageouts only
if the pageout succeeded.
legitimate for this to be set if vm_set_page_size() hasn't been called (it's
how the page size is communicated to vm_set_page_size()). Instead, test
for page_shift == 0; this is one of the values that vm_set_page_size()
initializes.
to vm_bootstrap_steal_memory(), since we may need to steal memory from
a direct-mapped segment at this early stage of the game (on e.g. MIPS
and Alpha).
This interface is activated by defining PMAP_STEAL_MEMORY in <machine/pmap.h>.
Otherwise, the pmap_virtual_space() prototype is in-scope for use by
vm_bootstrap_steal_memory().
called "MACHINE_NEW_NONCONGIG". this is required for UVM, the new VM
system (also written by chuck) that is coming soon. adds new functions:
vm_page_physload() -- tell the VM system about an area of memory.
vm_physseg_find() -- returns index in vm_physmem array that this
address is in.
and several new versions of old functions/macros defined in vm_page.h.
this is the MI portion. sparc, and then later i386 portions to come.
all other ports need to change to this ASAP! (alpha is already being
worked on)