[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 00/17] Q35 initial support for HVM guests



This series introduces initial Q35 chipset support for HVM guests, based on the
patchset at [1] by Alexey Gerasimenko.

Basic support means that this patchset allows to start an HVM guest that
emulates a Q35 chipset via Qemu and implements access to PCIe extended
configuration space for such devices emulated by Qemu.

Support for PCIe device passthrough is not implemented yet. This is planned but
implies modifications in the hypervisor and the firmwares, mainly for the
support of multiple PCI buses.

In order to create a Q35 guest, a new domain config option has been added,
named 'device_model_machine'. Possible values are:
- "i440" - i440 emulation (default)
- "q35"  - emulate a Q35 machine

If the option is omitted it defaults to "i440", not impacting existing domain
configuration files.

DSDT files for Q35 and i440 are largely similar so the existing file dsdt.asl
has been split with i440 and q35 specific parts put in seperated files.

The PCIe MMCONFIG area is configured by hvmloader and its base address and size
are set in Xen using a new pair of hypercalls HVMOP_get|set_ecam_space. Access
to the MMCONFIG area from a guest is trapped by Xen and transfered to the
emulator as XEN_DMOP_IO_RANGE_PCI ioreq type.

[1] https://lore.kernel.org/xen-devel/cover.1520867740.git.x1917x@xxxxxxxxx/

Thierry Escande (17):
  libacpi: Split dsdt.asl file and extract i440 specific parts
  libacpi: new DSDT ACPI table for Q35
  hvmloader: add function to set the emulated machine type (i440/Q35)
  hvmloader: add ACPI enabling for Q35
  hvmloader: add Q35 DSDT table loading
  hvmloader: Move pci devices setup to a separate function
  hvmloader: add basic Q35 support
  hvmloader: Extend PCI BAR struct
  xev/hvm: Add HVMOP_get|set_ecam_space hypercalls
  hvmloader: Add support for HVMOP_set|get_ecam_space hypercalls
  hvmloader: allocate MMCONFIG area in the MMIO hole
  libxl: Q35 support (new option device_model_machine)
  libxl: Add xen-platform device for Q35 machine
  libacpi: build ACPI MCFG table if requested
  hvmloader: Set MCFG in ACPI table
  Handle PCIe ECAM space access from guests
  docs: provide description for device_model_machine option

 docs/man/xl.cfg.5.pod.in             |  27 +++
 tools/firmware/hvmloader/Makefile    |   2 +-
 tools/firmware/hvmloader/config.h    |   5 +
 tools/firmware/hvmloader/e820.c      |  11 ++
 tools/firmware/hvmloader/hvmloader.c |  21 ++-
 tools/firmware/hvmloader/ovmf.c      |   4 +-
 tools/firmware/hvmloader/pci.c       | 264 +++++++++++++++++++--------
 tools/firmware/hvmloader/pci_regs.h  |  16 ++
 tools/firmware/hvmloader/seabios.c   |   4 +-
 tools/firmware/hvmloader/util.c      |  94 +++++++++-
 tools/firmware/hvmloader/util.h      |  21 ++-
 tools/libacpi/Makefile               |  10 +-
 tools/libacpi/acpi2_0.h              |  17 ++
 tools/libacpi/build.c                |  43 +++++
 tools/libacpi/dsdt.asl               |  28 +--
 tools/libacpi/dsdt_i440.asl          |  36 ++++
 tools/libacpi/dsdt_q35.asl           | 130 +++++++++++++
 tools/libacpi/libacpi.h              |   6 +
 tools/libs/light/libxl_dm.c          |  22 ++-
 tools/libs/light/libxl_types.idl     |   7 +
 tools/xl/xl_parse.c                  |  14 ++
 xen/arch/x86/hvm/hvm.c               |  52 ++++++
 xen/arch/x86/hvm/ioreq.c             |  15 ++
 xen/arch/x86/include/asm/domain.h    |   4 +
 xen/include/public/hvm/hvm_op.h      |  11 ++
 25 files changed, 739 insertions(+), 125 deletions(-)
 create mode 100644 tools/libacpi/dsdt_i440.asl
 create mode 100644 tools/libacpi/dsdt_q35.asl

-- 
2.51.0



--
Thierry Escande | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.