Module Name:    src
Committed By:   chs
Date:           Wed Jul  7 01:16:26 UTC 2010

Modified Files:
        src/sys/arch/amiga/amiga: trap.c
        src/sys/arch/atari/atari: trap.c
        src/sys/arch/cesfic/cesfic: trap.c
        src/sys/arch/hp300/hp300: trap.c
        src/sys/arch/luna68k/luna68k: trap.c
        src/sys/arch/m68k/include: m68k.h
        src/sys/arch/m68k/m68k: copy.s m68k_machdep.c
        src/sys/arch/mac68k/mac68k: trap.c
        src/sys/arch/mvme68k/mvme68k: trap.c
        src/sys/arch/news68k/news68k: trap.c
        src/sys/arch/next68k/next68k: trap.c
        src/sys/arch/sun2/sun2: trap.c
        src/sys/arch/sun3/sun3: trap.c
        src/sys/arch/x68k/x68k: trap.c

Log Message:
implement ucas_* for m68k.


To generate a diff of this commit:
cvs rdiff -u -r1.129 -r1.130 src/sys/arch/amiga/amiga/trap.c
cvs rdiff -u -r1.107 -r1.108 src/sys/arch/atari/atari/trap.c
cvs rdiff -u -r1.51 -r1.52 src/sys/arch/cesfic/cesfic/trap.c
cvs rdiff -u -r1.143 -r1.144 src/sys/arch/hp300/hp300/trap.c
cvs rdiff -u -r1.63 -r1.64 src/sys/arch/luna68k/luna68k/trap.c
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/m68k/include/m68k.h
cvs rdiff -u -r1.42 -r1.43 src/sys/arch/m68k/m68k/copy.s
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/m68k/m68k/m68k_machdep.c
cvs rdiff -u -r1.141 -r1.142 src/sys/arch/mac68k/mac68k/trap.c
cvs rdiff -u -r1.101 -r1.102 src/sys/arch/mvme68k/mvme68k/trap.c
cvs rdiff -u -r1.63 -r1.64 src/sys/arch/news68k/news68k/trap.c
cvs rdiff -u -r1.80 -r1.81 src/sys/arch/next68k/next68k/trap.c
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/sun2/sun2/trap.c
cvs rdiff -u -r1.138 -r1.139 src/sys/arch/sun3/sun3/trap.c
cvs rdiff -u -r1.100 -r1.101 src/sys/arch/x68k/x68k/trap.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amiga/amiga/trap.c
diff -u src/sys/arch/amiga/amiga/trap.c:1.129 src/sys/arch/amiga/amiga/trap.c:1.130
--- src/sys/arch/amiga/amiga/trap.c:1.129	Sun Jun  6 04:50:05 2010
+++ src/sys/arch/amiga/amiga/trap.c	Wed Jul  7 01:16:23 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.129 2010/06/06 04:50:05 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.130 2010/07/07 01:16:23 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -84,7 +84,7 @@
 #include "opt_m68k_arch.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.129 2010/06/06 04:50:05 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.130 2010/07/07 01:16:23 chs Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -428,6 +428,10 @@
 		printf("vmfault %s %lx returned %d\n",
 		    map == kernel_map ? "kernel" : "user", va, rv);
 #endif
