Module Name:    src
Committed By:   rin
Date:           Fri Feb 21 15:15:48 UTC 2020

Modified Files:
        src/sys/arch/powerpc/ibm4xx: trap.c

Log Message:
Do not try to recovery from data page fault in interrupt context;
catch up belatedly with powerpc/trap.c rev 1.49 and etc.:

    
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/powerpc/powerpc/trap.c#rev1.49


To generate a diff of this commit:
cvs rdiff -u -r1.77 -r1.78 src/sys/arch/powerpc/ibm4xx/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/powerpc/ibm4xx/trap.c
diff -u src/sys/arch/powerpc/ibm4xx/trap.c:1.77 src/sys/arch/powerpc/ibm4xx/trap.c:1.78
--- src/sys/arch/powerpc/ibm4xx/trap.c:1.77	Fri Feb 21 14:49:57 2020
+++ src/sys/arch/powerpc/ibm4xx/trap.c	Fri Feb 21 15:15:48 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.77 2020/02/21 14:49:57 rin Exp $	*/
+/*	$NetBSD: trap.c,v 1.78 2020/02/21 15:15:48 rin Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.77 2020/02/21 14:49:57 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.78 2020/02/21 15:15:48 rin Exp $");
 
 #include "opt_altivec.h"
 #include "opt_ddb.h"
@@ -182,7 +182,15 @@ trap(struct trapframe *tf)
 		{
 			struct vm_map *map;
 			vaddr_t va;
-			struct faultbuf *fb = NULL;
+			struct faultbuf *fb;
+
+			pcb = lwp_getpcb(l);
+			fb = pcb->pcb_onfault;
+
+			if (curcpu()->ci_idepth >= 0) {
+				rv = EFAULT;
+				goto out;
+			}
 
 			va = tf->tf_dear;
 			if (tf->tf_pid == KERNEL_PID) {
@@ -200,13 +208,12 @@ trap(struct trapframe *tf)
 			    (ftype & VM_PROT_WRITE) ? "write" : "read",
 			    (void *)va, tf->tf_esr));
 
-			pcb = lwp_getpcb(l);
-			fb = pcb->pcb_onfault;
 			pcb->pcb_onfault = NULL;
 			rv = uvm_fault(map, trunc_page(va), ftype);
 			pcb->pcb_onfault = fb;
 			if (rv == 0)
 				return;
+out:
 			if (fb != NULL) {
 				tf->tf_pid = KERNEL_PID;
 				tf->tf_srr0 = fb->fb_pc;

Reply via email to