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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to