CPU hotplug relies on the guest having access to the legacy online CPU bitmap that QEMU provides at PIO 0xAF00. But PVH guests have no DM, so this causes the MADT to get corrupted due to spurious modifications of the "online" flag in MADT entries and the table checksum during the initial acpica passes.
Seeing how ACPI CPU hotplug is the only event delivered via GPE, remove the GPE handler too. This shrinks PVH's DSDT substantially and fixes the MADT corruption problem. Fixes: e9a8dc050f9a("libacpi: Build DSDT for PVH guests") Reported-by: Grygorii Strashko <grygorii_stras...@epam.com> Signed-off-by: Alejandro Vallejo <alejandro.garciavall...@amd.com> --- tools/libacpi/mk_dsdt.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/libacpi/mk_dsdt.c b/tools/libacpi/mk_dsdt.c index 8ac4f9d0b4..f71de6c8c6 100644 --- a/tools/libacpi/mk_dsdt.c +++ b/tools/libacpi/mk_dsdt.c @@ -218,6 +218,11 @@ int main(int argc, char **argv) pop_block(); /**** Processor end ****/ #else + if (dm_version == QEMU_NONE) { + pop_block(); + pop_block(); + return 0; + } /* Operation Region 'PRST': bitmask of online CPUs. */ stmt("OperationRegion", "PRST, SystemIO, %#x, %d", @@ -264,10 +269,6 @@ int main(int argc, char **argv) pop_block(); pop_block(); - if (dm_version == QEMU_NONE) { - pop_block(); - return 0; - } /**** Processor end ****/ base-commit: 53c599cc33b61ae70d59572f3c1d843a3def84e2 -- 2.43.0