equal
deleted
inserted
replaced
614 } |
614 } |
615 |
615 |
616 TPde* pd = Mmu::PageDirectory(osAsid); |
616 TPde* pd = Mmu::PageDirectory(osAsid); |
617 TInt pdeIndex = aAddr>>KChunkShift; |
617 TInt pdeIndex = aAddr>>KChunkShift; |
618 TPde pde = pd[pdeIndex]; |
618 TPde pde = pd[pdeIndex]; |
|
619 // Get os asid, this is the current thread's process so no need for reference. |
|
620 TUint32 local_asid = ((DMemModelProcess*)iOwningProcess)->OsAsid(); |
619 #ifdef __SMP__ |
621 #ifdef __SMP__ |
620 TLinAddr aliasAddr; |
622 TLinAddr aliasAddr; |
621 #else |
623 #else |
622 TLinAddr aliasAddr = KIPCAlias+(aAddr&(KChunkMask & ~KPageMask)); |
624 TLinAddr aliasAddr = KIPCAlias+(aAddr&(KChunkMask & ~KPageMask)); |
623 #endif |
625 #endif |
645 iAliasPde = pde; |
647 iAliasPde = pde; |
646 iAliasProcess = aProcess; |
648 iAliasProcess = aProcess; |
647 #ifdef __SMP__ |
649 #ifdef __SMP__ |
648 TSubScheduler& ss = SubScheduler(); // OK since we are locked to this CPU |
650 TSubScheduler& ss = SubScheduler(); // OK since we are locked to this CPU |
649 aliasAddr = TLinAddr(ss.i_AliasLinAddr) + (aAddr & (KChunkMask & ~KPageMask)); |
651 aliasAddr = TLinAddr(ss.i_AliasLinAddr) + (aAddr & (KChunkMask & ~KPageMask)); |
650 iAliasPdePtr = (TPde*)(TLinAddr(ss.i_AliasPdePtr) + (osAsid << KPageTableShift)); |
652 iAliasPdePtr = (TPde*)(TLinAddr(ss.i_AliasPdePtr) + (local_asid << KPageTableShift)); |
651 #endif |
653 #endif |
652 iAliasLinAddr = aliasAddr; |
654 iAliasLinAddr = aliasAddr; |
653 *iAliasPdePtr = pde; |
655 *iAliasPdePtr = pde; |
654 } |
656 } |
655 TRACE2(("DMemModelThread::Alias() PDEntry=%x, iAliasLinAddr=%x",pde, aliasAddr)); |
657 TRACE2(("DMemModelThread::Alias() PDEntry=%x, iAliasLinAddr=%x",pde, aliasAddr)); |