Index: kernel/arch/amd64/src/mm/page.c
===================================================================
--- kernel/arch/amd64/src/mm/page.c	(revision 9043309ca559f4ee30a58bf6d6fb595b8add955e)
+++ kernel/arch/amd64/src/mm/page.c	(revision 1dbc43f1c037ded959f69e4b6346df8bf12e2431)
@@ -92,8 +92,5 @@
 		access = PF_ACCESS_READ;
 	
-	if (as_page_fault(page, access, istate) == AS_PF_FAULT) {
-		fault_if_from_uspace(istate, "Page fault: %p.", (void *) page);
-		panic_memtrap(istate, access, page, NULL);
-	}
+	as_page_fault(page, access, istate);
 }
 
Index: kernel/arch/arm32/src/mm/page_fault.c
===================================================================
--- kernel/arch/arm32/src/mm/page_fault.c	(revision 9043309ca559f4ee30a58bf6d6fb595b8add955e)
+++ kernel/arch/arm32/src/mm/page_fault.c	(revision 1dbc43f1c037ded959f69e4b6346df8bf12e2431)
@@ -151,10 +151,5 @@
 	pf_access_t access = get_memory_access_type(istate->pc, badvaddr);
 
-	int ret = as_page_fault(badvaddr, access, istate);
-
-	if (ret == AS_PF_FAULT) {
-		fault_if_from_uspace(istate, "Page fault: %#x.", badvaddr);
-		panic_memtrap(istate, access, badvaddr, NULL);
-	}
+	as_page_fault(badvaddr, access, istate);
 }
 
@@ -167,11 +162,5 @@
 void prefetch_abort(unsigned int exc_no, istate_t *istate)
 {
-	int ret = as_page_fault(istate->pc, PF_ACCESS_EXEC, istate);
-
-	if (ret == AS_PF_FAULT) {
-		fault_if_from_uspace(istate,
-		    "Page fault - prefetch_abort: %#x.", istate->pc);
-		panic_memtrap(istate, PF_ACCESS_EXEC, istate->pc, NULL);
-	}
+	as_page_fault(istate->pc, PF_ACCESS_EXEC, istate);
 }
 
Index: kernel/arch/ia64/src/mm/tlb.c
===================================================================
--- kernel/arch/ia64/src/mm/tlb.c	(revision 9043309ca559f4ee30a58bf6d6fb595b8add955e)
+++ kernel/arch/ia64/src/mm/tlb.c	(revision 1dbc43f1c037ded959f69e4b6346df8bf12e2431)
@@ -501,9 +501,5 @@
 		 * Forward the page fault to address space page fault handler.
 		 */
-		if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) {
-			fault_if_from_uspace(istate, "Page fault at %p.",
-			    (void *) va);
-			panic_memtrap(istate, PF_ACCESS_EXEC, va, NULL);
-		}
+		as_page_fault(va, PF_ACCESS_EXEC, istate);
 	}
 }
@@ -619,9 +615,5 @@
 		 * handler.
 		 */
-		if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) {
-			fault_if_from_uspace(istate, "Page fault at %p.",
-			    (void *) va);
-			panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, NULL);
-		}
+		as_page_fault(va, PF_ACCESS_READ, istate);
 	}
 }
@@ -667,9 +659,5 @@
 		dtc_pte_copy(t);
 	} else {
-		if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) {
-			fault_if_from_uspace(istate, "Page fault at %p.",
-			    (void *) va);
-			panic_memtrap(istate, PF_ACCESS_WRITE, va, NULL);
-		}
+		as_page_fault(va, PF_ACCESS_WRITE, istate);
 	}
 }
@@ -700,9 +688,5 @@
 		itc_pte_copy(t);
 	} else {
-		if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) {
-			fault_if_from_uspace(istate, "Page fault at %p.",
-			    (void *) va);
-			panic_memtrap(istate, PF_ACCESS_EXEC, va, NULL);
-		}
+		as_page_fault(va, PF_ACCESS_EXEC, istate);
 	}
 }
@@ -764,9 +748,5 @@
 	ASSERT((t) && (t->p));
 	ASSERT(!t->w);
-	if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) {
-		fault_if_from_uspace(istate, "Page fault at %p.",
-		    (void *) va);
-		panic_memtrap(istate, PF_ACCESS_WRITE, va, NULL);
-	}
+	as_page_fault(va, PF_ACCESS_WRITE, istate);
 }
 
@@ -799,9 +779,5 @@
 			dtc_pte_copy(t);
 	} else {
-		if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) {
-			fault_if_from_uspace(istate, "Page fault at %p.",
-			    (void *) va);
-			panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, NULL);
-		}
+		as_page_fault(va, PF_ACCESS_READ, istate);
 	}
 }
