kernel/eka/memmodel/epoc/flexible/arm/xsched.cia
changeset 11 329ab0095843
parent 9 96e5fb8b040d
--- a/kernel/eka/memmodel/epoc/flexible/arm/xsched.cia	Thu Jan 07 13:38:45 2010 +0200
+++ b/kernel/eka/memmodel/epoc/flexible/arm/xsched.cia	Mon Jan 18 21:31:10 2010 +0200
@@ -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);