[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® 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