DragonFly commits List (threaded) for 2008-05
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]
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
Modified files:
sys/kern kern_slaballoc.c kern_umtx.c kern_xio.c
sys_pipe.c vfs_bio.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
vnode_pager.c
Log:
Fix many bugs and issues in the VM system, particularly related to
heavy paging.
* (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
clean.
* (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
them entirely.
* (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
PG_WRITEABLE changes.
* (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
vm_page_dirty().
* (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
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_slaballoc.c.diff?r1=1.51&r2=1.52&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_umtx.c.diff?r1=1.8&r2=1.9&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_xio.c.diff?r1=1.15&r2=1.16&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/sys_pipe.c.diff?r1=1.46&r2=1.47&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_bio.c.diff?r1=1.101&r2=1.102&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/pc32/i386/pmap.c.diff?r1=1.83&r2=1.84&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/pc32/i386/trap.c.diff?r1=1.111&r2=1.112&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/vkernel/platform/copyio.c.diff?r1=1.8&r2=1.9&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/vkernel/platform/pmap.c.diff?r1=1.28&r2=1.29&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/swap_pager.c.diff?r1=1.30&r2=1.31&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_fault.c.diff?r1=1.45&r2=1.46&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_object.c.diff?r1=1.32&r2=1.33&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_page.c.diff?r1=1.37&r2=1.38&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_page.h.diff?r1=1.27&r2=1.28&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_pageout.c.diff?r1=1.34&r2=1.35&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vnode_pager.c.diff?r1=1.41&r2=1.42&f=u
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]