svn commit: r261810 - head/sys/arm/arm

Ian Lepore ian at FreeBSD.org
Wed Feb 12 20:09:27 UTC 2014


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;


More information about the svn-src-all mailing list