392 aMemory->iManager->Free(aMemory,aIndex,aCount); |
392 aMemory->iManager->Free(aMemory,aIndex,aCount); |
393 MemoryObjectLock::Unlock(aMemory); |
393 MemoryObjectLock::Unlock(aMemory); |
394 } |
394 } |
395 |
395 |
396 |
396 |
397 TInt MM::MemoryAddPages(DMemoryObject* aMemory, TUint aIndex, TUint aCount, TPhysAddr* aPages) |
397 TInt MM::MemoryAddPages(DMemoryObject* aMemory, TUint aIndex, TUint aCount, const TPhysAddr* aPages) |
398 { |
398 { |
399 TRACE(("MM::MemoryAddPages(0x%08x,0x%08x,0x%08x,?)",aMemory,aIndex,aCount)); |
399 TRACE(("MM::MemoryAddPages(0x%08x,0x%08x,0x%08x,?)",aMemory,aIndex,aCount)); |
400 MemoryObjectLock::Lock(aMemory); |
400 MemoryObjectLock::Lock(aMemory); |
401 TInt r; |
401 TInt r; |
402 if(!aMemory->CheckRegion(aIndex,aCount)) |
402 if(!aMemory->CheckRegion(aIndex,aCount)) |
783 process->CloseOsAsid(); |
783 process->CloseOsAsid(); |
784 return r; |
784 return r; |
785 } |
785 } |
786 |
786 |
787 |
787 |
|
788 DMemoryMapping* MM::FindMappingInProcess(DMemModelProcess* aProcess, TLinAddr aAddr, TUint aSize, |
|
789 TUint& aOffsetInMapping, TUint& aInstanceCount) |
|
790 { |
|
791 if(aAddr>=KGlobalMemoryBase) |
|
792 { |
|
793 // Address in global region, so look it up in kernel's address space... |
|
794 return MM::FindMappingInAddressSpace(KKernelOsAsid, aAddr, aSize, aOffsetInMapping, aInstanceCount); |
|
795 } |
|
796 |
|
797 // Address in thread's process address space so open a reference to its os asid |
|
798 // so that it remains valid for FindMappingInAddressSpace() call. |
|
799 TInt osAsid = aProcess->TryOpenOsAsid(); |
|
800 if (osAsid < 0) |
|
801 {// The process no longer owns an address space so can't have any mappings. |
|
802 return NULL; |
|
803 } |
|
804 |
|
805 DMemoryMapping* r = MM::FindMappingInAddressSpace(osAsid, aAddr, aSize, aOffsetInMapping, aInstanceCount); |
|
806 |
|
807 aProcess->CloseOsAsid(); |
|
808 return r; |
|
809 } |
|
810 |
|
811 |
788 DMemoryMapping* MM::FindMappingInAddressSpace( TUint aOsAsid, TLinAddr aAddr, TUint aSize, |
812 DMemoryMapping* MM::FindMappingInAddressSpace( TUint aOsAsid, TLinAddr aAddr, TUint aSize, |
789 TUint& aOffsetInMapping, TUint& aInstanceCount) |
813 TUint& aOffsetInMapping, TUint& aInstanceCount) |
790 { |
814 { |
791 return AddressSpace[aOsAsid]->FindMapping(aAddr, aSize, aOffsetInMapping, aInstanceCount); |
815 return AddressSpace[aOsAsid]->FindMapping(aAddr, aSize, aOffsetInMapping, aInstanceCount); |
792 } |
816 } |