diff options
author | Phil Dennis-Jordan <phil@philjordan.eu> | 2017-03-30 23:40:57 +1300 |
---|---|---|
committer | Laszlo Ersek <lersek@redhat.com> | 2017-03-30 21:53:13 +0200 |
commit | 072060a6f81b3e43473b9e5dcba7049ad9de4b18 (patch) | |
tree | 7c4c2229ff4c19aadf6b38e1d5d8430ff28f3bc0 /OvmfPkg/Library | |
parent | f663ed8a328a6d5007d3f03685f08cfceb506105 (diff) | |
download | edk2-072060a6f81b3e43473b9e5dcba7049ad9de4b18.tar.gz edk2-072060a6f81b3e43473b9e5dcba7049ad9de4b18.tar.bz2 edk2-072060a6f81b3e43473b9e5dcba7049ad9de4b18.zip |
OvmfPkg: Allow multiple add-pointer linker commands to same ACPI table
ACPI tables may contain multiple fields which point to the same
destination table. For example, in some revisions, the FADT contains
both DSDT and X_DSDT fields, and they may both point to the DSDT.
Previously, if Qemu created QEMU_LOADER_ADD_POINTER linker commands for
such instances, the linking process would attempt to install the same
pointed-to table repeatedly. For tables of which there must only be one
instance, the call to AcpiProtocol->InstallAcpiTable() would fail during
the second linker command pointing to the same table, thus entirely
aborting the ACPI table linking process. In the case of tables of which
there may be multiple instances, the table would end up duplicated.
This change adds a memoisation data structure which tracks the table
pointers that have already been processed; even if the same pointer is
encountered multiple times, it is only processed once.
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
[lersek@redhat.com: DSDT<->XSDT typo, debug msg, and coding style fixups]
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=368
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Diffstat (limited to 'OvmfPkg/Library')
0 files changed, 0 insertions, 0 deletions