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);