[SSI] openssi/kernel/cluster/ssi/mosixll freemem.c, 1.10, 1.11 service.c, 1.8, 1.9

Roger Tsang <[email protected]>
Newsgroups gmane.linux.cluster.ssic.cvs
Message-ID <[email protected]>
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/mosixll
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv1388/cluster/ssi/mosixll

Modified Files:
      Tag: OPENSSI-FC
	freemem.c service.c 
Log Message:
Multiple bug fixes. See ChangeLog.


Index: service.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/mosixll/service.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- service.c	18 Nov 2009 06:16:53 -0000	1.8
+++ service.c	17 Dec 2009 06:43:51 -0000	1.9
@@ -277,10 +277,11 @@
 	/* so now there is no need to lock mmap_sem! */
 #endif /* CONFIG_MOSIX_DIAG */
 	addr = 0;
-	loop:
+loop:
 	let_go = run_over_maxchunk;
 #ifdef SSI_BALANCE_MEMORY
 	down_read(&mm->mmap_sem);
+	spin_lock(&mm->page_table_lock);
 #endif
 	for(vma = mm->mmap ; vma != NULL ; vma = vma->vm_next)
 	if(addr < vma->vm_end)
@@ -295,9 +296,11 @@
 		if(let_go-- == 0)
 		{
 #ifdef SSI_BALANCE_MEMORY
+			spin_unlock(&mm->page_table_lock);
 			up_read(&mm->mmap_sem);
-#endif
+#else
 			yield();
+#endif
 			goto loop;
 		}
 		pgd_end = (addr + PGDIR_SIZE) & PGDIR_MASK;
@@ -305,7 +308,9 @@
 			pgd_end = vma->vm_end;
 		if(pgd_none(*pgdir) || pgd_bad(*pgdir))
 			continue;
+#ifndef SSI_BALANCE_MEMORY
 		spin_lock(&mm->page_table_lock);
+#endif
 		pudir = pud_offset(pgdir, addr);
 		pmdir = pmd_offset(pudir, addr);
 		for(; addr < pgd_end ; addr = pmd_end , pmdir++)
@@ -335,6 +340,7 @@
 			{
 #ifdef SSI_BALANCE_MEMORY
 				BUG();
+				for (;;);
 #endif
 				spin_unlock(&mm->page_table_lock);
 				if((err = (*func)(addr, PAGE_SIZE))) {
@@ -346,10 +352,13 @@
 		    }
 		    pte_unmap(pte_dir);
 		}
+#ifndef SSI_BALANCE_MEMORY
 		spin_unlock(&mm->page_table_lock);
+#endif
 	    }
 	}
 #ifdef SSI_BALANCE_MEMORY
+	spin_unlock(&mm->page_table_lock);
 	up_read(&mm->mmap_sem);
 #endif
 	return(count);

Index: freemem.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/mosixll/freemem.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- freemem.c	17 Nov 2009 06:09:02 -0000	1.10
+++ freemem.c	17 Dec 2009 06:43:51 -0000	1.11
@@ -404,10 +404,12 @@
  * plus another distinction for unused pages not otherwise accounted for
  */
 /* Acquires...
- * spin_lock(&mm->page_table_lock)
 #ifdef SSI_BALANCE_MEMORY
+ * down_read(&mm->mmap_sem)
+ * -> spin_lock(&mm->page_table_lock)
  * spin_lock(&mm->memsort_lock)
 #else
+ * spin_lock(&mm->page_table_lock)
  * write_lock_irq(&tasklist_lock)
 #endif
  */
@@ -439,10 +441,15 @@
 			return;
 	}
 	addr = 0;
-	loop:
+loop:
 	if(let_go == -1)
 		let_go = sort_age_maxchunk;
+
+#ifdef SSI_BALANCE_MEMORY
+	down_read(&mm->mmap_sem);
+#endif
 	spin_lock(&mm->page_table_lock);
+
 	for(vma = mm->mmap ; vma != NULL ; vma = vma->vm_next)
 	if(addr < vma->vm_end)
 	{
@@ -456,7 +463,11 @@
 			if(let_go-- == 0)
 			{
 				spin_unlock(&mm->page_table_lock);
+#ifdef SSI_BALANCE_MEMORY
+				up_read(&mm->mmap_sem);
+#else
 				yield();
+#endif
 				goto loop;
 			}
 			pgd_end = (addr + PGDIR_SIZE) & PGDIR_MASK;
@@ -525,6 +536,8 @@
 		flush_tlb_mm(mm);
 	spin_unlock(&mm->page_table_lock);
 #ifdef SSI_BALANCE_MEMORY
+	up_read(&mm->mmap_sem);
+
 	spin_lock(&mm->memsort_lock);
 #else
 	write_lock_irq(&tasklist_lock);


------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.