[haiku-commits] r34948 - haiku/trunk/src/system/boot/platform/bios_ia32

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 8 Jan 2010 17:06:22 +0100 (CET)

Author: bonefish
Date: 2010-01-08 17:06:22 +0100 (Fri, 08 Jan 2010)
New Revision: 34948
Changeset: http://dev.haiku-os.org/changeset/34948/haiku
Ticket: http://dev.haiku-os.org/ticket/5208

Modified:
   haiku/trunk/src/system/boot/platform/bios_ia32/acpi.cpp
Log:
acpi_check_rsdt(), acpi_find_table(): Unmap the mapped page again, if we
don't need it. That prevents us from ending up with the page being mapped
multiple times (under VMware at least) and thus fixes #5208.


Modified: haiku/trunk/src/system/boot/platform/bios_ia32/acpi.cpp
===================================================================
--- haiku/trunk/src/system/boot/platform/bios_ia32/acpi.cpp     2010-01-08 
15:58:08 UTC (rev 34947)
+++ haiku/trunk/src/system/boot/platform/bios_ia32/acpi.cpp     2010-01-08 
16:06:22 UTC (rev 34948)
@@ -44,8 +44,10 @@
        // map and validate the root system description table
        acpi_descriptor_header *rsdt
                = (acpi_descriptor_header *)mmu_map_physical_memory(
-               rsdp->rsdt_address, B_PAGE_SIZE, kDefaultPageFlags);
+               rsdp->rsdt_address, sizeof(acpi_descriptor_header), 
kDefaultPageFlags);
        if (rsdt == NULL || strncmp(rsdt->signature, ACPI_RSDT_SIGNATURE, 4) != 
0) {
+               if (rsdt != NULL)
+                       mmu_free(rsdt, sizeof(acpi_descriptor_header));
                TRACE(("acpi: invalid root system description table\n"));
                return B_ERROR;
        }
@@ -78,9 +80,12 @@
 
        for (int32 j = 0; j < numEntries; j++, pointer++) {
                acpi_descriptor_header *header = (acpi_descriptor_header *)
-                       mmu_map_physical_memory(*pointer, B_PAGE_SIZE, 
kDefaultPageFlags);
+                       mmu_map_physical_memory(*pointer, 
sizeof(acpi_descriptor_header),
+                               kDefaultPageFlags);
                if (header == NULL || strncmp(header->signature, signature, 4) 
!= 0) {
                        // not interesting for us
+                       if (header != NULL)
+                               mmu_free(header, 
sizeof(acpi_descriptor_header));
                        TRACE(("acpi: Looking for '%.4s'. Skipping '%.4s'\n", 
signature,
                                header->signature));
                        continue;


Other related posts:

  • » [haiku-commits] r34948 - haiku/trunk/src/system/boot/platform/bios_ia32 - ingo_weinhold