kernel/eka/memmodel/epoc/flexible/mmu/x86/xmmu.cpp
changeset 279 957c583b417b
parent 121 661475905584
equal deleted inserted replaced
275:2b433474f2ba 279:957c583b417b
   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));