Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Feb 2014 20:09:27 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r261810 - head/sys/arm/arm
Message-ID:  <201402122009.s1CK9R6P065268@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Wed Feb 12 20:09:27 2014
New Revision: 261810
URL: http://svnweb.freebsd.org/changeset/base/261810

Log:
  Use the same logic as the x86 platforms to avoid trying perform fault fixup
  while in a critical section or while holding a non-sleepable lock.
  
  Reviewed by:	cognet

Modified:
  head/sys/arm/arm/trap.c

Modified: head/sys/arm/arm/trap.c
==============================================================================
--- head/sys/arm/arm/trap.c	Wed Feb 12 20:06:26 2014	(r261809)
+++ head/sys/arm/arm/trap.c	Wed Feb 12 20:09:27 2014	(r261810)
@@ -422,6 +422,10 @@ data_abort_handler(struct trapframe *tf)
 #ifdef DEBUG
 	last_fault_code = fsr;
 #endif
+	if (td->td_critnest != 0 || WITNESS_CHECK(WARN_SLEEPOK | WARN_GIANTOK,
+	    NULL, "Kernel page fault") != 0)
+		goto fatal_pagefault;
+
 	if (pmap_fault_fixup(vmspace_pmap(td->td_proc->p_vmspace), va, ftype,
 	    user)) {
 		goto out;
@@ -444,6 +448,7 @@ data_abort_handler(struct trapframe *tf)
 	}
 	if (__predict_true(error == 0))
 		goto out;
+fatal_pagefault:
 	if (user == 0) {
 		if (pcb->pcb_onfault) {
 			tf->tf_r0 = error;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402122009.s1CK9R6P065268>