git: kernel - vm_page BUSY handling, change vm_page_cache() API, maybe fix seg-fault
Matthew Dillon
dillon at crater.dragonflybsd.org
Sun Dec 19 21:59:08 PST 2010
commit a491077eece340924fa7f34a248de64be5888c1f
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Sun Dec 19 21:52:36 2010 -0800
kernel - vm_page BUSY handling, change vm_page_cache() API, maybe fix seg-fault
* All vm_page_deactivate() calls now operate with the caller holding
the page PG_BUSY or the page known not to be busy. Reorder several
cases where a vm_page is unbusied prior to calling deactivate.
* vm_page_cache() now expected the vm_page to be PG_BUSY and will cache
the page and clear the bit.
* Fix a race in vm_pageout_page_free() which calls vm_object_reference()
with an unbusied vm_page, then proceeds to busy and free the page.
The problem is that vm_object_reference() can block on vmobj_token.
This may fix the x86-64 seg-fault issue. Or it may not (throws up hands).
* Remove incorrect KKASSERT which was causing bogus panics.
Summary of changes:
sys/kern/kern_slaballoc.c | 2 +-
sys/kern/uipc_syscalls.c | 4 +++-
sys/kern/vfs_bio.c | 2 +-
sys/platform/pc32/i386/pmap.c | 2 +-
sys/platform/pc64/x86_64/pmap.c | 2 +-
sys/platform/vkernel/platform/pmap.c | 2 +-
sys/platform/vkernel64/platform/pmap.c | 2 +-
sys/vm/swap_pager.c | 2 +-
sys/vm/vm_contig.c | 5 ++++-
sys/vm/vm_fault.c | 11 ++++++++---
sys/vm/vm_object.c | 2 ++
sys/vm/vm_page.c | 21 +++++++++++++++------
sys/vm/vm_pageout.c | 15 +++++++++------
13 files changed, 48 insertions(+), 24 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/a491077eece340924fa7f34a248de64be5888c1f
--
DragonFly BSD source repository
More information about the Commits
mailing list