[SSI] openssi/kernel/cluster/ssi/util load_level.c,1.24,1.25
Roger Tsang <[email protected]>
| Newsgroups | gmane.linux.cluster.ssic.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/util
In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv32011/kernel/cluster/ssi/util
Modified Files:
Tag: OPENSSI-FC
load_level.c
Log Message:
MOSIX:
- Fix acquiring loadinfo_lock without disabling bottom half. Actually in OpenSSI
we don't need to disable bottom half for loadinfo_lock, but we are doing this f
or compatiblity with openMosix code. Eventually we should clean this up for Open
SSI.
- Fix mosix_task->pages_i_bring race.
- Comment unused code.
MOSIX (#ifdef SSI_BALANCE_MEMORY):
- Fix deadlock bug nesting task_lock() in write_lock_irq(&tasklist_lock).
- Remove inappropriate task_lock() for mm_struct->last_memsort, used, swapped.
- New mm_struct->memsort_lock spinlock replaces write_lock_irq(&tasklist_lock);
protects mm_struct->last_memsort, used, swapped.
VPROC:
- New separate spinlock for pvp_comm_de, pvp_comm_mnt deprecates task_lock(). (#
ifdef VPROC_LOCK_PVP_COMM)
Index: load_level.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/util/load_level.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- load_level.c 27 Oct 2009 03:18:29 -0000 1.24
+++ load_level.c 17 Nov 2009 06:09:02 -0000 1.25
@@ -305,7 +305,7 @@
initialize_loadinfo(clusternode_t node, int cpus, unsigned long cpupwr)
{
#ifdef REXEC_LOADTABLE_RACE_FIX
- write_lock(&loadinfo_lock);
+ write_lock_bh(&loadinfo_lock);
#endif
if (this_node == clms_master_node) {
loadinfo[node].node = node;
@@ -314,7 +314,7 @@
if (!cpus || !cpupwr) {
#ifdef REXEC_LOADTABLE_RACE_FIX
- write_unlock(&loadinfo_lock);
+ write_unlock_bh(&loadinfo_lock);
#endif
return;
}
@@ -331,7 +331,7 @@
#endif
#endif
#ifdef REXEC_LOADTABLE_RACE_FIX
- write_unlock(&loadinfo_lock);
+ write_unlock_bh(&loadinfo_lock);
#endif
}
@@ -360,7 +360,7 @@
* for nodes except myself. Current node keeps its
* stats in the first entry [0].
*/
- write_lock(&loadinfo_lock);
+ write_lock_bh(&loadinfo_lock);
for(i=1; i <= NSC_MAX_NODE_VALUE; i++) {
if (i == this_node)
continue;
@@ -372,7 +372,7 @@
__FUNCTION__, i, loadinfo[i].ncpus, loadinfo[i].speed);
#endif
}
- write_unlock(&loadinfo_lock);
+ write_unlock_bh(&loadinfo_lock);
if (this_node != clms_master_node)
atomic_inc(&load_cnt);
im_ready = 1;
@@ -425,7 +425,7 @@
if (i == this_node)
continue;
#endif /* CONFIG_MOSIX_LL */
- write_lock(&loadinfo_lock);
+ write_lock_bh(&loadinfo_lock);
if (!loadinfo[i].node) {
loadinfo[i].node = i;
if (this_node != clms_master_node)
@@ -442,7 +442,7 @@
#else
loadinfo[i].load = larray[i].load;
#endif /* CONFIG_MOSIX_LL */
- write_unlock(&loadinfo_lock);
+ write_unlock_bh(&loadinfo_lock);
}
#else /* !REXEC_LOADTABLE_RACE_FIX */
n = 0;
@@ -511,7 +511,7 @@
return;
}
- write_lock(&loadinfo_lock);
+ write_lock_bh(&loadinfo_lock);
#endif
if (master_load_array[node].node == 0) {
master_load_array[node].node = node;
@@ -543,7 +543,7 @@
loadinfo[node].load = *load;
#endif /* !CONFIG_MOSIX_LL */
#ifdef REXEC_LOADTABLE_RACE_FIX
- write_unlock(&loadinfo_lock);
+ write_unlock_bh(&loadinfo_lock);
#endif
}
@@ -650,7 +650,7 @@
cleanup_loadinfo(clusternode_t node)
{
#ifdef REXEC_LOADTABLE_RACE_FIX
- write_lock(&loadinfo_lock);
+ write_lock_bh(&loadinfo_lock);
#endif
if (master_load_array[node].node != 0) {
#ifdef REXEC_LOADTABLE_RACE_FIX
@@ -687,13 +687,13 @@
#endif
}
#ifdef REXEC_LOADTABLE_RACE_FIX
- write_unlock(&loadinfo_lock);
+ write_unlock_bh(&loadinfo_lock);
#endif
}
/*
* Cannot sleep in following path...
- * tasklist_lock (choose, mchoose)
+ * READ tasklist_lock (choose, mchoose)
* (is_loadlevelable)
*/
int
@@ -739,7 +739,7 @@
* dcache_lock, d_lock
* sb_lock, s_umount [sem]
*/
-/* Called with VPROC LOCK or vproc movement or tasklist_lock */
+/* Called with VPROC LOCK or vproc movement or READ tasklist_lock */
int
vproc_is_loadlevelable(struct vproc *vp, char *fname)
{
@@ -779,17 +779,18 @@
/* Check to see if process has dentry filled in */
/* RT: Cannot use FLAG LOCK here.
* FLAG LOCK (pvpop_setsid, pvpop_setctty)
- * tasklist_lock (pproc_setctty)
+ * READ tasklist_lock (pproc_setctty)
*
- * tasklist_lock (choose, mchoose)
+ * READ tasklist_lock (choose, mchoose)
* (is_loadlevelable)
* FLAG LOCK (vproc_is_loadlevelable)
*/
/* VPROC_LOCK_FLAG(vp, "is_loadlevelable"); */
- task_lock(p);
+ VPROC_LOCK_COMM(vp, "is_loadlevelable");
+
dentry = dget(pvp->pvp_comm_de);
mnt = mntget(pvp->pvp_comm_mnt);
- task_unlock(p);
+ VPROC_UNLOCK_COMM(vp, "is_loadlevelable");
if (!dentry) {
mntput(mnt);
mnt = NULL;
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july