diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2012-03-20 18:17:33 +0000 |
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2012-03-20 18:17:33 +0000 |
| commit | b81dc021b3e3311e46f9e81de4f09855536e8147 (patch) | |
| tree | 3fa3a8ab860459d0b2c9768eed9142052be1ced3 /source/components/tables/tbutils.c | |
| parent | 5437485bdb98c4b00f15969e013c454426e9c862 (diff) | |
Notes
Diffstat (limited to 'source/components/tables/tbutils.c')
| -rw-r--r-- | source/components/tables/tbutils.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/source/components/tables/tbutils.c b/source/components/tables/tbutils.c index bfdcf0c29832..e8b5705e96e7 100644 --- a/source/components/tables/tbutils.c +++ b/source/components/tables/tbutils.c @@ -492,8 +492,9 @@ AcpiTbInstallTable ( * * NOTE: If the table is overridden, then FinalTable will contain a * mapped pointer to the full new table. If the table is not overridden, - * then the table will be fully mapped elsewhere (in verify table). - * In any case, we must unmap the header that was mapped above. + * or if there has been a physical override, then the table will be + * fully mapped later (in verify table). In any case, we must + * unmap the header that was mapped above. */ FinalTable = AcpiTbTableOverride (Table, TableDesc); if (!FinalTable) @@ -510,6 +511,20 @@ AcpiTbInstallTable ( AcpiUtSetIntegerWidth (FinalTable->Revision); } + /* + * If we have a physical override during this early loading of the ACPI + * tables, unmap the table for now. It will be mapped again later when + * it is actually used. This supports very early loading of ACPI tables, + * before virtual memory is fully initialized and running within the + * host OS. Note: A logical override has the ACPI_TABLE_ORIGIN_OVERRIDE + * flag set and will not be deleted below. + */ + if (FinalTable != Table) + { + AcpiTbDeleteTable (TableDesc); + } + + UnmapAndExit: /* Always unmap the table header that we mapped above */ |
