Author: bonefish Date: 2010-01-27 21:55:02 +0100 (Wed, 27 Jan 2010) New Revision: 35322 Changeset: http://dev.haiku-os.org/changeset/35322/haiku Modified: haiku/trunk/src/system/kernel/vm/vm_page.cpp Log: * Improved the clarity of some loops in the page reservation functions. No functional change (other than avoiding no-ops like subtracting 0). * vm_page_try_reserve_pages(): Moved the kernel tracing calls from the top of the function to the points where the reservation already succeeded. Modified: haiku/trunk/src/system/kernel/vm/vm_page.cpp =================================================================== --- haiku/trunk/src/system/kernel/vm/vm_page.cpp 2010-01-27 19:04:46 UTC (rev 35321) +++ haiku/trunk/src/system/kernel/vm/vm_page.cpp 2010-01-27 20:55:02 UTC (rev 35322) @@ -2171,21 +2171,20 @@ uint32 systemReserve = kPageReserveForPriority[priority]; while (true) { int32 systemFreePages = sSystemReservedPages; - uint32 toReserve = 0; if (systemFreePages > (int32)systemReserve) { - toReserve = std::min(count, systemFreePages - systemReserve); + uint32 toReserve = std::min(count, systemFreePages - systemReserve); if (atomic_test_and_set(&sSystemReservedPages, systemFreePages - toReserve, systemFreePages) != systemFreePages) { // the count changed in the meantime -- retry continue; } + + count -= toReserve; + if (count == 0) + return; } - count -= toReserve; - if (count == 0) - return; - break; } @@ -2210,13 +2209,11 @@ if (count == 0) return true; - T(ReservePages(count)); - + uint32 reserved; while (true) { // From the requested count reserve as many pages as possible from the // general reserve. int32 freePages = sUnreservedFreePages; - uint32 reserved = 0; if (freePages > 0) { reserved = std::min((int32)count, freePages); if (atomic_test_and_set(&sUnreservedFreePages, @@ -2225,31 +2222,36 @@ // the count changed in the meantime -- retry continue; } - } - if (reserved == count) - return true; - - // Try to get the remaining pages from the system reserve. - uint32 systemReserve = kPageReserveForPriority[priority]; - uint32 leftToReserve = count - reserved; - while (true) { - int32 systemFreePages = sSystemReservedPages; - if ((uint32)systemFreePages < leftToReserve + systemReserve) { - // no dice - vm_page_unreserve_pages(reserved); - return false; - } - - if (atomic_test_and_set(&sSystemReservedPages, - systemFreePages - leftToReserve, systemFreePages) - == systemFreePages) { + if (reserved == count) { + T(ReservePages(count)); return true; } + } else + reserved = 0; - // the count changed in the meantime -- retry - continue; + break; + } + + // Try to get the remaining pages from the system reserve. + uint32 systemReserve = kPageReserveForPriority[priority]; + uint32 leftToReserve = count - reserved; + while (true) { + int32 systemFreePages = sSystemReservedPages; + if ((uint32)systemFreePages < leftToReserve + systemReserve) { + // no dice + vm_page_unreserve_pages(reserved); + return false; } + + if (atomic_test_and_set(&sSystemReservedPages, + systemFreePages - leftToReserve, systemFreePages) + == systemFreePages) { + T(ReservePages(count)); + return true; + } + + // the count changed in the meantime -- retry } }