--- 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);