kernel/eka/memmodel/epoc/flexible/arm/xsched.cia
branchanywhere
changeset 41 d32f34975bbf
parent 36 538db54a451d
--- a/kernel/eka/memmodel/epoc/flexible/arm/xsched.cia	Mon Feb 01 19:40:00 2010 +0100
+++ b/kernel/eka/memmodel/epoc/flexible/arm/xsched.cia	Mon Feb 01 19:49:38 2010 +0100
@@ -176,10 +176,15 @@
 
 	// restore alias...
 	asm("got_alias:");
+	// Disable interrupts so setting the alias pde is must complete before
+	// Mmu::RemoveAliasesForPageTable() can execute the alias IPI and vice 
+	// versa.
+	__ASM_CLI();						// interrupts off
 	asm("ldr r8, [r3, #%a0]" : : "i" (_FOFF(DMemModelThread, iAliasPdePtr)-_FOFF(DThread, iNThread)) );
 	asm("ldr r7, [r3, #%a0]" : : "i" (_FOFF(DMemModelThread, iAliasPde)-_FOFF(DThread, iNThread)) );
 	asm("orr r6, r6, r4");				// put ASID into address for TLB flush later...
 	asm("str r7, [r8]");				// restore PDE for alias
+	__ASM_STI();						// interrupts back on
 	
 	CACHE_MAINTENANCE_PDE_PTE_UPDATED(r8);