Index: kernel/arch/sparc64/src/mm/tlb.c
===================================================================
--- kernel/arch/sparc64/src/mm/tlb.c	(revision e0b241fd74402f055e3581549efeaa597b289645)
+++ kernel/arch/sparc64/src/mm/tlb.c	(revision 9314ee12dbab7b901af6bd9906a7c6a1fa0aa885)
@@ -375,7 +375,14 @@
 void tlb_invalidate_asid(asid_t asid)
 {
-	/* TODO: write asid to some Context register and encode the register in second parameter below. */
-	itlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_NUCLEUS, 0);
-	dtlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_NUCLEUS, 0);
+	tlb_context_reg_t sc_save, ctx;
+	
+	ctx.v = sc_save.v = mmu_secondary_context_read();
+	ctx.context = asid;
+	mmu_secondary_context_write(ctx.v);
+	
+	itlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_SECONDARY, 0);
+	dtlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_SECONDARY, 0);
+	
+	mmu_secondary_context_write(sc_save.v);
 }
 
@@ -389,10 +396,16 @@
 {
 	int i;
+	tlb_context_reg_t sc_save, ctx;
+	
+	ctx.v = sc_save.v = mmu_secondary_context_read();
+	ctx.context = asid;
+	mmu_secondary_context_write(ctx.v);
 	
 	for (i = 0; i < cnt; i++) {
-		/* TODO: write asid to some Context register and encode the register in second parameter below. */
-		itlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, page + i * PAGE_SIZE);
-		dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, page + i * PAGE_SIZE);
-	}
+		itlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_SECONDARY, page + i * PAGE_SIZE);
+		dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_SECONDARY, page + i * PAGE_SIZE);
+	}
+	
+	mmu_secondary_context_write(sc_save.v);
 }
 