Index: kernel/arch/mips32/src/mm/tlb.c
===================================================================
--- kernel/arch/mips32/src/mm/tlb.c	(revision 9043309ca559f4ee30a58bf6d6fb595b8add955e)
+++ kernel/arch/mips32/src/mm/tlb.c	(revision 1dbc43f1c037ded959f69e4b6346df8bf12e2431)
@@ -48,9 +48,5 @@
 #include <symtab.h>
 
-static void tlb_refill_fail(istate_t *);
-static void tlb_invalid_fail(istate_t *);
-static void tlb_modified_fail(istate_t *);
-
-static pte_t *find_mapping_and_check(uintptr_t, int, istate_t *, int *);
+static pte_t *find_mapping_and_check(uintptr_t, int, istate_t *);
 
 /** Initialize TLB.
@@ -92,54 +88,33 @@
 	uintptr_t badvaddr;
 	pte_t *pte;
-	int pfrc;
 	
 	badvaddr = cp0_badvaddr_read();
 	asid = AS->asid;
 	
-	pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate, &pfrc);
-	if (!pte) {
-		switch (pfrc) {
-		case AS_PF_FAULT:
-			goto fail;
-			break;
-		case AS_PF_DEFER:
-			/*
-			 * The page fault came during copy_from_uspace()
-			 * or copy_to_uspace().
-			 */
-			return;
-		default:
-			panic("Unexpected pfrc (%d).", pfrc);
+	pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate);
+	if (pte) {
+		/*
+		 * Record access to PTE.
+		 */
+		pte->a = 1;
+
+		tlb_prepare_entry_hi(&hi, asid, badvaddr);
+		tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d,
+		    pte->cacheable, pte->pfn);
+
+		/*
+		 * New entry is to be inserted into TLB
+		 */
+		cp0_entry_hi_write(hi.value);
+		if ((badvaddr / PAGE_SIZE) % 2 == 0) {
+			cp0_entry_lo0_write(lo.value);
+			cp0_entry_lo1_write(0);
+		} else {
+			cp0_entry_lo0_write(0);
+			cp0_entry_lo1_write(lo.value);
 		}
-	}
-
-	/*
-	 * Record access to PTE.
-	 */
-	pte->a = 1;
-
-	tlb_prepare_entry_hi(&hi, asid, badvaddr);
-	tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->cacheable,
-	    pte->pfn);
-
-	/*
-	 * New entry is to be inserted into TLB
-	 */
-	cp0_entry_hi_write(hi.value);
-	if ((badvaddr / PAGE_SIZE) % 2 == 0) {
-		cp0_entry_lo0_write(lo.value);
-		cp0_entry_lo1_write(0);
-	}
-	else {
-		cp0_entry_lo0_write(0);
-		cp0_entry_lo1_write(lo.value);
-	}
-	cp0_pagemask_write(TLB_PAGE_MASK_16K);
-	tlbwr();
-
-	return;
-	
-fail:
-	tlb_refill_fail(istate);
+		cp0_pagemask_write(TLB_PAGE_MASK_16K);
+		tlbwr();
+	}
 }
 
@@ -155,5 +130,4 @@
 	entry_hi_t hi;
 	pte_t *pte;
-	int pfrc;
 
 	badvaddr = cp0_badvaddr_read();
@@ -168,56 +142,31 @@
 	index.value = cp0_index_read();
 
-	/*
-	 * Fail if the entry is not in TLB.
-	 */
-	if (index.p) {
-		printf("TLB entry not found.\n");
-		goto fail;
-	}
-
-	pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate, &pfrc);
-	if (!pte) {
-		switch (pfrc) {
-		case AS_PF_FAULT:
-			goto fail;
-			break;
-		case AS_PF_DEFER:
-			/*
-			 * The page fault came during copy_from_uspace()
-			 * or copy_to_uspace().
-			 */
-			return;
-		default:
-			panic("Unexpected pfrc (%d).", pfrc);
-		}
-	}
-
-	/*
-	 * Read the faulting TLB entry.
-	 */
-	tlbr();
-
-	/*
-	 * Record access to PTE.
-	 */
-	pte->a = 1;
-
-	tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->cacheable,
-	    pte->pfn);
-
-	/*
-	 * The entry is to be updated in TLB.
-	 */
-	if ((badvaddr / PAGE_SIZE) % 2 == 0)
-		cp0_entry_lo0_write(lo.value);
-	else
-		cp0_entry_lo1_write(lo.value);
-	cp0_pagemask_write(TLB_PAGE_MASK_16K);
-	tlbwi();
-
-	return;
-	
-fail:
-	tlb_invalid_fail(istate);
+	ASSERT(!index.p);
+
+	pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate);
+	if (pte) {
+		/*
+		 * Read the faulting TLB entry.
+		 */
+		tlbr();
+
+		/*
+		 * Record access to PTE.
+		 */
+		pte->a = 1;
+
+		tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d,
+		    pte->cacheable, pte->pfn);
+
+		/*
+		 * The entry is to be updated in TLB.
+		 */
+		if ((badvaddr / PAGE_SIZE) % 2 == 0)
+			cp0_entry_lo0_write(lo.value);
+		else
+			cp0_entry_lo1_write(lo.value);
+		cp0_pagemask_write(TLB_PAGE_MASK_16K);
+		tlbwi();
+	}
 }
 
