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