kernel/eka/memmodel/epoc/flexible/mmu/mcodepaging.cpp
branchRCL_3
changeset 26 c734af59ce98
parent 22 2f92ad2dc5db
child 28 5b5d147c7838
equal deleted inserted replaced
24:41f0cfe18c80 26:c734af59ce98
   237 
   237 
   238 TInt DCodePagedMemoryManager::ReadPages(DMemoryObject* aMemory, TUint aIndex, TUint aCount, TPhysAddr* aPages, DPageReadRequest* aRequest)
   238 TInt DCodePagedMemoryManager::ReadPages(DMemoryObject* aMemory, TUint aIndex, TUint aCount, TPhysAddr* aPages, DPageReadRequest* aRequest)
   239 	{
   239 	{
   240 	TRACE2(("DCodePagedMemoryManager::ReadPage(0x%08x,0x%08x,0x%08x,?,?)",aMemory,aIndex,aCount));
   240 	TRACE2(("DCodePagedMemoryManager::ReadPage(0x%08x,0x%08x,0x%08x,?,?)",aMemory,aIndex,aCount));
   241 
   241 
   242 	__NK_ASSERT_DEBUG(aRequest->CheckUse(aMemory,aIndex,aCount));
   242 	__NK_ASSERT_DEBUG(aRequest->CheckUseContiguous(aMemory,aIndex,aCount));
       
   243 	__ASSERT_CRITICAL;
   243 
   244 
   244 	START_PAGING_BENCHMARK;
   245 	START_PAGING_BENCHMARK;
   245 
   246 
   246 	MmuLock::Lock();
   247 	MmuLock::Lock();
   247 	DPagedCodeInfo* pagedCodeInfo = (DPagedCodeInfo*)aMemory->iManagerData;
   248 	DPagedCodeInfo* pagedCodeInfo = (DPagedCodeInfo*)aMemory->iManagerData;
   254 	TPagedCodeInfo& info = pagedCodeInfo->Info();
   255 	TPagedCodeInfo& info = pagedCodeInfo->Info();
   255 	DPagingDevice& device = *iDevice[info.iCodeLocalDrive];
   256 	DPagingDevice& device = *iDevice[info.iCodeLocalDrive];
   256 
   257 
   257 	TLinAddr linAddr = aRequest->MapPages(aIndex,aCount,aPages);
   258 	TLinAddr linAddr = aRequest->MapPages(aIndex,aCount,aPages);
   258 	TInt r = KErrNone;
   259 	TInt r = KErrNone;
       
   260 	TThreadMessage message;
   259 
   261 
   260 	if(!info.iCodeSize)
   262 	if(!info.iCodeSize)
   261 		{
   263 		{
   262 		// no blockmap yet, use blank pages...
   264 		// no blockmap yet, use blank pages...
   263 		memset((TAny*)linAddr, aCount*KPageSize, 0x03);
   265 		memset((TAny*)linAddr, aCount*KPageSize, 0x03);
   290 												dataOffset,
   292 												dataOffset,
   291 												dataSize,
   293 												dataSize,
   292 												device.iReadUnitShift,
   294 												device.iReadUnitShift,
   293 												ReadFunc,
   295 												ReadFunc,
   294 												(TAny*)info.iCodeLocalDrive,
   296 												(TAny*)info.iCodeLocalDrive,
   295 												(TAny*)&aRequest->iMessage);
   297 												(TAny*)&message);
   296 
   298 
   297 		if(bufferStart<0)
   299 		if(bufferStart<0)
   298 			{
   300 			{
   299 			r = bufferStart; // return error
   301 			r = bufferStart; // return error
   300 			__NK_ASSERT_DEBUG(0);
   302 			__NK_ASSERT_DEBUG(0);
   330 done:
   332 done:
   331 	aRequest->UnmapPages(true);
   333 	aRequest->UnmapPages(true);
   332 
   334 
   333 	pagedCodeInfo->AsyncClose();
   335 	pagedCodeInfo->AsyncClose();
   334 
   336 
   335 	END_PAGING_BENCHMARK(EPagingBmReadCodePage);
   337 	END_PAGING_BENCHMARK_N(EPagingBmReadCodePage, aCount);
   336 	return r;
   338 	return r;
   337 	}
   339 	}
   338 
   340 
   339 
   341 
   340 TBool DCodePagedMemoryManager::IsAllocated(DMemoryObject* aMemory, TUint aIndex, TUint aCount)
   342 TBool DCodePagedMemoryManager::IsAllocated(DMemoryObject* aMemory, TUint aIndex, TUint aCount)