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