diff --git a/repos/os/src/drivers/acpi/acpi.cc b/repos/os/src/drivers/acpi/acpi.cc index 3851e18c8b..a4ff2d1dd0 100644 --- a/repos/os/src/drivers/acpi/acpi.cc +++ b/repos/os/src/drivers/acpi/acpi.cc @@ -1221,7 +1221,7 @@ class Element : private List::Element /** - * Locate and parse PCI tables we are looking for + * Locate and parse ACPI tables we are looking for */ class Acpi_table { @@ -1290,12 +1290,12 @@ class Acpi_table } template - void _parse_tables(Genode::Allocator &alloc, T * entries, uint32_t count) + void _parse_tables(Genode::Allocator &alloc, T * entries, uint32_t const count) { /* search for SSDT and DSDT tables */ for (uint32_t i = 0; i < count; i++) { uint32_t dsdt = 0; - { + try { Table_wrapper table(_memory, entries[i]); if (!table.valid()) { @@ -1349,24 +1349,26 @@ class Acpi_table table.parse_dmar(alloc); } - } + } catch (Acpi::Memory::Unsupported_range &) { } if (!dsdt) continue; - Table_wrapper table(_memory, dsdt); + try { + Table_wrapper table(_memory, dsdt); - if (!table.valid()) { - Genode::error("ignoring table '", table.name(), - "' - checksum error"); - continue; - } - if (table.is_searched()) { - if (verbose) - Genode::log("Found dsdt ", table.name()); + if (!table.valid()) { + Genode::error("ignoring table '", table.name(), + "' - checksum error"); + continue; + } + if (table.is_searched()) { + if (verbose) + Genode::log("Found dsdt ", table.name()); - Element::parse(alloc, table.table()); - } + Element::parse(alloc, table.table()); + } + } catch (Acpi::Memory::Unsupported_range &) { } } } diff --git a/repos/os/src/drivers/acpi/memory.h b/repos/os/src/drivers/acpi/memory.h index e434037938..01e8f09d5e 100644 --- a/repos/os/src/drivers/acpi/memory.h +++ b/repos/os/src/drivers/acpi/memory.h @@ -129,7 +129,7 @@ class Acpi::Memory /* check that physical region fits into supported range */ if (!_io_region->contains(loop_region)) { - error("acpi table out of range - ", loop_region, " not in ", *_io_region); + warning("acpi table out of range - ", loop_region, " not in ", *_io_region); throw Unsupported_range(); }