git: kernel - Rewrite lockmgr / struct lock

Matthew Dillon dillon at crater.dragonflybsd.org
Mon Oct 21 11:23:43 PDT 2013


commit 05eacabc4af23ec82366095309047efe01dc1d6b
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Mon Oct 21 10:59:40 2013 -0700

    kernel - Rewrite lockmgr / struct lock
    
    * Rewrite lockmgr() to remove the exclusive spinlock used internally
      to guard operations.
    
    * Retain existing API and operational semantics.  This is primarily:
    
      - Acquiring a LK_SHARED lock on a lock the caller already owns
        exclusively simply bumps the count and retains the exclusive
        nature of the lock.
    
      - Exclusive requests and upgrade requests have priority over shared
        locks even if the lock is currently held shared, unless the thread
        is flagged for deadlock treatment.
    
      - Upgrade requests are capable of guaranteeing the upgrade (as before).
        This could be further enhanced because we now have the last release
        transfer the exclusive lock to the upgrade requestor, but the original
        API didn't have a function for this so neither do we.  The more
        primitive detection method is used (aka LK_SLEEPFAIL and/or
        LK_EXCLUPGRADE).
    
    * Reduce multiple tracking fields into one field so we can use
      atomic_cmpset_int().
    
    * Hot-path common operations.  A single atomic_cmpset_int() gets us
      through.

Summary of changes:
 sys/kern/kern_lock.c        | 873 +++++++++++++++++++++++---------------------
 sys/kern/vfs_lock.c         |   2 +-
 sys/kern/vfs_subr.c         |   2 +-
 sys/netproto/ncp/ncp_conn.c |   2 +-
 sys/sys/lock.h              |  46 +--
 sys/vm/swap_pager.c         |   6 +-
 6 files changed, 477 insertions(+), 454 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/05eacabc4af23ec82366095309047efe01dc1d6b


-- 
DragonFly BSD source repository



More information about the Commits mailing list