Index: kernel/arch/sparc64/src/mm/tlb.c
===================================================================
--- kernel/arch/sparc64/src/mm/tlb.c	(revision 9f63a83a9944f73d20a34872d07428dd2604da42)
+++ kernel/arch/sparc64/src/mm/tlb.c	(revision 8dbc18cf90da942617936d7574d4dfc13249644d)
@@ -328,5 +328,5 @@
 		d.value = itlb_data_access_read(i);
 		t.value = itlb_tag_read_read(i);
-		
+
 		printf("%d: vpn=%#llx, context=%d, v=%d, size=%d, nfo=%d, "
 			"ie=%d, soft2=%#x, diag=%#x, pfn=%#x, soft=%#x, l=%d, "
@@ -409,7 +409,16 @@
 	tlb_tag_read_reg_t t;
 
+	/*
+	 * Walk all ITLB and DTLB entries and remove all unlocked mappings.
+	 *
+	 * The kernel doesn't use global mappings so any locked global mappings
+	 * found  must have been created by someone else. Their only purpose now
+	 * is to collide with proper mappings. Invalidate immediately. It should
+	 * be safe to invalidate them as late as now.
+	 */
+
 	for (i = 0; i < ITLB_ENTRY_COUNT; i++) {
 		d.value = itlb_data_access_read(i);
-		if (!d.l) {
+		if (!d.l || d.g) {
 			t.value = itlb_tag_read_read(i);
 			d.v = false;
@@ -421,5 +430,5 @@
 	for (i = 0; i < DTLB_ENTRY_COUNT; i++) {
 		d.value = dtlb_data_access_read(i);
-		if (!d.l) {
+		if (!d.l || d.g) {
 			t.value = dtlb_tag_read_read(i);
 			d.v = false;
Index: kernel/arch/sparc64/src/start.S
===================================================================
--- kernel/arch/sparc64/src/start.S	(revision 9f63a83a9944f73d20a34872d07428dd2604da42)
+++ kernel/arch/sparc64/src/start.S	(revision 8dbc18cf90da942617936d7574d4dfc13249644d)
@@ -100,5 +100,5 @@
 
 	/* 
-	 * Take over the DMMU by installing global locked TTE entry identically
+	 * Take over the DMMU by installing locked TTE entry identically
 	 * mapping the first 4M of memory.
 	 *
