172 iTouchedRegionFlag += aSegmentCount; |
172 iTouchedRegionFlag += aSegmentCount; |
173 // __PRINT3(_L("!! USED RESERVED SEGS: addr=0x%x, touched=%d, reserved=%d"), addr, iTouchedRegionFlag, iReservedRegionMarkInSegs); |
173 // __PRINT3(_L("!! USED RESERVED SEGS: addr=0x%x, touched=%d, reserved=%d"), addr, iTouchedRegionFlag, iReservedRegionMarkInSegs); |
174 return addr; |
174 return addr; |
175 } |
175 } |
176 |
176 |
177 // if we have used up reserved region, get new pages from reusable pool first |
177 TBool touchedMore = EFalse; |
|
178 // if we have touched beyond reserved region, get new pages from reusable pool first |
178 if (iReusablePagePool.Count()) |
179 if (iReusablePagePool.Count()) |
179 { |
180 { |
180 addr = iReusablePagePool[0]; |
181 addr = iReusablePagePool[0]; |
181 iReusablePagePool.Remove(0); |
182 iReusablePagePool.Remove(0); |
182 // __PRINT2(_L("!! USED REUSABLE POOL SEGS: addr=0x%x, reusable.Count()=%d"), addr, iReusablePagePool.Count()); |
183 // __PRINT2(_L("!! USED REUSABLE POOL SEGS: addr=0x%x, reusable.Count()=%d"), addr, iReusablePagePool.Count()); |
183 } |
184 } |
184 // or we grow the touched region flag |
185 // or we grow the touched region flag |
185 else |
186 else |
186 { |
187 { |
187 addr = iBase + (iTouchedRegionFlag << iSegSizeInBytesLog2); |
188 addr = iBase + (iTouchedRegionFlag << iSegSizeInBytesLog2); |
188 iTouchedRegionFlag += aSegmentCount; |
189 touchedMore = ETrue; |
189 // __PRINT2(_L("!! GROW TOUCHED SEGS: addr=0x%x, touched=%d"), addr, iTouchedRegionFlag); |
190 // __PRINT2(_L("!! GROW TOUCHED SEGS: addr=0x%x, touched=%d"), addr, iTouchedRegionFlag); |
190 } |
191 } |
191 |
192 |
192 // parameter validation |
193 // parameter validation |
193 ASSERT(((addr - iBase) >> iSegSizeInBytesLog2) + aSegmentCount <= iMaxSizeInSegs); |
194 ASSERT(((addr - iBase) >> iSegSizeInBytesLog2) + aSegmentCount <= iMaxSizeInSegs); |