On 24/12/2014 14:12, Paolo Bonzini wrote: > Right now, the SSDT/DSDT is split in three parts: > > - code that doesn't need patching goes in the DSDT. Furthermore, > code in this category that is shared between PIIX4 and Q35 is > handled via #include. There was one exception, the SMC._STA > method is patched and is in the DSDT. > > - shared code that needs patching goes in the SSDT > > - template-based code that comes from command line arguments > goes in the SSDT as well > > This series changes things to: > > - code that is chipset-specific goes in the DSDT first. > Right now none of this needs patching > > - code that is not chipset-specific, some of which needs > patching, goes in the DSDT second > > - template-based code that comes from command line arguments > goes in the SSDT > > Patch 1 moves ssdt-misc ("common code that needs patching") > to the DSDT. Patches 2-4 stop using the C preprocessor > in the DSDTs. > > Patches 5-7 show why this could be useful. They add padding > in fw_cfg after the DSDT, and in exchange stop padding the ACPI > tables to 128K. This fixes migration problems (ROM sizes, RSDP) > because the ACPI tables are split in two: > > 1) fixed tables and the DSDT can be changed freely; > > 2) tables that vary depending on the command-line arguments (SSDT, > MADT, ...) are versioned and, given a machine type, they have to be > byte-equivalent across QEMU versions >= 2.3. > > Patches 5 and 6 introduce a new sizing algorithm. Patch 7 use it > to fix the migration problems. > > Only the first 4 or 6 patches are meant for inclusion. Patch 7 should > only be committed after Igor's series that rewrites the templating > mechanism in C. That makes it much simpler to track changes to the ACPI > tables, and removes dependencies on the IASL version that could cause > some head-scratching. > > The conflicts with Igor's series are nontrivial but overall > not complicated to solve. Igor rewrote ssdt-misc in C, but those > parts can be easily removed from his series. He has plans to > build the DSDT from C, and if that materializes it can apply to > acpi-dsdt-common.dsl too. > > Paolo > > Paolo Bonzini (7): > pc: append ssdt-misc.dsl to the DSDT > pc: rename ssdt-misc to dsdt-common > pc: move common parts of the DSDT to dsdt-common > pc: merge DSDT common parts into acpi-dsdt-common.dsl > pc: introduce new ACPI table sizing algorithm > pc: clean up pre-2.1 compatibility code > pc: go back to smaller ACPI tables > > hw/i386/Makefile.objs | 2 +- > hw/i386/acpi-build.c | 107 +++-- > hw/i386/acpi-dsdt-common.dsl | 467 > +++++++++++++++++++++ > ...ex.generated => acpi-dsdt-common.hex.generated} | 4 +- > hw/i386/acpi-dsdt-dbug.dsl | 41 -- > hw/i386/acpi-dsdt-hpet.dsl | 48 --- > hw/i386/acpi-dsdt-isa.dsl | 128 ------ > hw/i386/acpi-dsdt-mem-hotplug.dsl | 176 -------- > hw/i386/acpi-dsdt.dsl | 12 +- > hw/i386/pc_piix.c | 9 +- > hw/i386/pc_q35.c | 6 +- > hw/i386/q35-acpi-dsdt.dsl | 9 +- > hw/i386/ssdt-misc.dsl | 122 ------ > include/hw/i386/pc.h | 2 + > 14 files changed, 550 insertions(+), 583 deletions(-) > create mode 100644 hw/i386/acpi-dsdt-common.dsl > rename hw/i386/{ssdt-misc.hex.generated => acpi-dsdt-common.hex.generated} > (96%) > delete mode 100644 hw/i386/acpi-dsdt-dbug.dsl > delete mode 100644 hw/i386/acpi-dsdt-hpet.dsl > delete mode 100644 hw/i386/acpi-dsdt-isa.dsl > delete mode 100644 hw/i386/acpi-dsdt-mem-hotplug.dsl > delete mode 100644 hw/i386/ssdt-misc.dsl >
Ping (patches 1-4)? Paolo