diff -r ef2a444a7410 -r b3a1d9898418 kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp --- a/kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp Mon May 03 13:47:38 2010 +0300 +++ b/kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp Fri May 14 17:13:29 2010 +0300 @@ -785,6 +785,30 @@ } +DMemoryMapping* MM::FindMappingInProcess(DMemModelProcess* aProcess, TLinAddr aAddr, TUint aSize, + TUint& aOffsetInMapping, TUint& aInstanceCount) + { + if(aAddr>=KGlobalMemoryBase) + { + // Address in global region, so look it up in kernel's address space... + return MM::FindMappingInAddressSpace(KKernelOsAsid, aAddr, aSize, aOffsetInMapping, aInstanceCount); + } + + // Address in thread's process address space so open a reference to its os asid + // so that it remains valid for FindMappingInAddressSpace() call. + TInt osAsid = aProcess->TryOpenOsAsid(); + if (osAsid < 0) + {// The process no longer owns an address space so can't have any mappings. + return NULL; + } + + DMemoryMapping* r = MM::FindMappingInAddressSpace(osAsid, aAddr, aSize, aOffsetInMapping, aInstanceCount); + + aProcess->CloseOsAsid(); + return r; + } + + DMemoryMapping* MM::FindMappingInAddressSpace( TUint aOsAsid, TLinAddr aAddr, TUint aSize, TUint& aOffsetInMapping, TUint& aInstanceCount) { @@ -1117,5 +1141,3 @@ attr&EMemoryAttributeUseECC ); } - -