[SSI] openssi/kernel/cluster/ssi/vproc dvp_debug.c, 1.11, 1.12 dvp_init.c, 1.11, 1.12 dvp_misc.c, 1.13, 1.14 dvp_pvpsops.c, 1.16, 1.17 dvp_vpops.c, 1.38, 1.39 nd_setup.c, 1.8, 1.9 nd_slave.c, 1.9, 1.10 nsc_initproc.c, 1.21, 1.22 procfs_subr.c, 1.12, 1.13 rproc_svr_vproc.c, 1.14, 1.15 vp_init.c, 1.7, 1.8 vp_subr.c, 1.16, 1.17
Roger Tsang <[email protected]>
| Newsgroups | gmane.linux.cluster.ssic.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc
In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv8304/cluster/ssi/vproc
Modified Files:
Tag: OPENSSI-FC
dvp_debug.c dvp_init.c dvp_misc.c dvp_pvpsops.c dvp_vpops.c
nd_setup.c nd_slave.c nsc_initproc.c procfs_subr.c
rproc_svr_vproc.c vp_init.c vp_subr.c
Log Message:
IPC:
- Fix uninitialized list_head in rmtunix_socket_info structure; SSI-1.9.0 bug. (#ifdef IPC_STALE_RMTUNIX_CACHE_FIX)
VPROC:
- Remove deprecated RW semaphore implementation of vproc list lock.
- Regression:
- semi-deadlock in vproc_slave_carelist_create(); might sleep
while holding vproc list lock. (#ifdef VPROC_LIST_SPINLOCK)
cluster/ssi/vproc/dvp_debug.c | 10 -------
cluster/ssi/vproc/dvp_init.c | 31 ++---------------------
cluster/ssi/vproc/dvp_misc.c | 24 +++---------------
cluster/ssi/vproc/dvp_pvpsops.c | 28 ++++-----------------
cluster/ssi/vproc/dvp_vpops.c | 8 ------
cluster/ssi/vproc/nd_setup.c | 24 +++---------------
cluster/ssi/vproc/nd_slave.c | 35 +++++++++++++++++++-------
cluster/ssi/vproc/nsc_initproc.c | 7 -----
cluster/ssi/vproc/procfs_subr.c | 24 ++++++------------
cluster/ssi/vproc/rproc_svr_vproc.c | 8 ------
cluster/ssi/vproc/vp_init.c | 14 ++--------
cluster/ssi/vproc/vp_subr.c | 48 ++++++++++--------------------------
include/cluster/ssi/ipc/unixnm.h | 8 ++++--
include/linux/vproc.h | 19 ++++++--------
14 files changed, 84 insertions(+), 204 deletions(-)
Index: vp_subr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/vp_subr.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- vp_subr.c 8 Feb 2009 02:44:43 -0000 1.16
+++ vp_subr.c 9 Feb 2009 05:00:36 -0000 1.17
@@ -44,10 +44,8 @@
int found = 0;
#ifndef VPROC_RCU_LIST
- if (needlock) {
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
- }
- SSI_ASSERT_LOCKED_SHR_RW_LOCK(&vproc_list_lock);
+ if (needlock)
+ VPROC_LIST_LOCK();
list_for_each_entry(v, &vproc_hash[VPROCPIDHASH(pid)], vp_list) {
#else
@@ -70,7 +68,7 @@
!VPROC_HOLD_AND_CHECK(v, "vprocptr"))
found = 0;
#endif
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
+ VPROC_LIST_UNLOCK();
}
#else /* VPROC_RCU_LIST */
#ifdef VPROC_RELEASE__REFCNT_RACE_FIX
@@ -139,9 +137,7 @@
v = kzmalloc_nofail(size);
#endif
v->vp_data = ((char *)v) + sizeof(struct vproc);
-#if !defined(ATOMIC_VPROC_REFCNT) || defined(VPROC_RCU_LIST)
VPROC_REFCNT_LOCK_INIT(v);
-#endif
#ifdef VPROC_DEBUG
nvproc++;
@@ -166,8 +162,11 @@
INIT_LIST_HEAD(&v->vp_list);
#ifdef VPROC_RCU_LIST
INIT_RCU_HEAD(&v->vp_rcu);
+#ifdef VPROC_LIST_SPINLOCK
+ INIT_LIST_HEAD(&v->vp_carelist);
#endif
#endif
+#endif /* VPROC_HASH_LIST */
#ifdef NSCVPD_DEBUG
PVP(v)->pvp_lasthold = TICKS();
#endif
@@ -251,7 +250,7 @@
#else
might_sleep_if(atomic_read(&v->vp_ref_cnt) == 1);
#ifdef VPROC_LIST_SPINLOCK
- if (!atomic_dec_and_lock(&v->vp_ref_cnt, &(&vproc_list_lock)->sp_lock))
+ if (!atomic_dec_and_lock(&v->vp_ref_cnt, &vproc_list_lock))
#else
if (!atomic_dec_and_test(&v->vp_ref_cnt))
#endif
@@ -267,9 +266,7 @@
locked = 1;
}
#else
-#ifndef VPROC_RCU_LIST
- LOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
#ifndef VPROC_LIST_SPINLOCK
VPROC_LIST_LOCK();
#endif
@@ -289,8 +286,6 @@
#endif /* VPROC_RELEASE__REFCNT_RACE_FIX */
#ifdef ATOMIC_VPROC_REFCNT
-#ifdef VPROC_LIST_SPINLOCK
-#ifdef VPROC_RCU_LIST
VPROC_REFCNT_LOCK(v);
if (READ_ATOMIC_INT(&v->vp_ref_cnt)) {
VPROC_REFCNT_UNLOCK(v);
@@ -298,17 +293,8 @@
}
v->vp_magic = 0;
VPROC_REFCNT_UNLOCK(v);
-#endif
- BUG_ON(READ_ATOMIC_INT(&v->vp_ref_cnt));
#else
/*
- * Reference count got bumped
- */
- if (READ_ATOMIC_INT(&v->vp_ref_cnt) > 0)
- goto out_unlock;
-#endif
-#else /* !ATOMIC_VPROC_REFCNT */
- /*
* Reference count got bumped; just
* do our decrement and return.
*/
@@ -321,7 +307,7 @@
v->vp_ref_cnt--;
SSI_ASSERT(v->vp_ref_cnt != -1);
VPROC_REFCNT_UNLOCK(v);
-#endif
+#endif /* !ATOMIC_VPROC_REFCNT */
/*
* Take the dead vproc out of the hash list
@@ -349,15 +335,9 @@
if (locked)
VPROC_LIST_UNLOCK();
#else
-#ifndef VPROC_RCU_LIST
- UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
-#ifdef VPROC_LIST_SPINLOCK
- spin_unlock(&(&vproc_list_lock)->sp_lock);
-#else
+#ifdef VPROC_RCU_LIST
VPROC_LIST_UNLOCK();
#endif
-#endif
#endif /* !VPROC_HASH_LIST */
/*
@@ -391,7 +371,6 @@
int check)
{
#ifdef VPROC_RELEASE__REFCNT_RACE_FIX
-#ifdef VPROC_RCU_LIST
if (check) {
VPROC_REFCNT_LOCK(v);
if (!VPROCPTR_VALID(v)) {
@@ -399,13 +378,14 @@
VPROC_REFCNT_UNLOCK(v);
return -ESRCH;
}
+#ifdef ATOMIC_VPROC_REFCNT
INCR_ATOMIC_INT(&v->vp_ref_cnt);
+#else
+ v->vp_ref_cnt++;
+#endif
VPROC_REFCNT_UNLOCK(v);
return (ESUCCESS);
}
-#else
-#error not yet implemented
-#endif
#endif /* VPROC_RELEASE__REFCNT_RACE_FIX */
BUG_ON(!VPROCPTR_VALID(v));
#ifndef ATOMIC_VPROC_REFCNT
Index: nd_setup.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/nd_setup.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- nd_setup.c 10 Oct 2008 08:10:32 -0000 1.8
+++ nd_setup.c 9 Feb 2009 05:00:36 -0000 1.9
@@ -413,12 +413,8 @@
struct vproc *vp;
int i;
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_lock();
-#endif
#else
VPROC_LIST_LOCK();
#endif
@@ -441,12 +437,8 @@
VPROC_UNLOCK_FLAG(vp, "vproc_setup_mark_origin_vprocs");
}
}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_unlock();
-#endif
#else
VPROC_LIST_UNLOCK();
#endif
@@ -477,12 +469,8 @@
* NOTE: We cannot call anything that acquires the vproc
* list lock inside this loop or in any code invoked.
*/
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
- VPROC_LIST_LOCK();
-#endif
for (i=0; i < vprochsz; i++) {
+ VPROC_LIST_LOCK();
#ifdef VPROC_HASH_LIST
#ifdef VPROC_RCU_LIST
list_for_each_entry_rcu(vp, &vproc_hash[i], vp_list) {
@@ -536,12 +524,8 @@
vcdp = vproc_caredata_alloc(1);
}
}
+ VPROC_LIST_UNLOCK();
}
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
- VPROC_LIST_UNLOCK();
-#endif
vproc_caredata_dealloc(vcdp, 1);
Index: dvp_misc.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_misc.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- dvp_misc.c 10 Oct 2008 08:10:32 -0000 1.13
+++ dvp_misc.c 9 Feb 2009 05:00:36 -0000 1.14
@@ -430,12 +430,8 @@
#endif /* !VPROC_HOLD_ZERO_GET_TASK */
#endif
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_lock();
-#endif
#else
VPROC_LIST_LOCK();
#endif
@@ -454,12 +450,8 @@
count++;
}
}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_unlock();
-#endif
#else
VPROC_LIST_UNLOCK();
#endif
@@ -470,12 +462,8 @@
return;
}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_lock();
-#endif
#else
VPROC_LIST_LOCK();
#endif
@@ -505,12 +493,8 @@
if (ind >= count)
break;
}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_unlock();
-#endif
#else
VPROC_LIST_UNLOCK();
#endif
Index: nd_slave.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/nd_slave.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- nd_slave.c 10 Oct 2008 08:10:32 -0000 1.9
+++ nd_slave.c 9 Feb 2009 05:00:36 -0000 1.10
@@ -377,7 +377,12 @@
int trans_type)
{
vproc_caredata_t *vcdp;
+#ifdef VPROC_LIST_SPINLOCK
+ struct vproc *vp, *n;
+ LIST_HEAD(slave_carelist);
+#else
struct vproc *vp;
+#endif
struct pvproc *pvp;
int i;
@@ -385,15 +390,19 @@
* NOTE: We cannot call anything that acquires the vproc
* list lock inside this loop or in any code invoked.
*/
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
+ for (i = 0; i < vprochsz; i++) {
+#ifdef VPROC_LIST_SPINLOCK
+ rcu_read_lock();
#else
- VPROC_LIST_LOCK();
+ VPROC_LIST_LOCK();
#endif
- for (i = 0; i < vprochsz; i++) {
#ifdef VPROC_HASH_LIST
#ifdef VPROC_RCU_LIST
list_for_each_entry_rcu(vp, &vproc_hash[i], vp_list) {
+#ifdef VPROC_LIST_SPINLOCK
+ if (!VPROC_HOLD_AND_CHECK(vp, "vproc_slave_carelist_create"))
+ continue;
+#endif
#else
list_for_each_entry(vp, &vproc_hash[i], vp_list) {
#endif
@@ -408,6 +417,14 @@
*/
if (VPROCNODE(vp->vp_pid) == 0)
continue;
+#ifdef VPROC_LIST_SPINLOCK
+ list_add(&vp->vp_carelist, &slave_carelist);
+ }
+ rcu_read_unlock();
+
+ list_for_each_entry_safe(vp, n, &slave_carelist, vp_carelist) {
+ list_del_init(&vp->vp_carelist);
+#endif
VPROC_LOCK_ND_LIST_EXCL(vp, "vproc_slave_carelist_create");
pvp = PVP(vp);
@@ -440,14 +457,14 @@
}
VPROC_UNLOCK_ND_LIST_EXCL(vp, "vproc_slave_carelist_create");
+#ifdef VPROC_LIST_SPINLOCK
+ VPROC_RELE(vp, "vproc_slave_carelist_create");
}
- }
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
#else
- VPROC_LIST_UNLOCK();
+ }
+ VPROC_LIST_UNLOCK();
#endif
-
+ }
}
Index: dvp_pvpsops.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_pvpsops.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- dvp_pvpsops.c 3 Feb 2009 06:18:13 -0000 1.16
+++ dvp_pvpsops.c 9 Feb 2009 05:00:36 -0000 1.17
@@ -962,15 +962,11 @@
* is somewhat better to count from the back to see new
* processes that have been added since the last iteration.
*/
-#ifndef VPROC_HASH_LIST
+#ifdef VPROC_RCU_LIST
+ rcu_read_lock();
+#else
/* We still will tend to do worse than the base. */
VPROC_LIST_LOCK();
-#else
-#ifndef VPROC_RCU_LIST
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
- rcu_read_lock();
-#endif
#endif
for (i = *hash_index; i < vprochsz; i++) {
#ifdef VPROC_HASH_LIST
@@ -1005,12 +1001,8 @@
if (count >= *pids_size)
break;
}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_unlock();
-#endif
#else
VPROC_LIST_UNLOCK();
#endif
@@ -1674,12 +1666,8 @@
if (*pidlist == NULL)
*pidlist = kmalloc_nofail(pidlistsz);
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_lock();
-#endif
#else
VPROC_LIST_LOCK();
#endif
@@ -1705,12 +1693,8 @@
count++;
}
}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
rcu_read_unlock();
-#endif
#else
VPROC_LIST_UNLOCK();
#endif
Index: rproc_svr_vproc.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_svr_vproc.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- rproc_svr_vproc.c 3 Feb 2009 06:18:13 -0000 1.14
+++ rproc_svr_vproc.c 9 Feb 2009 05:00:36 -0000 1.15
@@ -109,11 +109,7 @@
/* put the vproc on the vproc hash chain */
VPROC_LOCK_EXCL(vc,"rfork_server(child)");
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
- LOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
VPROC_LIST_LOCK();
-#endif
#ifdef VPROC_HASH_LIST
#ifdef VPROC_RCU_LIST
list_add_rcu(&vc->vp_list, &vproc_hash[VPROCPIDHASH(vc->vp_pid)]);
@@ -129,11 +125,7 @@
v->vp_hashbwd = vc;
#endif
VPROC_HOLD(vc, "rfork_server(active)");
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
- UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
VPROC_LIST_UNLOCK();
-#endif
VPROC_HOLD(vc, "rfork_server(origin)");
/*
Index: vp_init.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/vp_init.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- vp_init.c 3 Feb 2009 06:18:13 -0000 1.7
+++ vp_init.c 9 Feb 2009 05:00:36 -0000 1.8
@@ -50,10 +50,8 @@
int vprochsz = VPROC_NHASH;
#endif
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-RW_LOCK_T vproc_list_lock; /* Lock for free list and hash table */
-#elif defined(VPROC_LIST_SPINLOCK)
-SPIN_LOCK_T vproc_list_lock; /* Lock for free list and hash table */
+#ifdef VPROC_LIST_SPINLOCK
+DEFINE_SPINLOCK(vproc_list_lock); /* Lock for free list and hash table */
#else
LOCK_T vproc_list_lock; /* Lock for free list and hash table */
#endif
@@ -100,17 +98,11 @@
for (i=0; i < vprochsz; i++)
INIT_LIST_HEAD(&vproc_hash[i]);
-
-#ifndef VPROC_RCU_LIST
- INIT_RW_LOCK(&vproc_list_lock);
-#else
- VPROC_LIST_LOCK_INIT();
-#endif
#else
vproc_hash = kzmalloc_nofail(vprochsz * sizeof(struct vproc *));
+#endif
VPROC_LIST_LOCK_INIT();
-#endif
#ifdef VPROC_KMEM_CACHE
vproc_cache_init();
#endif
Index: procfs_subr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/procfs_subr.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- procfs_subr.c 10 Oct 2008 08:10:32 -0000 1.12
+++ procfs_subr.c 9 Feb 2009 05:00:36 -0000 1.13
@@ -191,16 +191,12 @@
if (!loadlevel_on)
return;
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
- rcu_read_lock();
-#endif
+ for (i = 0; i < vprochsz; i++) {
+#ifdef VPROC_RCU_LIST
+ rcu_read_lock();
#else
- VPROC_LIST_LOCK();
+ VPROC_LIST_LOCK();
#endif
- for (i = 0; i < vprochsz; i++) {
#ifdef VPROC_HASH_LIST
#if 0
#ifdef CONFUSED__SSI_RESET_LOADLEVEL_TGID
@@ -242,16 +238,12 @@
#ifdef VPROC_HASH_LIST
}
#endif
- }
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
- rcu_read_unlock();
-#endif
+#ifdef VPROC_RCU_LIST
+ rcu_read_unlock();
#else
- VPROC_LIST_UNLOCK();
+ VPROC_LIST_UNLOCK();
#endif
+ }
}
#endif
Index: dvp_debug.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_debug.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- dvp_debug.c 10 Oct 2008 08:10:32 -0000 1.11
+++ dvp_debug.c 9 Feb 2009 05:00:36 -0000 1.12
@@ -172,12 +172,9 @@
again:
#else
again:
-#ifdef VPROC_RCU_LIST
/* SSI_XXX: Not yet implemented */
BUG();
#endif
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#endif
for (i=0; i < vprochsz; i++) {
#ifdef VPROC_HASH_LIST
list_for_each_entry(vp, &vproc_hash[i], vp_list) {
@@ -245,9 +242,6 @@
#endif
}
}
-#ifdef VPROC_HASH_LIST
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#endif
VPROC_RELE(vp,"tnc_vpd");
goto again;
}
@@ -265,9 +259,7 @@
VPROC_UNLOCK_FLAG(vp, "tncvpd_scan");
}
}
-#ifdef VPROC_HASH_LIST
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifndef VPROC_HASH_LIST
VPROC_LIST_UNLOCK();
#endif
}
Index: nsc_initproc.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/nsc_initproc.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- nsc_initproc.c 3 Feb 2009 06:18:13 -0000 1.21
+++ nsc_initproc.c 9 Feb 2009 05:00:36 -0000 1.22
@@ -195,21 +195,16 @@
/* put the vproc on the vproc hash chain */
#ifdef VPROC_HASH_LIST
+ VPROC_LIST_LOCK();
#ifndef VPROC_RCU_LIST
- LOCK_EXCL_RW_LOCK(&vproc_list_lock);
list_add(&v->vp_list, &vproc_hash[VPROCPIDHASH(v->vp_pid)]);
#else
- VPROC_LIST_LOCK();
list_add_rcu(&v->vp_list, &vproc_hash[VPROCPIDHASH(v->vp_pid)]);
#endif
#ifdef VPROC_RELEASE__REFCNT_RACE_FIX
VPROC_HOLD(v, "initialize_init_vproc");
#endif
-#ifndef VPROC_RCU_LIST
- UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
VPROC_LIST_UNLOCK();
-#endif
#else
w = vproc_hash[hashidx = VPROCPIDHASH(v->vp_pid)];
v->vp_hashbwd = NULL;
Index: dvp_vpops.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_vpops.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- dvp_vpops.c 3 Feb 2009 06:18:13 -0000 1.38
+++ dvp_vpops.c 9 Feb 2009 05:00:36 -0000 1.39
@@ -360,11 +360,7 @@
/* put the vproc on the vproc hash chain */
vc->vp_pid = child_pid;
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
- LOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
VPROC_LIST_LOCK();
-#endif
#ifdef VPROC_HASH_LIST
#ifdef VPROC_RCU_LIST
list_add_rcu(&vc->vp_list, &vproc_hash[VPROCPIDHASH(child_pid)]);
@@ -380,11 +376,7 @@
w->vp_hashbwd = vc;
#endif
VPROC_HOLD(vc, "vpop_fork(origin)");
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
- UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
VPROC_LIST_UNLOCK();
-#endif
VPROC_HOLD(vc, "vpop_fork(active)");
VPROC_LOCK_FLAG(vc, "vpop_fork");
Index: dvp_init.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_init.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- dvp_init.c 10 Oct 2008 08:10:32 -0000 1.11
+++ dvp_init.c 9 Feb 2009 05:00:36 -0000 1.12
@@ -160,9 +160,7 @@
#ifndef VPROC_RCU_LIST
if (!(flags & LVP_NOLOCK)) {
-#ifdef VPROC_HASH_LIST
- LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifndef VPROC_HASH_LIST
VPROC_LIST_LOCK();
#endif
}
@@ -175,13 +173,6 @@
* checking.
*/
if (vp == NULL){
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- if (!(flags & LVP_NOLOCK)) {
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
- }
-#endif
-#endif
/*
* If this is the origin node of the pid, we just return
* 0 because the origin should always retain a vproc
@@ -214,15 +205,6 @@
* Make sure here that during the last vproc_alloc()
* call, nobody has created a new vproc for this pid.
*/
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
- if (!(flags & LVP_NOLOCK)) {
- LOCK_EXCL_RW_LOCK(&vproc_list_lock);
- exlock = 1;
- }
-#endif
-#endif
-
vp = VPROCPTR_NOLOCK(pid);
if (vp == NULL) {
vp = nvp;
@@ -262,17 +244,10 @@
#ifndef VPROC_RELEASE__REFCNT_RACE_FIX
VPROC_HOLD(vp, str);
#endif
- if (!(flags & LVP_NOLOCK)) {
-#ifdef VPROC_HASH_LIST
- if (!exlock) {
- UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
- } else {
- UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
- }
-#else
+ if (!(flags & LVP_NOLOCK))
+#ifndef VPROC_HASH_LIST
VPROC_LIST_UNLOCK();
#endif
- }
#endif /* !VPROC_RCU_LIST */
#ifdef VPROC_DEBUG
vproc_db4(vp, "LOCATE HOLD", str, 0);
------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com