mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-23 23:42:32 +00:00
acpi_drv: skip tables outside predefined region
With this fix, the driver no longer aborts on the Tigerlake notebook and just skips the out-of-region ACPI table. Issue #4452 is not fixed by this commit, but in this specific case the table is not used anyway.
This commit is contained in:
parent
49b8232ebd
commit
1c79c95868
@ -1221,7 +1221,7 @@ class Element : private List<Element>::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 <typename T>
|
||||
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 &) { }
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user