kernel/eka/memmodel/epoc/flexible/mmu/mrom.cpp
changeset 201 43365a9b78a3
parent 109 b3a1d9898418
child 259 57b9594f5772
equal deleted inserted replaced
200:73ea206103e6 201:43365a9b78a3
   574 			else
   574 			else
   575 				{
   575 				{
   576 				__NK_ASSERT_ALWAYS(romPageInfo->iPagingAttributes & SRomPageInfo::EPageable);
   576 				__NK_ASSERT_ALWAYS(romPageInfo->iPagingAttributes & SRomPageInfo::EPageable);
   577 
   577 
   578 				// Read data for page...
   578 				// Read data for page...
   579 				const TLinAddr buffer = aRequest->iBuffer;
   579 				const TLinAddr buffer = aRequest->Buffer();
   580 				const TUint readStart = dataOffset >> readUnitShift;
   580 				const TUint readStart = dataOffset >> readUnitShift;
   581 				const TUint readSize = ((dataOffset + dataSize - 1) >> readUnitShift) - readStart + 1;
   581 				const TUint readSize = ((dataOffset + dataSize - 1) >> readUnitShift) - readStart + 1;
   582 				__NK_ASSERT_DEBUG((readSize << readUnitShift) <= (DPageReadRequest::EMaxPages << KPageShift));
   582 				__NK_ASSERT_DEBUG((readSize << readUnitShift) <= (DPageReadRequest::EMaxPages << KPageShift));
   583 				START_PAGING_BENCHMARK;
   583 				START_PAGING_BENCHMARK;
   584 				r = iDevice->Read(&message, buffer, readStart, readSize, DPagingDevice::EDriveRomPaging);
   584 				r = iDevice->Read(&message, buffer, readStart, readSize, DPagingDevice::EDriveRomPaging);
   956 		return r;
   956 		return r;
   957 
   957 
   958 	RamAllocLock::Lock();
   958 	RamAllocLock::Lock();
   959 
   959 
   960 	Mmu& m = TheMmu;
   960 	Mmu& m = TheMmu;
   961 	r = m.AllocRam(&iNewPage, 1, aMemory->RamAllocFlags(), EPageFixed);
   961 	// Allocate a page to shadow to allowing the allocation to steal pages from the paging cache.
       
   962 	r = m.AllocRam(	&iNewPage, 
       
   963 					1, 
       
   964 					(Mmu::TRamAllocFlags)(aMemory->RamAllocFlags() & ~Mmu::EAllocNoPagerReclaim), 
       
   965 					EPageFixed);
   962 	if(r==KErrNone)
   966 	if(r==KErrNone)
   963 		{
   967 		{
   964 		TLinAddr dst = m.MapTemp(iNewPage,aIndex,0);
   968 		TLinAddr dst = m.MapTemp(iNewPage,aIndex,0);
   965 		TLinAddr src = m.MapTemp(iOriginalPage,aIndex,1);
   969 		TLinAddr src = m.MapTemp(iOriginalPage,aIndex,1);
   966 		pagecpy((TAny*)dst,(TAny*)src);
   970 		pagecpy((TAny*)dst,(TAny*)src);