@@ -233,5 +182,4 @@
 	entry_hi_t hi;
 	pte_t *pte;
-	int pfrc;
 
 	badvaddr = cp0_badvaddr_read();
@@ -249,82 +197,32 @@
 	 * Fail if the entry is not in TLB.
 	 */
-	if (index.p) {
-		printf("TLB entry not found.\n");
-		goto fail;
-	}
-
-	pte = find_mapping_and_check(badvaddr, PF_ACCESS_WRITE, istate, &pfrc);
-	if (!pte) {
-		switch (pfrc) {
-		case AS_PF_FAULT:
-			goto fail;
-			break;
-		case AS_PF_DEFER:
-			/*
-			 * The page fault came during copy_from_uspace()
-			 * or copy_to_uspace().
-			 */
-			return;
-		default:
-			panic("Unexpected pfrc (%d).", pfrc);
-		}
-	}
-
-	/*
-	 * Read the faulting TLB entry.
-	 */
-	tlbr();
-
-	/*
-	 * Record access and write to PTE.
-	 */
-	pte->a = 1;
-	pte->d = 1;
-
-	tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->w, pte->cacheable,
-	    pte->pfn);
-
-	/*
-	 * The entry is to be updated in TLB.
-	 */
-	if ((badvaddr / PAGE_SIZE) % 2 == 0)
-		cp0_entry_lo0_write(lo.value);
-	else
-		cp0_entry_lo1_write(lo.value);
-	cp0_pagemask_write(TLB_PAGE_MASK_16K);
-	tlbwi();
-
-	return;
-	
-fail:
-	tlb_modified_fail(istate);
-}
-
-void tlb_refill_fail(istate_t *istate)
-{
-	uintptr_t va = cp0_badvaddr_read();
-	
-	fault_if_from_uspace(istate, "TLB Refill Exception on %p.",
-	    (void *) va);
-	panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, "TLB Refill Exception.");
-}
-
-
-void tlb_invalid_fail(istate_t *istate)
-{
-	uintptr_t va = cp0_badvaddr_read();
-	
-	fault_if_from_uspace(istate, "TLB Invalid Exception on %p.",
-	    (void *) va);
-	panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, "TLB Invalid Exception.");
-}
-
-void tlb_modified_fail(istate_t *istate)
-{
-	uintptr_t va = cp0_badvaddr_read();
-	
-	fault_if_from_uspace(istate, "TLB Modified Exception on %p.",
-	    (void *) va);
-	panic_memtrap(istate, PF_ACCESS_WRITE, va, "TLB Modified Exception.");
+	ASSERT(!index.p);
+
+	pte = find_mapping_and_check(badvaddr, PF_ACCESS_WRITE, istate);
+	if (pte) {
+		/*
+		 * Read the faulting TLB entry.
+		 */
+		tlbr();
+
+		/*
+		 * Record access and write to PTE.
+		 */
+		pte->a = 1;
+		pte->d = 1;
+
+		tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->w,
+		    pte->cacheable, pte->pfn);
+
+		/*
+		 * The entry is to be updated in TLB.
+		 */
+		if ((badvaddr / PAGE_SIZE) % 2 == 0)
+			cp0_entry_lo0_write(lo.value);
+		else
+			cp0_entry_lo1_write(lo.value);
+		cp0_pagemask_write(TLB_PAGE_MASK_16K);
+		tlbwi();
+	}
 }
 
@@ -334,12 +232,8 @@
  * @param access	Access mode that caused the fault.
  * @param istate	Pointer to interrupted state.
- * @param pfrc		Pointer to variable where as_page_fault() return code
- * 			will be stored.
  *
  * @return		PTE on success, NULL otherwise.
  */
