equal
deleted
inserted
replaced
50 asm("mov ecx, [ebx+%0]": : "i"_FOFF(DMemModelThread,iAliasLinAddr)); |
50 asm("mov ecx, [ebx+%0]": : "i"_FOFF(DMemModelThread,iAliasLinAddr)); |
51 asm("cmp ecx, 0"); |
51 asm("cmp ecx, 0"); |
52 asm("jz done"); |
52 asm("jz done"); |
53 |
53 |
54 // restore alias... |
54 // restore alias... |
|
55 // Disable interrupts so setting the alias pde is must complete before |
|
56 // Mmu::RemoveAliasesForPageTable() can execute the alias IPI and vice |
|
57 // versa. |
|
58 asm("cli "); // turn off interrupts |
55 asm("mov edx, [ebx+%0]": : "i"_FOFF(DMemModelThread,iAliasPdePtr)); |
59 asm("mov edx, [ebx+%0]": : "i"_FOFF(DMemModelThread,iAliasPdePtr)); |
56 asm("mov eax, [ebx+%0]": : "i"_FOFF(DMemModelThread,iAliasPde)); |
60 asm("mov eax, [ebx+%0]": : "i"_FOFF(DMemModelThread,iAliasPde)); |
57 asm("mov [edx], eax"); |
61 asm("mov [edx], eax"); |
58 asm("invlpg [ecx]"); |
62 asm("invlpg [ecx]"); |
|
63 asm("sti "); // turn on interrupts |
59 |
64 |
60 asm("done:"); |
65 asm("done:"); |
61 asm("ret"); |
66 asm("ret"); |
62 }; |
67 }; |
63 |
68 |