DragonFly BSD
DragonFly commits List (threaded) for 2012-08
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

git: kernel - Fix pmap_remove() issue.


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 23 Aug 2012 20:55:40 -0700 (PDT)

commit 554cf9ac8ff4af8eedd0f5896dfa5d2e5f61038d
Author: Matthew Dillon <dillon@apollo.backplane.com>
Date:   Thu Aug 23 20:44:53 2012 -0700

    kernel - Fix pmap_remove() issue.
    
    * When the inner loop of pmap_remove() broke out due to pmap_remove_pte()
      blocking it 'jumped' the sindex to pdnxt, thus any remaining pages in
      that page table page would get skipped.
    
    * pmap_remove_pte() and friends used to return non-zero if they 'blocked'.
      Unfortunately they could actually block whether they returned 0 or non-zero,
      causing the problem.  Remove the check entirely.
    
    * Adjust misc functions which we no longer need the return value for.
    
    * I don't know if this had anything to do with the wire_count panic.
      The failure mode should have been caught by numerous other assertions
      in the code but wasn't.  get_ptbase() relies on a test of pmap->pm_cached
      to determine if a page directory page mapping changes so it should not
      have been possible for it to continue the loop and access a stale ptep.
    
      If it were possible it might account for a wire_count panic later on but
      it doesn't seem like it should be possible.

Summary of changes:
 sys/platform/pc32/i386/pmap.c |   94 +++++++++++++++++++---------------------
 1 files changed, 45 insertions(+), 49 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/554cf9ac8ff4af8eedd0f5896dfa5d2e5f61038d


-- 
DragonFly BSD source repository



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]