Index: kernel/arch/mips32/src/mm/tlb.c
===================================================================
--- kernel/arch/mips32/src/mm/tlb.c	(revision 91befde0e355dc8990678215dc7248b441b4c610)
+++ kernel/arch/mips32/src/mm/tlb.c	(revision e40e3007fc0de3d5c4a7a5ebec5db04d5a48ed6f)
@@ -288,10 +288,4 @@
 
 	/*
-	 * Fail if the page is not writable.
-	 */
-	if (!pte->w)
-		goto fail;
-
-	/*
 	 * Read the faulting TLB entry.
 	 */
@@ -403,5 +397,5 @@
 	 */	
 	pte = page_mapping_find(AS, badvaddr);
-	if (pte && pte->p) {
+	if (pte && pte->p && (pte->w || access != PF_ACCESS_WRITE)) {
 		/*
 		 * Mapping found in page tables.
@@ -426,4 +420,5 @@
 			pte = page_mapping_find(AS, badvaddr);
 			ASSERT(pte && pte->p);
+			ASSERT(pte->w || access != PF_ACCESS_WRITE);
 			return pte;
 			break;
