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

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 8 Jan 2010 21:01:19 +0100 (CET)

Author: bonefish
Date: 2010-01-08 21:01:19 +0100 (Fri, 08 Jan 2010)
New Revision: 34954
Changeset: http://dev.haiku-os.org/changeset/34954/haiku

Modified:
   haiku/trunk/src/system/kernel/vm/vm.cpp
Log:
unmap_and_free_physical_pages(): Don't try to free already free pages.
Apparently (at least when running in VMware >=2) the boot loader can still
map the same physical page more than once -- in the ACPI or HPET code I
suppose -- which would lead to this situation.


Modified: haiku/trunk/src/system/kernel/vm/vm.cpp
===================================================================
--- haiku/trunk/src/system/kernel/vm/vm.cpp     2010-01-08 18:39:05 UTC (rev 
34953)
+++ haiku/trunk/src/system/kernel/vm/vm.cpp     2010-01-08 20:01:19 UTC (rev 
34954)
@@ -2929,7 +2929,8 @@
                if (map->ops->query(map, current, &physicalAddress, &flags) == 
B_OK
                        && (flags & PAGE_PRESENT) != 0) {
                        vm_page* page = vm_lookup_page(physicalAddress / 
B_PAGE_SIZE);
-                       if (page != NULL) {
+                       if (page != NULL && page->state != PAGE_STATE_FREE
+                                        && page->state != PAGE_STATE_CLEAR) {
                                DEBUG_PAGE_ACCESS_START(page);
                                vm_page_set_state(page, PAGE_STATE_FREE);
                        }


Other related posts:

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