mark_page_range_in_use(): When the given range lies partially outside the
array at least work with the part intersecting with the array. Log those quasi error cases. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36633 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
8588e7fc6f
commit
3735d4e299
|
@ -1295,25 +1295,33 @@ clear_page(struct vm_page *page)
|
|||
|
||||
|
||||
static status_t
|
||||
mark_page_range_in_use(addr_t startPage, addr_t length, bool wired)
|
||||
mark_page_range_in_use(addr_t startPage, size_t length, bool wired)
|
||||
{
|
||||
TRACE(("mark_page_range_in_use: start 0x%lx, len 0x%lx\n",
|
||||
startPage, length));
|
||||
|
||||
if (sPhysicalPageOffset > startPage) {
|
||||
TRACE(("mark_page_range_in_use: start page %ld is before free list\n",
|
||||
startPage));
|
||||
return B_BAD_VALUE;
|
||||
dprintf("mark_page_range_in_use(%#" B_PRIxADDR ", %#" B_PRIxSIZE "): "
|
||||
"start page is before free list", startPage, length);
|
||||
if (sPhysicalPageOffset - startPage >= length)
|
||||
return B_OK;
|
||||
length -= sPhysicalPageOffset - startPage;
|
||||
startPage = sPhysicalPageOffset;
|
||||
}
|
||||
|
||||
startPage -= sPhysicalPageOffset;
|
||||
|
||||
if (startPage + length > sNumPages) {
|
||||
TRACE(("mark_page_range_in_use: range would extend past free list\n"));
|
||||
return B_BAD_VALUE;
|
||||
dprintf("mark_page_range_in_use(%#" B_PRIxADDR ", %#" B_PRIxSIZE "): "
|
||||
"range would extend past free list", startPage, length);
|
||||
if (startPage >= sNumPages)
|
||||
return B_OK;
|
||||
length = sNumPages - startPage;
|
||||
}
|
||||
|
||||
WriteLocker locker(sFreePageQueuesLock);
|
||||
|
||||
for (addr_t i = 0; i < length; i++) {
|
||||
for (size_t i = 0; i < length; i++) {
|
||||
vm_page *page = &sPages[startPage + i];
|
||||
switch (page->State()) {
|
||||
case PAGE_STATE_FREE:
|
||||
|
|
Loading…
Reference in New Issue