Index: kernel/arch/amd64/src/mm/page.c
===================================================================
--- kernel/arch/amd64/src/mm/page.c	(revision 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/arch/amd64/src/mm/page.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -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 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/arch/arm32/src/mm/page_fault.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -289,10 +289,5 @@
 #error "Unsupported architecture"
 #endif
-	const 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);
 }
 
@@ -305,12 +300,5 @@
 void prefetch_abort(unsigned int exc_no, istate_t *istate)
 {
-	/* NOTE: We should use IFAR and IFSR here. */
-	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 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/arch/ia64/src/mm/tlb.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -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 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/arch/mips32/src/mm/tlb.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -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 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/arch/mips64/src/mm/tlb.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -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 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/arch/ppc32/src/mm/pht.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -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 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/arch/sparc64/src/mm/sun4u/tlb.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -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 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/arch/sparc64/src/mm/sun4v/tlb.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -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.
Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/generic/include/mm/as.h	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -68,12 +68,15 @@
 #define AS_AREA_ATTR_PARTIAL  1  /**< Not fully initialized area. */
 
+/** The page fault was resolved by as_page_fault(). */
+#define AS_PF_OK     0 
+
+/** The page fault was caused by memcpy_from_uspace() or memcpy_to_uspace(). */
+#define AS_PF_DEFER  1
+
 /** The page fault was not resolved by as_page_fault(). */
-#define AS_PF_FAULT  0
-
-/** The page fault was resolved by as_page_fault(). */
-#define AS_PF_OK  1
-
-/** The page fault was caused by memcpy_from_uspace() or memcpy_to_uspace(). */
-#define AS_PF_DEFER  2
+#define AS_PF_FAULT  2
+
+/** The page fault was not resolved by as_page_fault(). Non-verbose version. */
+#define AS_PF_SILENT 3
 
 /** Address space structure.
Index: kernel/generic/include/proc/task.h
===================================================================
--- kernel/generic/include/proc/task.h	(revision 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/generic/include/proc/task.h	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -134,7 +134,4 @@
 	uint64_t ucycles;
 	uint64_t kcycles;
-
-	/** If true, do not attempt to print a verbose kill message. */ 
-	bool silent_kill;
 } task_t;
 
Index: kernel/generic/src/interrupt/interrupt.c
===================================================================
--- kernel/generic/src/interrupt/interrupt.c	(revision 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/generic/src/interrupt/interrupt.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -166,18 +166,17 @@
 }
 
-static NO_TRACE void fault_from_uspace_core(istate_t *istate, const char *fmt, va_list args)
-{
-	if (!TASK->silent_kill) {
-		printf("Task %s (%" PRIu64 ") killed due to an exception at "
-		    "program counter %p.\n", TASK->name, TASK->taskid,
-		    (void *) istate_get_pc(istate));
-	
-		istate_decode(istate);
-		stack_trace_istate(istate);
-	
-		printf("Kill message: ");
-		vprintf(fmt, args);
-		printf("\n");
-	}
+static NO_TRACE
+void fault_from_uspace_core(istate_t *istate, const char *fmt, va_list args)
+{
+	printf("Task %s (%" PRIu64 ") killed due to an exception at "
+	    "program counter %p.\n", TASK->name, TASK->taskid,
+	    (void *) istate_get_pc(istate));
+	
+	istate_decode(istate);
+	stack_trace_istate(istate);
+	
+	printf("Kill message: ");
+	vprintf(fmt, args);
+	printf("\n");
 	
 	task_kill_self(true);
Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/generic/src/mm/as.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -79,4 +79,5 @@
 #include <syscall/copy.h>
 #include <arch/interrupt.h>
+#include <interrupt.h>
 
 /**
@@ -1362,9 +1363,11 @@
 int as_page_fault(uintptr_t page, pf_access_t access, istate_t *istate)
 {
+	int rc = AS_PF_FAULT;
+
 	if (!THREAD)
-		return AS_PF_FAULT;
+		goto page_fault;
 	
 	if (!AS)
-		return AS_PF_FAULT;
+		goto page_fault;
 	
 	mutex_lock(&AS->lock);
@@ -1422,5 +1425,6 @@
 	 * Resort to the backend page fault handler.
 	 */
-	if (area->backend->page_fault(area, page, access) != AS_PF_OK) {
+	rc = area->backend->page_fault(area, page, access);
+	if (rc != AS_PF_OK) {
 		page_table_unlock(AS, false);
 		mutex_unlock(&area->lock);
@@ -1443,6 +1447,11 @@
 		istate_set_retaddr(istate,
 		    (uintptr_t) &memcpy_to_uspace_failover_address);
+	} else if (rc == AS_PF_SILENT) {
+		printf("Killing task %" PRIu64 " due to a "
+		    "failed late reservation request.\n", TASK->taskid);
+		task_kill_self(true);
 	} else {
-		return AS_PF_FAULT;
+		fault_if_from_uspace(istate, "Page fault: %p.", (void *) page);
+		panic_memtrap(istate, access, page, NULL);
 	}
 	
Index: kernel/generic/src/mm/backend_anon.c
===================================================================
--- kernel/generic/src/mm/backend_anon.c	(revision 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/generic/src/mm/backend_anon.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -255,11 +255,6 @@
 			 * Reserve the memory for this page now.
 			 */
-			if (!reserve_try_alloc(1)) {
-				printf("Killing task %" PRIu64 " due to a "
-				    "failed late reservation request.\n",
-				    TASK->taskid);
-				TASK->silent_kill = true;
-				return AS_PF_FAULT;
-			}
+			if (!reserve_try_alloc(1))
+				return AS_PF_SILENT;
 		}
 
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 0ab362c63d0526b716ccb52dd26eaf575f666d5d)
+++ kernel/generic/src/proc/task.c	(revision e32720fffe177c9b6bf6489727240c59ac6a953b)
@@ -197,6 +197,4 @@
 	task->kcycles = 0;
 
-	task->silent_kill = false;
-	
 	task->ipc_info.call_sent = 0;
 	task->ipc_info.call_received = 0;
