equal
deleted
inserted
replaced
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); |