patch-2.4.3 linux/arch/sparc64/kernel/sys_sparc.c
Next file: linux/arch/sparc64/kernel/sys_sparc32.c
Previous file: linux/arch/sparc64/kernel/sparc64_ksyms.c
Back to the patch index
Back to the overall index
- Lines: 81
- Date:
Sun Mar 25 18:14:21 2001
- Orig file:
v2.4.2/linux/arch/sparc64/kernel/sys_sparc.c
- Orig date:
Wed Feb 21 18:20:15 2001
diff -u --recursive --new-file v2.4.2/linux/arch/sparc64/kernel/sys_sparc.c linux/arch/sparc64/kernel/sys_sparc.c
@@ -1,4 +1,4 @@
-/* $Id: sys_sparc.c,v 1.48 2001/02/13 01:16:44 davem Exp $
+/* $Id: sys_sparc.c,v 1.50 2001/03/24 09:36:10 davem Exp $
* linux/arch/sparc64/kernel/sys_sparc.c
*
* This file contains various random system calls that
@@ -243,9 +243,9 @@
if (flags & MAP_SHARED)
current->thread.flags |= SPARC_FLAG_MMAPSHARED;
- down(¤t->mm->mmap_sem);
+ down_write(¤t->mm->mmap_sem);
retval = do_mmap(file, addr, len, prot, flags, off);
- up(¤t->mm->mmap_sem);
+ up_write(¤t->mm->mmap_sem);
current->thread.flags &= ~(SPARC_FLAG_MMAPSHARED);
@@ -263,9 +263,9 @@
if (len > -PAGE_OFFSET ||
(addr < PAGE_OFFSET && addr + len > -PAGE_OFFSET))
return -EINVAL;
- down(¤t->mm->mmap_sem);
+ down_write(¤t->mm->mmap_sem);
ret = do_munmap(current->mm, addr, len);
- up(¤t->mm->mmap_sem);
+ up_write(¤t->mm->mmap_sem);
return ret;
}
@@ -285,7 +285,7 @@
goto out;
if (addr < PAGE_OFFSET && addr + old_len > -PAGE_OFFSET)
goto out;
- down(¤t->mm->mmap_sem);
+ down_write(¤t->mm->mmap_sem);
vma = find_vma(current->mm, addr);
if (vma && (vma->vm_flags & VM_SHARED))
current->thread.flags |= SPARC_FLAG_MMAPSHARED;
@@ -305,7 +305,7 @@
ret = do_mremap(addr, old_len, new_len, flags, new_addr);
out_sem:
current->thread.flags &= ~(SPARC_FLAG_MMAPSHARED);
- up(¤t->mm->mmap_sem);
+ up_write(¤t->mm->mmap_sem);
out:
return ret;
}
@@ -335,6 +335,10 @@
{
siginfo_t info;
+ if ((current->thread.flags & SPARC_FLAG_32BIT) != 0) {
+ regs->tpc &= 0xffffffff;
+ regs->tnpc &= 0xffffffff;
+ }
#ifdef DEBUG_SPARC_BREAKPOINT
printk ("TRAP: Entering kernel PC=%lx, nPC=%lx\n", regs->tpc, regs->tnpc);
#endif
@@ -384,6 +388,10 @@
regs->tpc = regs->tnpc;
regs->tnpc += 4;
+ if ((current->thread.flags & SPARC_FLAG_32BIT) != 0) {
+ regs->tpc &= 0xffffffff;
+ regs->tnpc &= 0xffffffff;
+ }
if(++count <= 5) {
printk ("For Solaris binary emulation you need solaris module loaded\n");
show_regs (regs);
@@ -400,6 +408,10 @@
regs->tpc = regs->tnpc;
regs->tnpc += 4;
+ if ((current->thread.flags & SPARC_FLAG_32BIT) != 0) {
+ regs->tpc &= 0xffffffff;
+ regs->tnpc &= 0xffffffff;
+ }
if(++count <= 20)
printk ("SunOS binary emulation not compiled in\n");
force_sig(SIGSEGV, current);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)