DragonFly commits List (threaded) for 2008-05
cvs commit: src/sys/kern kern_slaballoc.c kern_umtx.c kern_xio.c sys_pipe.c vfs_bio.c src/sys/platform/pc32/i386 pmap.c trap.c src/sys/platform/vkernel/platform copyio.c pmap.c src/sys/vm swap_pager.c vm_fault.c vm_object.c vm_page.c vm_page.h ...
dillon 2008/05/09 00:24:48 PDT
DragonFly src repository
sys/kern kern_slaballoc.c kern_umtx.c kern_xio.c
sys/platform/pc32/i386 pmap.c trap.c
sys/platform/vkernel/platform copyio.c pmap.c
sys/vm swap_pager.c vm_fault.c vm_object.c
vm_page.c vm_page.h vm_pageout.c
Fix many bugs and issues in the VM system, particularly related to
* (cleanup) PG_WRITEABLE is now set by the low level pmap code and not by
high level code. It means 'This page may contain a managed page table
mapping which is writeable', meaning that hardware can dirty the page
at any time. The page must be tested via appropriate pmap calls before
being disposed of.
* (cleanup) PG_MAPPED is now handled by the low level pmap code and only
applies to managed mappings. There is still a bit of cruft left over
related to the pmap code's page table pages but the high level code is now
* (bug) Various XIO, SFBUF, and MSFBUF routines which bypass normal paging
operations were not properly dirtying pages when the caller intended
to write to them.
* (bug) vfs_busy_pages in kern/vfs_bio.c had a busy race. Separate the code
out to ensure that we have marked all the pages as undergoing IO before we
call vm_page_protect(). vm_page_protect(... VM_PROT_NONE) can block
under very heavy paging conditions and if the pages haven't been marked
for IO that could blow up the code.
* (optimization) Make a minor optimization. When busying pages for write
IO, downgrade the page table mappings to read-only instead of removing
* (bug) In platform/pc32/i386/pmap.c fix various places where
pmap_inval_add() was being called at the wrong point. Only one was
critical, in pmap_enter(), where pmap_inval_add() was being called so far
away from the pmap entry being modified that it could wind up being flushed
out prior to the modification, breaking the cpusync required.
pmap.c also contains most of the work involved in the PG_MAPPED and
* (bug) Close numerous pte updating races with hardware setting the
modified bit. There is still one race left (in pmap_enter()).
* (bug) Disable pmap_copy() entirely. Fix most of the bugs anyway, but
there is still one left in the handling of the srcmpte variable.
* (cleanup) Change vm_page_dirty() from an inline to a real procedure, and
move the code which set the object to writeable/maybedirty into
* (bug) Calls to vm_page_protect(... VM_PROT_NONE) can block. Fix all cases
where this call was made with a non-busied page. All such calls are
now made with a busied page, preventing blocking races from re-dirtying
or remapping the page unexpectedly.
(Such blockages could only occur during heavy paging activity where the
underlying page table pages are being actively recycled).
* (bug) Fix the pageout code to properly mark pages as undergoing I/O before
changing their protection bits.
* (bug) Busy pages undergoing zeroing or partial zeroing in the vnode pager
(vm/vnode_pager.c) to avoid unexpected effects.
Revision Changes Path
1.52 +6 -1 src/sys/kern/kern_slaballoc.c
1.9 +1 -0 src/sys/kern/kern_umtx.c
1.16 +6 -2 src/sys/kern/kern_xio.c
1.47 +6 -3 src/sys/kern/sys_pipe.c
1.102 +23 -2 src/sys/kern/vfs_bio.c
1.84 +116 -78 src/sys/platform/pc32/i386/pmap.c
1.112 +2 -1 src/sys/platform/pc32/i386/trap.c
1.9 +1 -0 src/sys/platform/vkernel/platform/copyio.c
1.29 +57 -48 src/sys/platform/vkernel/platform/pmap.c
1.31 +4 -4 src/sys/vm/swap_pager.c
1.46 +40 -28 src/sys/vm/vm_fault.c
1.33 +1 -1 src/sys/vm/vm_object.c
1.38 +37 -7 src/sys/vm/vm_page.c
1.28 +27 -26 src/sys/vm/vm_page.h
1.35 +20 -10 src/sys/vm/vm_pageout.c
1.42 +6 -1 src/sys/vm/vnode_pager.c