All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH RFC 00/13] qemu: generate acpi tables for the guest
@ 2013-05-13 20:00 Michael S. Tsirkin
  2013-05-13 20:00 ` [Qemu-devel] [PATCH RFC 03/13] refer to FWCfgState explicitly Michael S. Tsirkin
                   ` (13 more replies)
  0 siblings, 14 replies; 40+ messages in thread
From: Michael S. Tsirkin @ 2013-05-13 20:00 UTC (permalink / raw)
  To: qemu-devel, Anthony Liguori, lersek, seabios

This patchset moves all generation of ACPI tables
from guest BIOS to the hypervisor.

Although ACPI tables come from a system BIOS on real hw,
it makes sense that the ACPI tables are coupled with the
virtual machine, since they have to abstract the x86 machine to
the OS's.

Several future developments that this will enable:
- make it easier to use alternative firmware:
  any firmware can just load the ACPI tables from QEMU.
  case in point OVMF.
- make it easier to add more chipsets without bumping
  into fw_cfg boundaries.
- describe a complex configuration
  e.g. a bridged PCI topology to enable
  acpi hotplug of devices behind a PCI bridge,
  or for multi-root topology.

If you look at the actual code:
 i386: imports ACPI table generation code from seabios
you will see that it's more complex than it
needs to be, with lots of low level casts
and similar tricks.

There's also a bit of duplication where we
already declare similar acpi structures in qemu.

This is the result of code being a direct port from seabios.
Laszlo's patch (build ACPI MADT (APIC) for fw_cfg)
shows how this will be cleaned up by follow-up work.
I think it's best to do it in this order: port
code directly, and apply cleanups and reduce duplication
that results, on top.
This way it's much easier to see that we don't introduce
regressions.

In particular, for a simple VM with piix,
I booted a guest on qemu with and without the
change, and verified that ACPI tables are
unchanged except for trivial pointer address changes.

Such binary compatibility makes it easier to be
confident that this change won't break things.


So the idea is Laszlo's patchset (patches 2-7) will be rebased on top of
this patchset, this way we'll get small cleanup changes, where each step
is easy to verify as not changing anything from Guest POV.

One issue this patchset creates is cross-version migration.
Specifically migration to qemu 1.5 will not work
if it happens while bios is accessing fw_cfg when we
migrate.
This is a general problem of the fw_cfg implementation,
I plan to extend fw_cfg implementation to address this.

I plan to test q35 and numa setups before I submit
this for inclusion, in a similar way.

git trees, for those interested in testing this:

git://git.kernel.org/pub/scm/virt/kvm/mst/qemu.git acpi

git://git.kernel.org/pub/scm/virt/kvm/mst/seabios.git acpi

bios patchset will be posted tomorrow (need to clean up
the commit log a bit).

Laszlo Ersek (1):
  refer to FWCfgState explicitly

