[SSI] openssi/kernel/cluster/ssi/util rmtfb.c,1.26,1.27

Roger Tsang <[email protected]> Fri, 05 Mar 2010 05:48:20 +0000
Newsgroups gmane.linux.cluster.ssic.cvs
Message-ID <[email protected]>
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/util
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv31020/kernel/cluster/ssi/util

Modified Files:
      Tag: OPENSSI-FC
	rmtfb.c 
Log Message:
RMTFB:
- Remove rfb_lock spinlock in rmtfb_cmn struct. Use atomic_test_and_add().

 cluster/ssi/util/rmtfb.c         |   37 +++----------------------------
 include/cluster/ssi/util/rmtfb.h |   12 +++-------
 2 files changed, 8 insertions(+), 41 deletions(-)


Index: rmtfb.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/util/rmtfb.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- rmtfb.c	5 Mar 2010 05:44:39 -0000	1.26
+++ rmtfb.c	5 Mar 2010 05:48:18 -0000	1.27
@@ -597,14 +597,9 @@
 #ifdef RMTFB_HASH_LOCKLESS
 		rcu_read_lock();
 		list_for_each_entry_rcu(cmn, head, rfb_hash) {
-			spin_lock(&cmn->rfb_lock);
-			if (!atomic_read(&cmn->rfb_ref_cnt)) {
-				spin_unlock(&cmn->rfb_lock);
+			if (!atomic_test_and_add(1, &cmn->rfb_ref_cnt))
 				continue;
-			}
-			atomic_inc(&cmn->rfb_ref_cnt);
-			spin_unlock(&cmn->rfb_lock);
-			/* Caller to decrement rfb_ref_cnt */
+			/* do_f() to decrement rfb_ref_cnt */
 			do_f(cmn, arg);
 		}
 		rcu_read_unlock();
@@ -702,17 +697,10 @@
 
 	rcu_read_lock();
 	list_for_each_entry_rcu(cmn, head, rfb_hash) {
-		spin_lock(&cmn->rfb_lock);
-		if (!atomic_read(&cmn->rfb_ref_cnt)) {
-			spin_unlock(&cmn->rfb_lock);
+		if (!test(cmn, data))
 			continue;
-		}
-		if (!test(cmn, data)) {
-			spin_unlock(&cmn->rfb_lock);
+		if (!atomic_test_and_add(1, &cmn->rfb_ref_cnt))
 			continue;
-		}
-		atomic_inc(&cmn->rfb_ref_cnt);
-		spin_unlock(&cmn->rfb_lock);
 		found = 1;
 		break;
 	}
@@ -896,13 +884,6 @@
 #ifdef RMTFB_HASH_LOCKLESS
 	if (!atomic_dec_and_lock(&rfb->rfb_refcnt, &rmtfb_svrtbl_lock))
 		return;
-	spin_lock(&rfb->rfb_rlock);
-	if (atomic_read(&rfb->rfb_refcnt)) {
-		spin_unlock(&rfb->rfb_rlock);
-		spin_unlock(&rmtfb_svrtbl_lock);
-		return;
-	}
-	spin_unlock(&rfb->rfb_rlock);
 	list_del_rcu(&rfb->common.rfb_hash);
 	spin_unlock(&rmtfb_svrtbl_lock);
 #else
@@ -1114,13 +1095,6 @@
 #ifdef RMTFB_HASH_LOCKLESS
 	if (!atomic_dec_and_lock(&rfb->rfb_refcnt, &rmtfb_clitbl_lock))
 		return;
-	spin_lock(&rfb->rfb_rlock);
-	if (atomic_read(&rfb->rfb_refcnt)) {
-		spin_unlock(&rfb->rfb_rlock);
-		spin_unlock(&rmtfb_clitbl_lock);
-		return;
-	}
-	spin_unlock(&rfb->rfb_rlock);
 	list_del_rcu(&rfb->common.rfb_hash);
 	spin_unlock(&rmtfb_clitbl_lock);
 #else
@@ -1150,9 +1124,6 @@
 	if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
 	    SLAB_CTOR_CONSTRUCTOR) {
 		INIT_LIST_HEAD(&cmn->rfb_hash);
-#ifdef RMTFB_HASH_LOCKLESS
-		spin_lock_init(&cmn->rfb_lock);
-#endif
 		INIT_RCU_HEAD(&cmn->rfb_rcu);
 	}
 }


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev