Index: generic/src/mm/as.c
===================================================================
--- generic/src/mm/as.c	(revision d6e5cbc6f5fd409a91c10cc64f7841774bcf8b94)
+++ generic/src/mm/as.c	(revision 5552d60c21fc8d5a719935adec188c854c60d858)
@@ -271,4 +271,9 @@
 		 * No need to check for overlaps.
 		 */
+
+		/*
+		 * Start TLB shootdown sequence.
+		 */
+		tlb_shootdown_start(TLB_INVL_PAGES, AS->asid, area->base + pages*PAGE_SIZE, area->pages - pages);
 
 		/*
@@ -331,8 +336,8 @@
 			}
 		}
-		/*
-		 * Invalidate TLB's.
-		 */
-		tlb_shootdown_start(TLB_INVL_PAGES, AS->asid, area->base + pages*PAGE_SIZE, area->pages - pages);
+
+		/*
+		 * Finish TLB shootdown sequence.
+		 */
 		tlb_invalidate_pages(AS->asid, area->base + pages*PAGE_SIZE, area->pages - pages);
 		tlb_shootdown_finalize();
@@ -384,4 +389,9 @@
 
 	base = area->base;
+
+	/*
+	 * Start TLB shootdown sequence.
+	 */
+	tlb_shootdown_start(TLB_INVL_PAGES, AS->asid, area->base, area->pages);
 
 	/*
@@ -418,12 +428,12 @@
 		}
 	}
-	btree_destroy(&area->used_space);
-
-	/*
-	 * Invalidate TLB's.
-	 */
-	tlb_shootdown_start(TLB_INVL_PAGES, AS->asid, area->base, area->pages);
+
+	/*
+	 * Finish TLB shootdown sequence.
+	 */
 	tlb_invalidate_pages(AS->asid, area->base, area->pages);
 	tlb_shootdown_finalize();
+	
+	btree_destroy(&area->used_space);
 
 	area->attributes |= AS_AREA_ATTR_PARTIAL;