Michael S. Tsirkin (12):
  apic: rename apic specific bitopts
  hw/i386/pc.c: move IO_APIC_DEFAULT_ADDRESS to include/hw/i386/apic.h
  fw_cfg: move typedef to qemu/typedefs.h
  i386: add ACPI table files from seabios
  acpi: add rules to compile ASL source
  acpi: pre-compiled ASL files
  range: add Range structure
  i386: add bios linker/loader
  i386: generate pc guest info
  pc: pass PCI hole ranges to Guests
  i386: ACPI table generation code from seabios
  pc: reuse guest info for legacy fw cfg

 configure                            |    9 +-
 hw/acpi/ich9.c                       |    7 +-
 hw/acpi/piix4.c                      |   44 +-
 hw/core/loader.c                     |    2 +-
 hw/i386/Makefile.objs                |   27 +
 hw/i386/acpi-build.c                 |  685 ++++
 hw/i386/acpi-dsdt-cpu-hotplug.dsl    |   93 +
 hw/i386/acpi-dsdt-dbug.dsl           |   41 +
 hw/i386/acpi-dsdt-hpet.dsl           |   51 +
 hw/i386/acpi-dsdt-isa.dsl            |  117 +
 hw/i386/acpi-dsdt-pci-crs.dsl        |  105 +
 hw/i386/acpi-dsdt.dsl                |  343 ++
 hw/i386/acpi-dsdt.hex.generated      | 4409 ++++++++++++++++++++
 hw/i386/bios-linker-loader.c         |  155 +
 hw/i386/multiboot.c                  |    2 +-
 hw/i386/multiboot.h                  |    4 +-
 hw/i386/pc.c                         |  159 +-
 hw/i386/pc_piix.c                    |   28 +-
 hw/i386/pc_q35.c                     |   14 +-
 hw/i386/q35-acpi-dsdt.dsl            |  452 +++
 hw/i386/q35-acpi-dsdt.hex.generated  | 7346 ++++++++++++++++++++++++++++++++++
 hw/i386/ssdt-misc.dsl                |   73 +
 hw/i386/ssdt-misc.hex.generated      |  190 +
 hw/i386/ssdt-pcihp.dsl               |   51 +
 hw/i386/ssdt-pcihp.hex.generated     |  108 +
 hw/i386/ssdt-proc.dsl                |   63 +
 hw/i386/ssdt-proc.hex.generated      |  134 +
 hw/intc/apic.c                       |   42 +-
 hw/isa/lpc_ich9.c                    |   11 +-
 hw/mips/mips_malta.c                 |    2 +-
 hw/pci-host/q35.c                    |    5 +
 hw/sparc/sun4m.c                     |    6 +-
 hw/sparc64/sun4u.c                   |    2 +-
 include/hw/acpi/ich9.h               |    2 +-
 include/hw/i386/acpi-build.h         |    9 +
 include/hw/i386/apic.h               |    2 +
 include/hw/i386/bios-linker-loader.h |   26 +
 include/hw/i386/ich9.h               |    3 +-
 include/hw/i386/pc.h                 |   67 +-
 include/hw/loader.h                  |    3 +-
 include/hw/nvram/fw_cfg.h            |    2 +-
 include/hw/pci-host/q35.h            |    2 +
 include/qemu/range.h                 |   22 +
 include/qemu/typedefs.h              |    2 +
 scripts/acpi_extract.py              |  362 ++
 scripts/acpi_extract_preprocess.py   |   52 +
 scripts/update-acpi.sh               |    4 +
 47 files changed, 15248 insertions(+), 90 deletions(-)
 create mode 100644 hw/i386/acpi-build.c
 create mode 100644 hw/i386/acpi-dsdt-cpu-hotplug.dsl
 create mode 100644 hw/i386/acpi-dsdt-dbug.dsl
 create mode 100644 hw/i386/acpi-dsdt-hpet.dsl
 create mode 100644 hw/i386/acpi-dsdt-isa.dsl
 create mode 100644 hw/i386/acpi-dsdt-pci-crs.dsl
 create mode 100644 hw/i386/acpi-dsdt.dsl
 create mode 100644 hw/i386/acpi-dsdt.hex.generated
 create mode 100644 hw/i386/bios-linker-loader.c
 create mode 100644 hw/i386/q35-acpi-dsdt.dsl
 create mode 100644 hw/i386/q35-acpi-dsdt.hex.generated
 create mode 100644 hw/i386/ssdt-misc.dsl
 create mode 100644 hw/i386/ssdt-misc.hex.generated
 create mode 100644 hw/i386/ssdt-pcihp.dsl
 create mode 100644 hw/i386/ssdt-pcihp.hex.generated
 create mode 100644 hw/i386/ssdt-proc.dsl
 create mode 100644 hw/i386/ssdt-proc.hex.generated
 create mode 100644 include/hw/i386/acpi-build.h
 create mode 100644 include/hw/i386/bios-linker-loader.h
 create mode 100755 scripts/acpi_extract.py
 create mode 100755 scripts/acpi_extract_preprocess.py
 create mode 100644 scripts/update-acpi.sh

-- 
MST

^ permalink raw reply	[flat|nested] 40+ messages in thread

