PERFORCE change 126350 for review

Kip Macy kmacy at FreeBSD.org
Wed Sep 12 18:34:01 PDT 2007


http://perforce.freebsd.org/chv.cgi?CH=126350

Change 126350 by kmacy at kmacy_home:ethng on 2007/09/13 01:32:58

	update rnh locking primitives to account for the fact 
	that the lock can be recursed

Affected files ...

.. //depot/projects/ethng/src/sys/net/radix.h#4 edit

Differences ...

==== //depot/projects/ethng/src/sys/net/radix.h#4 (text+ko) ====

@@ -145,13 +145,26 @@
 #define Free(p) free((caddr_t)p, M_RTABLE);
 
 #define	RADIX_NODE_HEAD_LOCK_INIT(rnh)	\
-rw_init(&(rnh)->rnh_lock, "radix node head")
+	rw_init_flags(&(rnh)->rnh_lock, "radix node head", RW_RECURSE)
 #define	RADIX_NODE_HEAD_LOCK(rnh)	rw_wlock(&(rnh)->rnh_lock)
 #define	RADIX_NODE_HEAD_UNLOCK(rnh)	rw_wunlock(&(rnh)->rnh_lock)
-#define	RADIX_NODE_HEAD_LOCK_SHARED(rnh)	rw_rlock(&(rnh)->rnh_lock)
-#define	RADIX_NODE_HEAD_UNLOCK_SHARED(rnh)	rw_runlock(&(rnh)->rnh_lock)
+#define	RADIX_NODE_HEAD_LOCK_DOWNGRADE(rnh)	rw_downgrade(&(rnh)->rnh_lock)
+#define	RADIX_NODE_HEAD_LOCK_TRY_UPGRADE(rnh)	rw_try_upgrade(&(rnh)->rnh_lock)
+#define	RADIX_NODE_HEAD_LOCK_SHARED(rnh)			      \
+	do {							      \
+		if (!rw_wowned(&(rnh)->rnh_lock))		      \
+			rw_rlock(&(rnh)->rnh_lock);		      \
+	} while (0)
+
+#define	RADIX_NODE_HEAD_UNLOCK_SHARED(rnh)			      \
+	do {							      \
+		if (!rw_wowned(&(rnh)->rnh_lock))		      \
+			rw_runlock(&(rnh)->rnh_lock);		      \
+	} while (0)
+
 #define	RADIX_NODE_HEAD_DESTROY(rnh)	rw_destroy(&(rnh)->rnh_lock)
 #define	RADIX_NODE_HEAD_LOCK_ASSERT(rnh) rw_assert(&(rnh)->rnh_lock, RA_LOCKED)
+#define	RADIX_NODE_HEAD_UNLOCK_ASSERT(rnh) rw_assert(&(rnh)->rnh_lock, RA_UNLOCKED)
 #endif /* _KERNEL */
 
 void	 rn_init(void);


More information about the p4-projects mailing list