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 51baa8ad19af87e921ddfb1497fd4610a93ad7a9)
@@ -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;