end of thread, other threads:[~2013-06-04  4:15 UTC | newest]

Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-13 20:00 [Qemu-devel] [PATCH RFC 00/13] qemu: generate acpi tables for the guest Michael S. Tsirkin
2013-05-13 20:00 ` [Qemu-devel] [PATCH RFC 03/13] refer to FWCfgState explicitly Michael S. Tsirkin
2013-05-13 20:00 ` [Qemu-devel] [PATCH RFC 02/13] hw/i386/pc.c: move IO_APIC_DEFAULT_ADDRESS to include/hw/i386/apic.h Michael S. Tsirkin
2013-05-13 20:08   ` Eric Blake
2013-05-13 20:00 ` [Qemu-devel] [PATCH RFC 01/13] apic: rename apic specific bitopts Michael S. Tsirkin
2013-05-13 20:22   ` Peter Maydell
2013-05-13 20:29     ` Michael S. Tsirkin
2013-05-13 20:00 ` [Qemu-devel] [PATCH RFC 04/13] fw_cfg: move typedef to qemu/typedefs.h Michael S. Tsirkin
2013-05-13 20:00 ` [Qemu-devel] [PATCH RFC 05/13] i386: add ACPI table files from seabios Michael S. Tsirkin
2013-05-13 20:01 ` [Qemu-devel] [PATCH RFC 06/13] acpi: add rules to compile ASL source Michael S. Tsirkin
2013-05-13 20:01 ` [Qemu-devel] [PATCH RFC 07/13] acpi: pre-compiled ASL files Michael S. Tsirkin
2013-05-13 20:01 ` [Qemu-devel] [PATCH RFC 08/13] range: add Range structure Michael S. Tsirkin
2013-05-13 20:20   ` Peter Maydell
2013-05-14  7:55     ` Michael S. Tsirkin
2013-05-13 20:01 ` [Qemu-devel] [PATCH RFC 09/13] i386: add bios linker/loader Michael S. Tsirkin
2013-05-13 20:01 ` [Qemu-devel] [PATCH RFC 13/13] pc: reuse guest info for legacy fw cfg Michael S. Tsirkin
2013-05-13 20:01 ` [Qemu-devel] [PATCH RFC 10/13] i386: generate pc guest info Michael S. Tsirkin
2013-05-13 20:23   ` Peter Maydell
2013-05-14  8:06     ` Michael S. Tsirkin
2013-05-14  9:32       ` Peter Maydell
2013-05-13 20:01 ` [Qemu-devel] [PATCH RFC 12/13] i386: ACPI table generation code from seabios Michael S. Tsirkin
2013-05-13 20:27   ` Peter Maydell
2013-05-13 20:01 ` [Qemu-devel] [PATCH RFC 11/13] pc: pass PCI hole ranges to Guests Michael S. Tsirkin
2013-05-13 20:38 ` [Qemu-devel] [PATCH RFC 00/13] qemu: generate acpi tables for the guest Anthony Liguori
2013-05-14  1:54   ` [Qemu-devel] [SeaBIOS] " Kevin O'Connor
2013-05-14  9:29   ` [Qemu-devel] " Gerd Hoffmann
2013-05-14  9:38     ` Peter Maydell
2013-05-14 14:29       ` [Qemu-devel] [SeaBIOS] " David Woodhouse
2013-05-14 15:13         ` Peter Maydell
2013-05-14 13:26     ` [Qemu-devel] " Anthony Liguori
2013-05-14 13:53       ` Gerd Hoffmann
2013-05-14 14:40         ` Anthony Liguori
2013-05-14 11:58   ` Michael S. Tsirkin
2013-05-14 13:34     ` Anthony Liguori
2013-05-14 14:14       ` Michael S. Tsirkin
2013-05-15  6:38       ` [Qemu-devel] [SeaBIOS] " Gerd Hoffmann
2013-06-03 22:19       ` [Qemu-devel] " Jordan Justen
2013-06-03 23:12         ` Anthony Liguori
2013-06-04  4:14           ` Jordan Justen
2013-05-16 11:27   ` Michael S. Tsirkin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.