diff options
Diffstat (limited to 'arch/sparc/mm')
-rw-r--r-- | arch/sparc/mm/asyncd.c | 2 | ||||
-rw-r--r-- | arch/sparc/mm/fault.c | 3 | ||||
-rw-r--r-- | arch/sparc/mm/srmmu.c | 2 | ||||
-rw-r--r-- | arch/sparc/mm/sun4c.c | 5 |
4 files changed, 8 insertions, 4 deletions
diff --git a/arch/sparc/mm/asyncd.c b/arch/sparc/mm/asyncd.c index 1ae532b7c..300f5aa0a 100644 --- a/arch/sparc/mm/asyncd.c +++ b/arch/sparc/mm/asyncd.c @@ -1,4 +1,4 @@ -/* $Id: asyncd.c,v 1.13 1999/05/12 11:11:34 davem Exp $ +/* $Id: asyncd.c,v 1.15 1999/07/04 04:35:50 davem Exp $ * The asyncd kernel daemon. This handles paging on behalf of * processes that receive page faults due to remote (async) memory * accesses. diff --git a/arch/sparc/mm/fault.c b/arch/sparc/mm/fault.c index a6110b886..0f1f3d983 100644 --- a/arch/sparc/mm/fault.c +++ b/arch/sparc/mm/fault.c @@ -1,4 +1,4 @@ -/* $Id: fault.c,v 1.101 1999/01/04 06:24:52 jj Exp $ +/* $Id: fault.c,v 1.103 1999/07/04 04:35:51 davem Exp $ * fault.c: Page fault handlers for the Sparc. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -14,7 +14,6 @@ #include <linux/mman.h> #include <linux/tasks.h> #include <linux/kernel.h> -#include <linux/smp.h> #include <linux/signal.h> #include <linux/mm.h> #include <linux/smp.h> diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index 5b63aa11a..66d3c535d 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c @@ -2076,6 +2076,7 @@ static void srmmu_vac_update_mmu_cache(struct vm_area_struct * vma, goto done; inode = file->f_dentry->d_inode; offset = (address & PAGE_MASK) - vma->vm_start; + spin_lock(&inode->i_shared_lock); vmaring = inode->i_mmap; do { /* Do not mistake ourselves as another mapping. */ @@ -2109,6 +2110,7 @@ static void srmmu_vac_update_mmu_cache(struct vm_area_struct * vma, } } } while ((vmaring = vmaring->vm_next_share) != NULL); + spin_unlock(&inode->i_shared_lock); if(alias_found && ((pte_val(pte) & SRMMU_CACHE) != 0)) { pgdp = srmmu_pgd_offset(vma->vm_mm, address); diff --git a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c index d6387d473..c6bf02fc0 100644 --- a/arch/sparc/mm/sun4c.c +++ b/arch/sparc/mm/sun4c.c @@ -2682,8 +2682,10 @@ static void sun4c_vac_alias_fixup(struct vm_area_struct *vma, unsigned long addr inode = dentry->d_inode; if(inode) { unsigned long offset = (address & PAGE_MASK) - vma->vm_start; - struct vm_area_struct *vmaring = inode->i_mmap; + struct vm_area_struct *vmaring; int alias_found = 0; + spin_lock(&inode->i_shared_lock); + vmaring = inode->i_mmap; do { unsigned long vaddr = vmaring->vm_start + offset; unsigned long start; @@ -2712,6 +2714,7 @@ static void sun4c_vac_alias_fixup(struct vm_area_struct *vma, unsigned long addr } } } while ((vmaring = vmaring->vm_next_share) != NULL); + spin_unlock(&inode->i_shared_lock); if(alias_found && !(pte_val(pte) & _SUN4C_PAGE_NOCACHE)) { pgdp = sun4c_pgd_offset(vma->vm_mm, address); |