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

Svatopluk Kraus skra at FreeBSD.org
Tue Jan 26 13:50:46 UTC 2016


Author: skra
Date: Tue Jan 26 13:50:44 2016
New Revision: 294822
URL: https://svnweb.freebsd.org/changeset/base/294822

Log:
  Make pmap_fault() return values vm subsystem compliant to
  simplify their handling in abort_handler(). While here,
  remove one extra initialization of pcb variable.

Modified:
  head/sys/arm/arm/pmap-v6-new.c
  head/sys/arm/arm/trap-v6.c

Modified: head/sys/arm/arm/pmap-v6-new.c
==============================================================================
--- head/sys/arm/arm/pmap-v6-new.c	Tue Jan 26 13:49:46 2016	(r294821)
+++ head/sys/arm/arm/pmap-v6-new.c	Tue Jan 26 13:50:44 2016	(r294822)
@@ -6151,7 +6151,7 @@ pmap_fault(pmap_t pmap, vm_offset_t far,
 			    __func__, pmap, pmap->pm_pt1, far);
 			panic("%s: pm_pt1 abort", __func__);
 		}
-		return (EFAULT);
+		return (KERN_INVALID_ADDRESS);
 	}
 	if (__predict_false(IN_RANGE2(far, PT2MAP, PT2MAP_SIZE))) {
 		/*
@@ -6167,7 +6167,7 @@ pmap_fault(pmap_t pmap, vm_offset_t far,
 			    __func__, pmap, PT2MAP, far);
 			panic("%s: PT2MAP abort", __func__);
 		}
-		return (EFAULT);
+		return (KERN_INVALID_ADDRESS);
 	}
 
 	/*
@@ -6187,7 +6187,7 @@ pte2_seta:
 			if (!pte2_cmpset(pte2p, pte2, pte2 | PTE2_A)) {
 				goto pte2_seta;
 			}
-			return (0);
+			return (KERN_SUCCESS);
 		}
 	}
 	if (idx == FAULT_ACCESS_L1) {
@@ -6198,7 +6198,7 @@ pte1_seta:
 			if (!pte1_cmpset(pte1p, pte1, pte1 | PTE1_A)) {
 				goto pte1_seta;
 			}
-			return (0);
+			return (KERN_SUCCESS);
 		}
 	}
 
@@ -6222,7 +6222,7 @@ pte2_setrw:
 				goto pte2_setrw;
 			}
 			tlb_flush(trunc_page(far));
-			return (0);
+			return (KERN_SUCCESS);
 		}
 	}
 	if ((fsr & FSR_WNR) && (idx == FAULT_PERM_L1)) {
@@ -6235,7 +6235,7 @@ pte1_setrw:
 				goto pte1_setrw;
 			}
 			tlb_flush(pte1_trunc(far));
-			return (0);
+			return (KERN_SUCCESS);
 		}
 	}
 
@@ -6274,7 +6274,7 @@ pte1_setrw:
 		}
 	}
 #endif
-	return (EAGAIN);
+	return (KERN_FAILURE);
 }
 
 /* !!!! REMOVE !!!! */

Modified: head/sys/arm/arm/trap-v6.c
==============================================================================
--- head/sys/arm/arm/trap-v6.c	Tue Jan 26 13:49:46 2016	(r294821)
+++ head/sys/arm/arm/trap-v6.c	Tue Jan 26 13:50:44 2016	(r294822)
@@ -336,14 +336,10 @@ abort_handler(struct trapframe *tf, int 
 
 #ifdef ARM_NEW_PMAP
 	rv = pmap_fault(PCPU_GET(curpmap), far, fsr, idx, usermode);
-	if (rv == 0) {
+	if (rv == KERN_SUCCESS)
 		return;
-	} else if (rv == EFAULT) {
-
-		call_trapsignal(td, SIGSEGV, SEGV_MAPERR, far);
-		userret(td, tf);
-		return;
-	}
+	if (rv == KERN_INVALID_ADDRESS)
+		goto nogo;
 #endif
 	/*
 	 * Now, when we handled imprecise and debug aborts, the rest of
@@ -452,7 +448,6 @@ abort_handler(struct trapframe *tf, int 
 	 */
 
 	/* fusubailout is used by [fs]uswintr to avoid page faulting. */
-	pcb = td->td_pcb;
 	if (__predict_false(pcb->pcb_onfault == fusubailout)) {
 		tf->tf_r0 = EFAULT;
 		tf->tf_pc = (register_t)pcb->pcb_onfault;


More information about the svn-src-all mailing list