cvs commit: src/sys/platform/pc32/i386 pmap.c src/sys/platform/vkernel/include globaldata.h src/sys/platform/vkernel/platform globaldata.c pmap.c src/sys/platform/vkernel/i386 exception.c

Matthew Dillon dillon at crater.dragonflybsd.org
Mon Apr 28 00:09:35 PDT 2008


dillon      2008/04/28 00:05:09 PDT

DragonFly src repository

  Modified files:
    sys/platform/pc32/i386 pmap.c 
    sys/platform/vkernel/include globaldata.h 
    sys/platform/vkernel/platform globaldata.c pmap.c 
    sys/platform/vkernel/i386 exception.c 
  Log:
  Fix some pmap races in pc32 and vkernel, and other vkernel issues.
  
  * Fix a case where a vm_page_sleep_busy() loop can cause a page's hold_count
    to go stale, potentially resulting in a double action being taken on
    the page.  This can only occur during very heavy paging loads.  Fix
    the issue by doing the vm_page_unhold() after the blocking condition
    instead of before.  This fix applies to both the vkernel and pc32.
  
  * The pmap_allocpte() call in in pmap_copy() can block, causing the cached
    page directory page to become stale.  Detect the case and take appropriate
    action.  This fix applies to both the vkernel and pc32.
  
  * Add numerous KKASSERT()s to assert that the pmap tracking counters are
    correct, to try to detect races in the future.
  
  * Fix a bug in the vkernel's signal handling. We have to catch SIGBUS as
    well as SIGSEGV.  We also have to tell the signal handler to not
    block the signal on entry or a page fault in the vkernel itself can
    cause the signal to be masked, the vkernel may then block and switch
    threads, and another page fault in the vkernel itself would wind up
    being masked.  The result is an endless loop in the vkernel retrying the
    same faulting instruction forever (until you kill the vkernel).
  
  Revision  Changes    Path
  1.83      +72 -30    src/sys/platform/pc32/i386/pmap.c
  1.8       +4 -0      src/sys/platform/vkernel/include/globaldata.h
  1.5       +6 -0      src/sys/platform/vkernel/platform/globaldata.c
  1.28      +131 -49   src/sys/platform/vkernel/platform/pmap.c
  1.11      +2 -1      src/sys/platform/vkernel/i386/exception.c


http://www.dragonflybsd.org/cvsweb/src/sys/platform/pc32/i386/pmap.c.diff?r1=1.82&r2=1.83&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/vkernel/include/globaldata.h.diff?r1=1.7&r2=1.8&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/vkernel/platform/globaldata.c.diff?r1=1.4&r2=1.5&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/vkernel/platform/pmap.c.diff?r1=1.27&r2=1.28&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/vkernel/i386/exception.c.diff?r1=1.10&r2=1.11&f=u





More information about the Commits mailing list