+	if (map == kernel_map && rv == 0 && ucas_ras_check(&fp->F_t)) {
+		return;
+	}
+
 #ifdef M68060
 	if ((machineid & AMIGA_68060) == 0 && mmutype == MMU_68040) {
 #else

Index: src/sys/arch/atari/atari/trap.c
diff -u src/sys/arch/atari/atari/trap.c:1.107 src/sys/arch/atari/atari/trap.c:1.108
--- src/sys/arch/atari/atari/trap.c:1.107	Sun Jun  6 04:50:06 2010
+++ src/sys/arch/atari/atari/trap.c	Wed Jul  7 01:16:23 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.107 2010/06/06 04:50:06 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.108 2010/07/07 01:16:23 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.107 2010/06/06 04:50:06 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.108 2010/07/07 01:16:23 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -672,6 +672,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #ifdef M68040
 				if (cputype == CPU_68040)
 					(void) writeback(fp, 1);

Index: src/sys/arch/cesfic/cesfic/trap.c
diff -u src/sys/arch/cesfic/cesfic/trap.c:1.51 src/sys/arch/cesfic/cesfic/trap.c:1.52
--- src/sys/arch/cesfic/cesfic/trap.c:1.51	Sun Jun  6 04:50:06 2010
+++ src/sys/arch/cesfic/cesfic/trap.c	Wed Jul  7 01:16:24 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.51 2010/06/06 04:50:06 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.52 2010/07/07 01:16:24 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.51 2010/06/06 04:50:06 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.52 2010/07/07 01:16:24 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -628,6 +628,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #ifdef M68040
 				if (cputype == CPU_68040)
 					(void) writeback(fp, 1);

Index: src/sys/arch/hp300/hp300/trap.c
diff -u src/sys/arch/hp300/hp300/trap.c:1.143 src/sys/arch/hp300/hp300/trap.c:1.144
--- src/sys/arch/hp300/hp300/trap.c:1.143	Sun Jun  6 04:50:06 2010
+++ src/sys/arch/hp300/hp300/trap.c	Wed Jul  7 01:16:24 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.143 2010/06/06 04:50:06 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.144 2010/07/07 01:16:24 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.143 2010/06/06 04:50:06 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.144 2010/07/07 01:16:24 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -622,6 +622,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #ifdef M68040
 				if (cputype == CPU_68040)
 					(void) writeback(fp, 1);

Index: src/sys/arch/luna68k/luna68k/trap.c
diff -u src/sys/arch/luna68k/luna68k/trap.c:1.63 src/sys/arch/luna68k/luna68k/trap.c:1.64
--- src/sys/arch/luna68k/luna68k/trap.c:1.63	Sun Jun  6 04:50:06 2010
+++ src/sys/arch/luna68k/luna68k/trap.c	Wed Jul  7 01:16:24 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.63 2010/06/06 04:50:06 mrg Exp $ */
+/* $NetBSD: trap.c,v 1.64 2010/07/07 01:16:24 chs Exp $ */
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -78,7 +78,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.63 2010/06/06 04:50:06 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.64 2010/07/07 01:16:24 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -578,6 +578,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #ifdef M68040
 				if (cputype == CPU_68040)
 					(void) writeback(fp, 1);

Index: src/sys/arch/m68k/include/m68k.h
diff -u src/sys/arch/m68k/include/m68k.h:1.16 src/sys/arch/m68k/include/m68k.h:1.17
--- src/sys/arch/m68k/include/m68k.h:1.16	Sat Dec 19 18:06:51 2009
+++ src/sys/arch/m68k/include/m68k.h	Wed Jul  7 01:16:24 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: m68k.h,v 1.16 2009/12/19 18:06:51 tsutsui Exp $	*/
+/*	$NetBSD: m68k.h,v 1.17 2010/07/07 01:16:24 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1990, 1993
@@ -171,5 +171,8 @@
 void	physaccess(void *, void *, int, int);
 void	physunaccess(void *, int);
 
+/* m68k_machdep.c */
+bool	ucas_ras_check(struct trapframe *);
+
 #endif /* _KERNEL */
 #endif /* _M68K_M68K_H_ */

Index: src/sys/arch/m68k/m68k/copy.s
diff -u src/sys/arch/m68k/m68k/copy.s:1.42 src/sys/arch/m68k/m68k/copy.s:1.43
--- src/sys/arch/m68k/m68k/copy.s:1.42	Sat Mar 20 23:31:28 2010
+++ src/sys/arch/m68k/m68k/copy.s	Wed Jul  7 01:16:25 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: copy.s,v 1.42 2010/03/20 23:31:28 chs Exp $	*/
+/*	$NetBSD: copy.s,v 1.43 2010/07/07 01:16:25 chs Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -67,6 +67,11 @@
  * copyin/copyout, fuword/suword, etc.
  */
 
+#include "opt_multiprocessor.h"
+#ifdef MULTIPROCESSOR
+#error need to write MP support for ucas_* functions
+#endif
+
 #include <sys/errno.h>
 #include <machine/asm.h>
 
@@ -502,3 +507,36 @@
 Lsdone:
 	clrl	%a1@(PCB_ONFAULT) 	| clear fault handler
 	rts
+
+/*
+ * int ucas_32(volatile int32_t *uptr, int32_t old, int32_t new, int32_t *ret);
+ * Atomically compare-and-swap an int32_t in user space.
+ */
+	.globl		_C_LABEL(ucas_32_ras_start)
+	.globl		_C_LABEL(ucas_32_ras_end)
+ENTRY(ucas_32)
+	CHECK_SFC
+	CHECK_DFC
+	movl	_C_LABEL(curpcb),%a1
+	movl	#Lucasfault,%a1@(PCB_ONFAULT)	| set fault handler
+	movl	%sp@(4),%a0		| a0 = uptr
+_C_LABEL(ucas_32_ras_start):
+	movl	%sp@(8),%d0		| d0 = old
+	movsl	%a0@,%d1		| d1 = *uptr
+	cmpl	%d0,%d1			| does *uptr == old?
+	bne	Lucasdiff		| if not, don't change it
+	movl	%sp@(12),%d0		| d0 = new
+	movsl	%d0,%a0@		| *uptr = new
+	nop				| pipeline sync
+_C_LABEL(ucas_32_ras_end):
+Lucasdiff:
+	movl	%sp@(16),%a0		| a0 = ret
+	movl	%d1,%a0@		| *ret = d1 (old *uptr)
+	clrl	%d0			| return 0
+
+Lucasfault:
+	clrl	%a1@(PCB_ONFAULT)	| clear fault handler
+	rts
+
+STRONG_ALIAS(ucas_int,ucas_32)
+STRONG_ALIAS(ucas_ptr,ucas_32)

Index: src/sys/arch/m68k/m68k/m68k_machdep.c
diff -u src/sys/arch/m68k/m68k/m68k_machdep.c:1.7 src/sys/arch/m68k/m68k/m68k_machdep.c:1.8
--- src/sys/arch/m68k/m68k/m68k_machdep.c:1.7	Mon Apr 28 20:23:27 2008
+++ src/sys/arch/m68k/m68k/m68k_machdep.c	Wed Jul  7 01:16:25 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: m68k_machdep.c,v 1.7 2008/04/28 20:23:27 martin Exp $	*/
+/*	$NetBSD: m68k_machdep.c,v 1.8 2010/07/07 01:16:25 chs Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -27,10 +27,30 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: m68k_machdep.c,v 1.7 2008/04/28 20:23:27 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: m68k_machdep.c,v 1.8 2010/07/07 01:16:25 chs Exp $");
 
 #include <sys/param.h>
+#include <m68k/m68k.h>
+#include <m68k/frame.h>
 
 /* the following is used externally (sysctl_hw) */
 char	machine_arch[] = MACHINE_ARCH;	/* from <machine/param.h> */
 
+extern char ucas_32_ras_start[];
+extern char ucas_32_ras_end[];
+extern short exframesize[];
+
+bool
+ucas_ras_check(struct trapframe *v)
+{
+	struct frame *f = (void *)v;
+
+	if (f->f_pc <= (vaddr_t)ucas_32_ras_start ||
+	    f->f_pc >= (vaddr_t)ucas_32_ras_end) {
+		return false;
+	}
+	f->f_pc = (vaddr_t)ucas_32_ras_start;
+	f->f_stackadj = exframesize[f->f_format];
+	f->f_format = f->f_vector = 0;
+	return true;
+}

Index: src/sys/arch/mac68k/mac68k/trap.c
diff -u src/sys/arch/mac68k/mac68k/trap.c:1.141 src/sys/arch/mac68k/mac68k/trap.c:1.142
--- src/sys/arch/mac68k/mac68k/trap.c:1.141	Sun Jun  6 04:50:07 2010
+++ src/sys/arch/mac68k/mac68k/trap.c	Wed Jul  7 01:16:25 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.141 2010/06/06 04:50:07 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.142 2010/07/07 01:16:25 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.141 2010/06/06 04:50:07 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.142 2010/07/07 01:16:25 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -618,6 +618,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #if defined(M68040)
 				if (mmutype == MMU_68040)
 					(void)writeback(fp, 1);

Index: src/sys/arch/mvme68k/mvme68k/trap.c
diff -u src/sys/arch/mvme68k/mvme68k/trap.c:1.101 src/sys/arch/mvme68k/mvme68k/trap.c:1.102
--- src/sys/arch/mvme68k/mvme68k/trap.c:1.101	Sun Jun  6 04:50:07 2010
+++ src/sys/arch/mvme68k/mvme68k/trap.c	Wed Jul  7 01:16:25 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.101 2010/06/06 04:50:07 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.102 2010/07/07 01:16:25 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.101 2010/06/06 04:50:07 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.102 2010/07/07 01:16:25 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -644,6 +644,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #ifdef M68040
 #if defined(M68030) || defined(M68060)
 				if (cputype == CPU_68040)

Index: src/sys/arch/news68k/news68k/trap.c
diff -u src/sys/arch/news68k/news68k/trap.c:1.63 src/sys/arch/news68k/news68k/trap.c:1.64
--- src/sys/arch/news68k/news68k/trap.c:1.63	Sun Jun  6 04:50:07 2010
+++ src/sys/arch/news68k/news68k/trap.c	Wed Jul  7 01:16:25 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.63 2010/06/06 04:50:07 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.64 2010/07/07 01:16:25 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.63 2010/06/06 04:50:07 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.64 2010/07/07 01:16:25 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -593,6 +593,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #ifdef M68040
 				if (cputype == CPU_68040)
 					(void) writeback(fp, 1);

Index: src/sys/arch/next68k/next68k/trap.c
diff -u src/sys/arch/next68k/next68k/trap.c:1.80 src/sys/arch/next68k/next68k/trap.c:1.81
--- src/sys/arch/next68k/next68k/trap.c:1.80	Sun Jun  6 04:50:08 2010
+++ src/sys/arch/next68k/next68k/trap.c	Wed Jul  7 01:16:25 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.80 2010/06/06 04:50:08 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.81 2010/07/07 01:16:25 chs Exp $	*/
 
 /*
  * This file was taken from mvme68k/mvme68k/trap.c
@@ -84,7 +84,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.80 2010/06/06 04:50:08 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.81 2010/07/07 01:16:25 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -638,6 +638,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #ifdef M68040
 				if (cputype == CPU_68040)
 					(void) writeback(fp, 1);

Index: src/sys/arch/sun2/sun2/trap.c
diff -u src/sys/arch/sun2/sun2/trap.c:1.39 src/sys/arch/sun2/sun2/trap.c:1.40
--- src/sys/arch/sun2/sun2/trap.c:1.39	Sat Mar 20 23:31:29 2010
+++ src/sys/arch/sun2/sun2/trap.c	Wed Jul  7 01:16:26 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.39 2010/03/20 23:31:29 chs Exp $	*/
+/*	$NetBSD: trap.c,v 1.40 2010/07/07 01:16:26 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -78,7 +78,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.39 2010/03/20 23:31:29 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.40 2010/07/07 01:16:26 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -562,6 +562,9 @@
 
 			if ((type & T_USER) != 0)
 				l->l_pflag &= ~LP_SA_PAGEFAULT;
+			else if (ucas_ras_check(tf)) {
+				return;
+			}
 			goto finish;
 		}
 		if (rv == EACCES) {

Index: src/sys/arch/sun3/sun3/trap.c
diff -u src/sys/arch/sun3/sun3/trap.c:1.138 src/sys/arch/sun3/sun3/trap.c:1.139
--- src/sys/arch/sun3/sun3/trap.c:1.138	Sat Mar 20 23:31:29 2010
+++ src/sys/arch/sun3/sun3/trap.c	Wed Jul  7 01:16:26 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.138 2010/03/20 23:31:29 chs Exp $	*/
+/*	$NetBSD: trap.c,v 1.139 2010/07/07 01:16:26 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -78,7 +78,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.138 2010/03/20 23:31:29 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.139 2010/07/07 01:16:26 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -571,6 +571,9 @@
 
 			if ((type & T_USER) != 0)
 				l->l_pflag &= ~LP_SA_PAGEFAULT;
+			else if (ucas_ras_check(tf)) {
+				return;
+			}
 			goto finish;
 		}
 		if (rv == EACCES) {

Index: src/sys/arch/x68k/x68k/trap.c
diff -u src/sys/arch/x68k/x68k/trap.c:1.100 src/sys/arch/x68k/x68k/trap.c:1.101
--- src/sys/arch/x68k/x68k/trap.c:1.100	Sun Jun  6 04:50:08 2010
+++ src/sys/arch/x68k/x68k/trap.c	Wed Jul  7 01:16:26 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.100 2010/06/06 04:50:08 mrg Exp $	*/
+/*	$NetBSD: trap.c,v 1.101 2010/07/07 01:16:26 chs Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.100 2010/06/06 04:50:08 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.101 2010/07/07 01:16:26 chs Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -647,6 +647,9 @@
 				uvm_grow(p, va);
 
 			if (type == T_MMUFLT) {
+				if (ucas_ras_check(&fp->F_t)) {
+					return;
+				}
 #ifdef M68040
 				if (cputype == CPU_68040)
 					(void) writeback(fp, 1);

Reply via email to