Index: kernel/arch/sparc64/src/mm/sun4v/frame.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4v/frame.c	(revision 59fb782a51d15d6df341976b45edaf3497af36fc)
+++ kernel/arch/sparc64/src/mm/sun4v/frame.c	(revision b3cf94696741d529bde1e5bbdf993a27d72136cc)
@@ -101,4 +101,7 @@
 	 */
 	frame_mark_unavailable(ADDR2PFN(KA2PA(PFN2ADDR(0))), 1);
+
+	/* PA2KA will work only on low-memory. */
+	end_of_identity = PA2KA(config.physmem_end - FRAME_SIZE) + PAGE_SIZE;
 }
 
Index: kernel/arch/sparc64/src/mm/sun4v/tlb.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4v/tlb.c	(revision 59fb782a51d15d6df341976b45edaf3497af36fc)
+++ kernel/arch/sparc64/src/mm/sun4v/tlb.c	(revision b3cf94696741d529bde1e5bbdf993a27d72136cc)
@@ -251,4 +251,5 @@
 	uintptr_t va = DMISS_ADDRESS(page_and_ctx);
 	uint16_t ctx = DMISS_CONTEXT(page_and_ctx);
+	as_t *as = AS;
 
 	if (ctx == ASID_KERNEL) {
@@ -256,9 +257,13 @@
 			/* NULL access in kernel */
 			panic("NULL pointer dereference.");
+		} else if (va >= end_of_identity) {
+			/* Kernel non-identity */
+			as = AS_KERNEL;
+		} else {
+			panic("Unexpected kernel page fault.");
 		}
-		panic("Unexpected kernel page fault.");
-	}
-
-	t = page_mapping_find(AS, va, true);
+	}
+
+	t = page_mapping_find(as, va, true);
 	if (t) {
 		/*
@@ -295,6 +300,10 @@
 	uintptr_t va = DMISS_ADDRESS(page_and_ctx);
 	uint16_t ctx = DMISS_CONTEXT(page_and_ctx);
-
-	t = page_mapping_find(AS, va, true);
+	as_t *as = AS;
+
+	if (ctx == ASID_KERNEL)
+		as = AS_KERNEL;
+
+	t = page_mapping_find(as, va, true);
 	if (t && PTE_WRITABLE(t)) {
 		/*
