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;