kernel/eka/memmodel/epoc/flexible/arm/xsched.cia
changeset 36 538db54a451d
parent 0 a41df078684a
--- a/kernel/eka/memmodel/epoc/flexible/arm/xsched.cia	Tue Jan 19 13:48:03 2010 +0000
+++ 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);