-pte_t *
-find_mapping_and_check(uintptr_t badvaddr, int access, istate_t *istate,
-    int *pfrc)
+pte_t *find_mapping_and_check(uintptr_t badvaddr, int access, istate_t *istate)
 {
 	entry_hi_t hi;
@@ -348,11 +242,5 @@
 	hi.value = cp0_entry_hi_read();
 
-	/*
-	 * Handler cannot succeed if the ASIDs don't match.
-	 */
-	if (hi.asid != AS->asid) {
-		printf("EntryHi.asid=%d, AS->asid=%d\n", hi.asid, AS->asid);
-		return NULL;
-	}
+	ASSERT(hi.asid == AS->asid);
 
 	/*
@@ -366,32 +254,18 @@
 		 */
 		return pte;
-	} else {
-		int rc;
-		
-		/*
-		 * Mapping not found in page tables.
-		 * Resort to higher-level page fault handler.
-		 */
-		switch (rc = as_page_fault(badvaddr, access, istate)) {
-		case AS_PF_OK:
-			/*
-			 * The higher-level page fault handler succeeded,
-			 * The mapping ought to be in place.
-			 */
-			pte = page_mapping_find(AS, badvaddr, true);
-			ASSERT(pte && pte->p);
-			ASSERT(pte->w || access != PF_ACCESS_WRITE);
-			return pte;
-		case AS_PF_DEFER:
-			*pfrc = AS_PF_DEFER;
-			return NULL;
-		case AS_PF_FAULT:
-			*pfrc = AS_PF_FAULT;
-			return NULL;
-		default:
-			panic("Unexpected rc (%d).", rc);
-		}
-		
-	}
+	}
+
+	/*
+	 * Mapping not found in page tables.
+	 * Resort to higher-level page fault handler.
+	 */
+	if (as_page_fault(badvaddr, access, istate) == AS_PF_OK) {
+		pte = page_mapping_find(AS, badvaddr, true);
+		ASSERT(pte && pte->p);
+		ASSERT(pte->w || access != PF_ACCESS_WRITE);
+		return pte;
+	}
+
+	return NULL;
 }
 
Index: kernel/arch/mips64/src/mm/tlb.c
===================================================================
--- kernel/arch/mips64/src/mm/tlb.c	(revision 9043309ca559f4ee30a58bf6d6fb595b8add955e)
+++ kernel/arch/mips64/src/mm/tlb.c	(revision 1dbc43f1c037ded959f69e4b6346df8bf12e2431)
@@ -79,6 +79,4 @@
  * @param access   Access mode that caused the fault.
  * @param istate   Pointer to interrupted state.
- * @param pfrc     Pointer to variable where as_page_fault()
- *                 return code will be stored.
  *
  * @return PTE on success, NULL otherwise.
@@ -86,16 +84,10 @@
  */
 static pte_t *find_mapping_and_check(uintptr_t badvaddr, int access,
-    istate_t *istate, int *pfrc)
+    istate_t *istate)
 {
 	entry_hi_t hi;
 	hi.value = cp0_entry_hi_read();
 	
-	/*
-	 * Handler cannot succeed if the ASIDs don't match.
-	 */
-	if (hi.asid != AS->asid) {
-		printf("EntryHi.asid=%d, AS->asid=%d\n", hi.asid, AS->asid);
-		return NULL;
-	}
+	ASSERT(hi.asid == AS->asid);
 	
 	/*
@@ -109,32 +101,23 @@
 		 */
 		return pte;
-	} else {
-		int rc;
-		
-		/*
-		 * Mapping not found in page tables.
-		 * Resort to higher-level page fault handler.
-		 */
-		switch (rc = as_page_fault(badvaddr, access, istate)) {
-		case AS_PF_OK:
-			/*
-			 * The higher-level page fault handler succeeded,
-			 * The mapping ought to be in place.
-			 */
-			pte = page_mapping_find(AS, badvaddr, true);
-			ASSERT(pte);
-			ASSERT(pte->p);
-			ASSERT((pte->w) || (access != PF_ACCESS_WRITE));
-			return pte;
-		case AS_PF_DEFER:
-			*pfrc = AS_PF_DEFER;
-			return NULL;
-		case AS_PF_FAULT:
-			*pfrc = AS_PF_FAULT;
-			return NULL;
-		default:
-			panic("Unexpected return code (%d).", rc);
-		}
-	}
+	}
+
+	/*
+	 * Mapping not found in page tables.
+	 * Resort to higher-level page fault handler.
+	 */
+	if (as_page_fault(badvaddr, access, istate) == AS_PF_OK) {
+		/*
+		 * The higher-level page fault handler succeeded,
+		 * The mapping ought to be in place.
+		 */
+		pte = page_mapping_find(AS, badvaddr, true);
+		ASSERT(pte);
+		ASSERT(pte->p);
+		ASSERT((pte->w) || (access != PF_ACCESS_WRITE));
+		return pte;
+	}
+
+	return NULL;
 }
 
@@ -156,31 +139,4 @@
 }
 
