git: kernel - pc64 - Fix pv_free() race and add assertions

Matthew Dillon dillon at crater.dragonflybsd.org
Sun Oct 6 16:42:06 PDT 2013


commit 8e2efb11e5cbf92f0ed06258cbd1f6bfc684e5c8
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sun Oct 6 16:34:53 2013 -0700

    kernel - pc64 - Fix pv_free() race and add assertions
    
    * Continued work trying to fix the bad *ptep ... panics.  Previous commits
      did not do the job.  It is still unknown whether this one completely fixes
      the panic.
    
    * The pmap pv_entry API was allowing pv_entry's to be retained with 0 refs
      and then doing a separate check for pv_pmap == NULL to determine if the
      pv_entry could be freed or not.  This resulted in a SMP race where multiple
      threads could pv_free() the same pv_entry.
    
    * Change the code to supply an addition ref for pv_pmap != NULL and use the
      1->0 transition to deterministically conditionalize the pv_free().
    
    * Change the shortcuts in pv_hold_try() and pv_drop() to use the new
      assumptions.
    
    * Add some additional assertions and a generation count to try to check bugs.

Summary of changes:
 sys/platform/pc64/include/pmap.h |   2 +-
 sys/platform/pc64/x86_64/pmap.c  | 263 ++++++++++++++++++++++++++++++---------
 sys/vm/vm_fault.c                |   1 +
 3 files changed, 204 insertions(+), 62 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/8e2efb11e5cbf92f0ed06258cbd1f6bfc684e5c8


-- 
DragonFly BSD source repository



More information about the Commits mailing list