[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