patch-2.4.7 linux/arch/sparc/mm/generic.c
Next file: linux/arch/sparc/mm/init.c
Previous file: linux/arch/sparc/lib/bitops.S
Back to the patch index
Back to the overall index
- Lines: 57
- Date:
Thu Jul 19 18:11:13 2001
- Orig file:
v2.4.6/linux/arch/sparc/mm/generic.c
- Orig date:
Thu Apr 12 12:10:25 2001
diff -u --recursive --new-file v2.4.6/linux/arch/sparc/mm/generic.c linux/arch/sparc/mm/generic.c
@@ -1,4 +1,4 @@
-/* $Id: generic.c,v 1.12 2001/04/09 21:40:46 davem Exp $
+/* $Id: generic.c,v 1.13 2001/07/17 16:17:33 anton Exp $
* generic.c: Generic Sparc mm routines that are not dependent upon
* MMU type but are Sparc specific.
*
@@ -8,6 +8,7 @@
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/swap.h>
+#include <linux/pagemap.h>
#include <asm/pgalloc.h>
#include <asm/pgtable.h>
@@ -64,12 +65,10 @@
end = PGDIR_SIZE;
offset -= address;
do {
- pte_t * pte = pte_alloc(pmd, address);
+ pte_t * pte = pte_alloc(current->mm, pmd, address);
if (!pte)
return -ENOMEM;
- spin_lock(¤t->mm->page_table_lock);
io_remap_pte_range(pte, address, end - address, address + offset, prot, space);
- spin_unlock(¤t->mm->page_table_lock);
address = (address + PMD_SIZE) & PMD_MASK;
pmd++;
} while (address < end);
@@ -82,13 +81,16 @@
pgd_t * dir;
unsigned long beg = from;
unsigned long end = from + size;
+ struct mm_struct *mm = current->mm;
prot = __pgprot(pg_iobits);
offset -= from;
- dir = pgd_offset(current->mm, from);
- flush_cache_range(current->mm, beg, end);
+ dir = pgd_offset(mm, from);
+ flush_cache_range(mm, beg, end);
+
+ spin_lock(&mm->page_table_lock);
while (from < end) {
- pmd_t *pmd = pmd_alloc(dir, from);
+ pmd_t *pmd = pmd_alloc(current->mm, dir, from);
error = -ENOMEM;
if (!pmd)
break;
@@ -98,6 +100,8 @@
from = (from + PGDIR_SIZE) & PGDIR_MASK;
dir++;
}
+ spin_unlock(&mm->page_table_lock);
+
flush_tlb_range(current->mm, beg, end);
return error;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)