-static void tlb_refill_fail(istate_t *istate)
-{
-	uintptr_t va = cp0_badvaddr_read();
-	
-	fault_if_from_uspace(istate, "TLB Refill Exception on %p.",
-	    (void *) va);
-	panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, "TLB Refill Exception.");
-}
-
-static void tlb_invalid_fail(istate_t *istate)
-{
-	uintptr_t va = cp0_badvaddr_read();
-	
-	fault_if_from_uspace(istate, "TLB Invalid Exception on %p.",
-	    (void *) va);
-	panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, "TLB Invalid Exception.");
-}
-
-static void tlb_modified_fail(istate_t *istate)
-{
-	uintptr_t va = cp0_badvaddr_read();
-	
-	fault_if_from_uspace(istate, "TLB Modified Exception on %p.",
-	    (void *) va);
-	panic_memtrap(istate, PF_ACCESS_WRITE, va, "TLB Modified Exception.");
-}
-
 /** Process TLB Refill Exception.
  *
@@ -196,55 +152,34 @@
 	mutex_unlock(&AS->lock);
 	
-	int pfrc;
-	pte_t *pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ,
-	    istate, &pfrc);
-	if (!pte) {
-		switch (pfrc) {
-		case AS_PF_FAULT:
-			goto fail;
-			break;
-		case AS_PF_DEFER:
-			/*
-			 * The page fault came during copy_from_uspace()
-			 * or copy_to_uspace().
-			 */
-			return;
-		default:
-			panic("Unexpected pfrc (%d).", pfrc);
+	pte_t *pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate);
+	if (pte) {
+		/*
+		 * Record access to PTE.
+		 */
+		pte->a = 1;
+	
+		entry_lo_t lo;
+		entry_hi_t hi;
+	
+		tlb_prepare_entry_hi(&hi, asid, badvaddr);
+		tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->c,
+		    pte->frame);
+	
+		/*
+		 * New entry is to be inserted into TLB
+		 */
+		cp0_entry_hi_write(hi.value);
+	
+		if ((badvaddr / PAGE_SIZE) % 2 == 0) {
+			cp0_entry_lo0_write(lo.value);
+			cp0_entry_lo1_write(0);
+		} else {
+			cp0_entry_lo0_write(0);
+			cp0_entry_lo1_write(lo.value);
 		}
-	}
-	
-	/*
-	 * Record access to PTE.
-	 */
-	pte->a = 1;
-	
-	entry_lo_t lo;
-	entry_hi_t hi;
-	
-	tlb_prepare_entry_hi(&hi, asid, badvaddr);
-	tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->c,
-	    pte->frame);
-	
-	/*
-	 * New entry is to be inserted into TLB
-	 */
-	cp0_entry_hi_write(hi.value);
-	
-	if ((badvaddr / PAGE_SIZE) % 2 == 0) {
-		cp0_entry_lo0_write(lo.value);
-		cp0_entry_lo1_write(0);
-	} else {
-		cp0_entry_lo0_write(0);
-		cp0_entry_lo1_write(lo.value);
-	}
-	
-	cp0_pagemask_write(TLB_PAGE_MASK_16K);
-	tlbwr();
-	
-	return;
-	
-fail:
-	tlb_refill_fail(istate);
+	
+		cp0_pagemask_write(TLB_PAGE_MASK_16K);
+		tlbwr();
+	}
 }
 
@@ -271,60 +206,34 @@
 	index.value = cp0_index_read();
 	
-	/*
-	 * Fail if the entry is not in TLB.
-	 */
-	if (index.p) {
-		printf("TLB entry not found.\n");
-		goto fail;
-	}
-	
-	int pfrc;
-	pte_t *pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ,
-	    istate, &pfrc);
-	if (!pte) {
-		switch (pfrc) {
-		case AS_PF_FAULT:
-			goto fail;
-			break;
-		case AS_PF_DEFER:
-			/*
-			 * The page fault came during copy_from_uspace()
-			 * or copy_to_uspace().
-			 */
-			return;
-		default:
-			panic("Unexpected pfrc (%d).", pfrc);
-		}
-	}
-	
-	/*
-	 * Read the faulting TLB entry.
-	 */
-	tlbr();
-	
-	/*
-	 * Record access to PTE.
-	 */
-	pte->a = 1;
-	
-	entry_lo_t lo;
-	tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->c,
-	    pte->frame);
-	
-	/*
-	 * The entry is to be updated in TLB.
-	 */
-	if ((badvaddr / PAGE_SIZE) % 2 == 0)
-		cp0_entry_lo0_write(lo.value);
-	else
-		cp0_entry_lo1_write(lo.value);
-	
-	cp0_pagemask_write(TLB_PAGE_MASK_16K);
-	tlbwi();
-	
-	return;
-	
-fail:
-	tlb_invalid_fail(istate);
+	ASSERT(!index.p);
+	
+	pte_t *pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate);
+	if (pte) {
+		/*
+		 * Read the faulting TLB entry.
+		 */
+		tlbr();
+	
+		/*
+		 * Record access to PTE.
+		 */
+		pte->a = 1;
+
+		entry_lo_t lo;
+		tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->d, pte->c,
+		    pte->frame);
+	
+		/*
+		 * The entry is to be updated in TLB.
+		 */
+		if ((badvaddr / PAGE_SIZE) % 2 == 0)
+			cp0_entry_lo0_write(lo.value);
+		else
+			cp0_entry_lo1_write(lo.value);
+	
+		cp0_pagemask_write(TLB_PAGE_MASK_16K);
+		tlbwi();
+	}
+	
 }
 
