[haiku-commits] r35322 - haiku/trunk/src/system/kernel/vm

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 27 Jan 2010 21:55:02 +0100 (CET)

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
        }
 }
 


Other related posts:

  • » [haiku-commits] r35322 - haiku/trunk/src/system/kernel/vm - ingo_weinhold