Index: kernel/arch/sparc64/src/mm/as.c
===================================================================
--- kernel/arch/sparc64/src/mm/as.c	(revision aa802679067c94e7e628f87857e6f9d9c5a55aaf)
+++ kernel/arch/sparc64/src/mm/as.c	(revision 91d6d285e4ddce9e498cf374443f1e209ebfe2cd)
@@ -63,5 +63,5 @@
 #ifdef CONFIG_TSB
 	int order = fnzb32(((ITSB_ENTRY_COUNT+DTSB_ENTRY_COUNT)*sizeof(tsb_entry_t))>>FRAME_WIDTH);
-	uintptr_t tsb = (uintptr_t) frame_alloc(order, flags);
+	uintptr_t tsb = (uintptr_t) frame_alloc(order, flags | FRAME_KA);
 
 	if (!tsb)
@@ -79,5 +79,5 @@
 #ifdef CONFIG_TSB
 	count_t cnt = ((ITSB_ENTRY_COUNT+DTSB_ENTRY_COUNT)*sizeof(tsb_entry_t))>>FRAME_WIDTH;
-	frame_free((uintptr_t) as->arch.itsb);
+	frame_free(KA2PA((uintptr_t) as->arch.itsb));
 	return cnt;
 #else
Index: kernel/arch/sparc64/src/proc/thread.c
===================================================================
--- kernel/arch/sparc64/src/proc/thread.c	(revision aa802679067c94e7e628f87857e6f9d9c5a55aaf)
+++ kernel/arch/sparc64/src/proc/thread.c	(revision 91d6d285e4ddce9e498cf374443f1e209ebfe2cd)
@@ -55,5 +55,5 @@
 		 * belonging to a killed thread.
 		 */
-		frame_free(ALIGN_DOWN((uintptr_t) t->arch.uspace_window_buffer, PAGE_SIZE));
+		frame_free(KA2PA(ALIGN_DOWN((uintptr_t) t->arch.uspace_window_buffer, PAGE_SIZE)));
 	}
 }
@@ -66,5 +66,5 @@
 		 * returned from the slab allocator doesn't have any.
 		 */
-		t->arch.uspace_window_buffer = frame_alloc(ONE_FRAME, 0);
+		t->arch.uspace_window_buffer = frame_alloc(ONE_FRAME, FRAME_KA);
 	} else {
 		uintptr_t uw_buf = (uintptr_t) t->arch.uspace_window_buffer;