@@ -351,61 +260,34 @@
 	index.value = cp0_index_read();
 	
-	/*
-	 * Fail if the entry is not in TLB.
-	 */
-	if (index.p) {
-		printf("TLB entry not found.\n");
-		goto fail;
-	}
-	
-	int pfrc;
-	pte_t *pte = find_mapping_and_check(badvaddr, PF_ACCESS_WRITE,
-	    istate, &pfrc);
-	if (!pte) {
-		switch (pfrc) {
-		case AS_PF_FAULT:
-			goto fail;
-			break;
-		case AS_PF_DEFER:
-			/*
-			 * The page fault came during copy_from_uspace()
-			 * or copy_to_uspace().
-			 */
-			return;
-		default:
-			panic("Unexpected pfrc (%d).", pfrc);
-		}
-	}
-	
-	/*
-	 * Read the faulting TLB entry.
-	 */
-	tlbr();
-	
-	/*
-	 * Record access and write to PTE.
-	 */
-	pte->a = 1;
-	pte->d = 1;
-	
-	entry_lo_t lo;
-	tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->w, pte->c,
-	    pte->frame);
-	
-	/*
-	 * The entry is to be updated in TLB.
-	 */
-	if ((badvaddr / PAGE_SIZE) % 2 == 0)
-		cp0_entry_lo0_write(lo.value);
-	else
-		cp0_entry_lo1_write(lo.value);
-	
-	cp0_pagemask_write(TLB_PAGE_MASK_16K);
-	tlbwi();
-	
-	return;
-	
-fail:
-	tlb_modified_fail(istate);
+	ASSERT(!index.p);
+	
+	pte_t *pte = find_mapping_and_check(badvaddr, PF_ACCESS_WRITE, istate);
+	if (pte) {
+		/*
+		 * Read the faulting TLB entry.
+		 */
+		tlbr();
+	
+		/*
+		 * Record access and write to PTE.
+		 */
+		pte->a = 1;
+		pte->d = 1;
+	
+		entry_lo_t lo;
+		tlb_prepare_entry_lo(&lo, pte->g, pte->p, pte->w, pte->c,
+		    pte->frame);
+	
+		/*
+		 * The entry is to be updated in TLB.
+		 */
+		if ((badvaddr / PAGE_SIZE) % 2 == 0)
+			cp0_entry_lo0_write(lo.value);
+		else
+			cp0_entry_lo1_write(lo.value);
+	
+		cp0_pagemask_write(TLB_PAGE_MASK_16K);
+		tlbwi();
+	}
 }
 
Index: kernel/arch/ppc32/src/mm/pht.c
===================================================================
--- kernel/arch/ppc32/src/mm/pht.c	(revision 9043309ca559f4ee30a58bf6d6fb595b8add955e)
+++ kernel/arch/ppc32/src/mm/pht.c	(revision 1dbc43f1c037ded959f69e4b6346df8bf12e2431)
@@ -49,6 +49,4 @@
  * @param access   Access mode that caused the fault.
  * @param istate   Pointer to interrupted state.
- * @param pfrc     Pointer to variable where as_page_fault() return code
- *                 will be stored.
  *
  * @return PTE on success, NULL otherwise.
@@ -56,5 +54,5 @@
  */
 static pte_t *find_mapping_and_check(as_t *as, uintptr_t badvaddr, int access,
-    istate_t *istate, int *pfrc)
+    istate_t *istate)
 {
 	/*
@@ -68,38 +66,20 @@
 		 */
 		return pte;
-	} else {
+	}
+	/*
+	 * Mapping not found in page tables.
+	 * Resort to higher-level page fault handler.
+	 */
+	if (as_page_fault(badvaddr, access, istate) == AS_PF_OK) {
 		/*
-		 * Mapping not found in page tables.
-		 * Resort to higher-level page fault handler.
+		 * The higher-level page fault handler succeeded,
+		 * The mapping ought to be in place.
 		 */
-		int rc = as_page_fault(badvaddr, access, istate);
-		switch (rc) {
-		case AS_PF_OK:
-			/*
-			 * The higher-level page fault handler succeeded,
-			 * The mapping ought to be in place.
-			 */
-			pte = page_mapping_find(as, badvaddr, true);
-			ASSERT((pte) && (pte->present));
-			*pfrc = 0;
-			return pte;
-		case AS_PF_DEFER:
-			*pfrc = rc;
-			return NULL;
-		case AS_PF_FAULT:
-			*pfrc = rc;
-			return NULL;
-		default:
-			panic("Unexpected rc (%d).", rc);
-		}
-	}
-}
-
-static void pht_refill_fail(uintptr_t badvaddr, istate_t *istate)
-{
-	fault_if_from_uspace(istate, "PHT Refill Exception on %p.",
-	    (void *) badvaddr);
-	panic_memtrap(istate, PF_ACCESS_UNKNOWN, badvaddr,
-	    "PHT Refill Exception.");
+		pte = page_mapping_find(as, badvaddr, true);
+		ASSERT((pte) && (pte->present));
+		return pte;
+	}
+
+	return NULL;
 }
 
@@ -202,27 +182,12 @@
 		badvaddr = istate->pc;
 	
-	int pfrc;
 	pte_t *pte = find_mapping_and_check(AS, badvaddr,
-	    PF_ACCESS_READ /* FIXME */, istate, &pfrc);
-	
-	if (!pte) {
-		switch (pfrc) {
-		case AS_PF_FAULT:
-			pht_refill_fail(badvaddr, istate);
-			return;
-		case AS_PF_DEFER:
-			/*
-			 * The page fault came during copy_from_uspace()
-			 * or copy_to_uspace().
-			 */
-			return;
-		default:
-			panic("Unexpected pfrc (%d).", pfrc);
-		}
-	}
-	
-	/* Record access to PTE */
-	pte->accessed = 1;
-	pht_insert(badvaddr, pte);
+	    PF_ACCESS_READ /* FIXME */, istate);
+	
+	if (pte) {
+		/* Record access to PTE */
+		pte->accessed = 1;
+		pht_insert(badvaddr, pte);
+	}
 }
 
Index: kernel/arch/sparc64/src/mm/sun4u/tlb.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4u/tlb.c	(revision 9043309ca559f4ee30a58bf6d6fb595b8add955e)
+++ kernel/arch/sparc64/src/mm/sun4u/tlb.c	(revision 1dbc43f1c037ded959f69e4b6346df8bf12e2431)
@@ -58,10 +58,4 @@
 static void dtlb_pte_copy(pte_t *, size_t, bool);
 static void itlb_pte_copy(pte_t *, size_t);
-static void do_fast_instruction_access_mmu_miss_fault(istate_t *, uintptr_t,
-    const char *);
-static void do_fast_data_access_mmu_miss_fault(istate_t *, tlb_tag_access_reg_t,
-    const char *);
-static void do_fast_data_access_protection_fault(istate_t *,
-    tlb_tag_access_reg_t, const char *);
 
 const char *context_encoding[] = {
@@ -222,9 +216,5 @@
 		 * handler.
 		 */
-		if (as_page_fault(page_16k, PF_ACCESS_EXEC, istate) ==
-		    AS_PF_FAULT) {
-			do_fast_instruction_access_mmu_miss_fault(istate,
-			    istate->tpc, __func__);
-		}
+		as_page_fault(page_16k, PF_ACCESS_EXEC, istate);
 	}
 }
@@ -256,12 +246,10 @@
 		if (!tag.vpn) {
 			/* NULL access in kernel */
-			do_fast_data_access_mmu_miss_fault(istate, tag,
-			    "Dereferencing NULL pointer.");
+			panic("NULL pointer dereference.");
 		} else if (page_8k >= end_of_identity) {
 			/* Kernel non-identity. */
 			as = AS_KERNEL;
 		} else {
-			do_fast_data_access_mmu_miss_fault(istate, tag,
-		    "Unexpected kernel page fault.");
+			panic("Unexpected kernel page fault.");
 		}
 	}
@@ -283,9 +271,5 @@
 		 * handler.
 		 */
-		if (as_page_fault(page_16k, PF_ACCESS_READ, istate) ==
-		    AS_PF_FAULT) {
-			do_fast_data_access_mmu_miss_fault(istate, tag,
-			    __func__);
-		}
+		as_page_fault(page_16k, PF_ACCESS_READ, istate);
 	}
 }
@@ -332,9 +316,5 @@
 		 * handler.
 		 */		
-		if (as_page_fault(page_16k, PF_ACCESS_WRITE, istate) ==
-		    AS_PF_FAULT) {
-			do_fast_data_access_protection_fault(istate, tag,
-			    __func__);
-		}
+		as_page_fault(page_16k, PF_ACCESS_WRITE, istate);
 	}
 }
@@ -428,33 +408,4 @@
 
 #endif
-
-void do_fast_instruction_access_mmu_miss_fault(istate_t *istate,
-    uintptr_t va, const char *str)
-{
-	fault_if_from_uspace(istate, "%s, address=%p.", str, (void *) va);
-	panic_memtrap(istate, PF_ACCESS_EXEC, va, str);
-}
-
-void do_fast_data_access_mmu_miss_fault(istate_t *istate,
-    tlb_tag_access_reg_t tag, const char *str)
-{
-	uintptr_t va;
-
-	va = tag.vpn << MMU_PAGE_WIDTH;
-	fault_if_from_uspace(istate, "%s, page=%p (asid=%u).", str,
-	    (void *) va, tag.context);
-	panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, str);
-}
-
-void do_fast_data_access_protection_fault(istate_t *istate,
-    tlb_tag_access_reg_t tag, const char *str)
-{
-	uintptr_t va;
-
-	va = tag.vpn << MMU_PAGE_WIDTH;
-	fault_if_from_uspace(istate, "%s, page=%p (asid=%u).", str,
-	    (void *) va, tag.context);
-	panic_memtrap(istate, PF_ACCESS_WRITE, va, str);
-}
 
 void describe_dmmu_fault(void)
Index: kernel/arch/sparc64/src/mm/sun4v/tlb.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4v/tlb.c	(revision 9043309ca559f4ee30a58bf6d6fb595b8add955e)
+++ kernel/arch/sparc64/src/mm/sun4v/tlb.c	(revision 1dbc43f1c037ded959f69e4b6346df8bf12e2431)
@@ -62,10 +62,4 @@
 static void itlb_pte_copy(pte_t *);
 static void dtlb_pte_copy(pte_t *, bool);
-static void do_fast_instruction_access_mmu_miss_fault(istate_t *, uintptr_t,
-    const char *);
-static void do_fast_data_access_mmu_miss_fault(istate_t *, uint64_t,
-    const char *);
-static void do_fast_data_access_protection_fault(istate_t *,
-    uint64_t, const char *);
 
 /*
@@ -235,8 +229,5 @@
 		 * handler.
 		 */
-		if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) {
-			do_fast_instruction_access_mmu_miss_fault(istate,
-			    istate->tpc, __func__);
-		}
+		as_page_fault(va, PF_ACCESS_EXEC, istate);
 	}
 }
@@ -264,9 +255,7 @@
 		if (va == 0) {
 			/* NULL access in kernel */
-			do_fast_data_access_mmu_miss_fault(istate, page_and_ctx,
-			    __func__);
+			panic("NULL pointer dereference.");
 		}
-		do_fast_data_access_mmu_miss_fault(istate, page_and_ctx, "Unexpected "
-		    "kernel page fault.");
+		panic("Unexpected kernel page fault.");
 	}
 
@@ -287,8 +276,5 @@
 		 * handler.
 		 */		
-		if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) {
-			do_fast_data_access_mmu_miss_fault(istate, page_and_ctx,
-			    __func__);
-		}
+		as_page_fault(va, PF_ACCESS_READ, istate);
 	}
 }
@@ -329,8 +315,5 @@
 		 * handler.
 		 */		
-		if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) {
-			do_fast_data_access_protection_fault(istate, page_and_ctx,
-			    __func__);
-		}
+		as_page_fault(va, PF_ACCESS_WRITE, istate);
 	}
 }
@@ -346,30 +329,4 @@
 }
 
-void do_fast_instruction_access_mmu_miss_fault(istate_t *istate, uintptr_t va,
-    const char *str)
-{
-	fault_if_from_uspace(istate, "%s, address=%p.", str,
-	    (void *) va);
-	panic_memtrap(istate, PF_ACCESS_EXEC, va, str);
-}
-
-void do_fast_data_access_mmu_miss_fault(istate_t *istate,
-    uint64_t page_and_ctx, const char *str)
-{
-	fault_if_from_uspace(istate, "%s, page=%p (asid=%" PRId64 ").", str,
-	    (void *) DMISS_ADDRESS(page_and_ctx), DMISS_CONTEXT(page_and_ctx));
-	panic_memtrap(istate, PF_ACCESS_UNKNOWN, DMISS_ADDRESS(page_and_ctx),
-	    str);
-}
-
-void do_fast_data_access_protection_fault(istate_t *istate,
-    uint64_t page_and_ctx, const char *str)
-{
-	fault_if_from_uspace(istate, "%s, page=%p (asid=%" PRId64 ").", str,
-	    (void *) DMISS_ADDRESS(page_and_ctx), DMISS_CONTEXT(page_and_ctx));
-	panic_memtrap(istate, PF_ACCESS_WRITE, DMISS_ADDRESS(page_and_ctx),
-	    str);
-}
-
 /**
  * Describes the exact condition which caused the last DMMU fault.
