[SeaBIOS] [Qemu-devel] [PATCH RFC V2 00/17] hw/pc: implement multiple primary busses for pc machines
marcel at redhat.com
Mon Feb 16 10:54:00 CET 2015
The series is fully functional. The reason is still RFC is because depends on Igor's ACPI
series that is still in the mailing list. Once it gets accepted I'll resend this series
rebased on it.
- Pxb's bus does not support hotplug. It will be addressed on top of this series
because is already getting to big.
You are more than welcome to try using:
-device pxb-device,id=pxb,bus_nr=4,numa_node=1 -device e1000,bus=pxb,addr=0x1 -bios <patched with the above series>
- Add support for multiple pxb devices.
- Attach pxb's bus to specific NUMA node.
- Got rid of the hacks from prev version.
- Tested also for Win7 and Fedora 20, and for virtio blk devices.
- Several bug-fixes resulting in a stable version ready for submission.
This series depends on:
- [SeaBIOS] [PATCH V2 0/2] fw/pci: better support for multiple host bridges
- [Qemu-devel] [PATCH v4 0/3] pc: acpi-build: make linker & RSDP tables dynamic
- [PATCH v3 00/52] ACPI refactoring: replace template patching with C AML API
We need multiple primary busess for a few reasons, the most important one
is to be able to associate a pass-trough device with a guest NUMA node.
The OS-es are able to associate a NUMA node only to a primary bus, not to
a specific PCI device or a pci-2-pci bridge.
PC machines support multiple NUMA nodes for CPUs and memory, however the IO
was not yet supported.
patch 1 adds the necessary acpi constructs based on Igor's series
patch 2-5 implements acpi code needed to expose the pxb's primary bus to guests
patch 6 separates the pci_bus code into a designated file
patch 7-11 handles the implicit assumptions in code that only one primary bus can exist
patch 12 handles the actual implementation of the PXB devices
patch 13-14 enables the device
patch 15 implements PXB map_irq function, (can be squashed into the actual PXB)
patch 16-17 adds NUMA support
Marcel Apfelbaum (17):
acpi: added needed acpi constructs
hw/acpi: add support for multiple root busses
hw/apci: add _PRT method for extra root busses
hw/acpi: add _CRS method for extra root busses
hw/acpi: remove from root bus 0 the crs resources used by other busses.
hw/pci: move pci bus related code to separate files
hw/pci: made pci_bus_is_root a PCIBusClass method
hw/pci: made pci_bus_num a PCIBusClass method
hw/pci: introduce TYPE_PCI_MAIN_HOST_BRIDGE interface
hw/pci: removed 'rootbus nr is 0' assumption from qmp_pci_query
hw/pci: implement iteration over multiple host bridges
hw/pci: introduce PCI Expander Bridge (PXB)
hw/pci: inform bios if the system has more than one pci bridge
hw/pci: piix - suport multiple host bridges
hw/pxb: add map_irq func
hw/pci_bus: add support for NUMA nodes
hw/pxb: add numa_node parameter
arch_init.c | 1 +
hw/acpi/acpi-build-utils.c | 107 +++++++-
hw/alpha/typhoon.c | 1 +
hw/i386/acpi-build.c | 357 ++++++++++++++++++++++++-
hw/i386/kvm/pci-assign.c | 1 +
hw/i386/pc.c | 13 +
hw/mips/gt64xxx_pci.c | 1 +
hw/pci-bridge/Makefile.objs | 1 +
hw/pci-bridge/pci_expander_bridge.c | 208 +++++++++++++++
hw/pci-host/bonito.c | 1 +
hw/pci-host/grackle.c | 1 +
hw/pci-host/piix.c | 63 ++++-
hw/pci-host/ppce500.c | 1 +
hw/pci-host/q35.c | 5 +
hw/pci-host/uninorth.c | 1 +
hw/pci/Makefile.objs | 2 +-
hw/pci/pci-hotplug-old.c | 1 +
hw/pci/pci.c | 501 +---------------------------------
hw/pci/pci_bus.c | 517 ++++++++++++++++++++++++++++++++++++
hw/pci/pci_host.c | 6 +
hw/ppc/ppc4xx_pci.c | 1 +
hw/scsi/megasas.c | 1 +
hw/sh4/r2d.c | 1 +
hw/sh4/sh_pci.c | 1 +
hw/vfio/pci.c | 1 +
hw/xen/xen_pt.c | 1 +
include/hw/acpi/acpi-build-utils.h | 12 +
include/hw/pci/pci.h | 6 +-
include/hw/pci/pci_bus.h | 35 +++
include/hw/pci/pci_host.h | 11 +
include/sysemu/sysemu.h | 1 +
31 files changed, 1348 insertions(+), 512 deletions(-)
create mode 100644 hw/pci-bridge/pci_expander_bridge.c
create mode 100644 hw/pci/pci_bus.c
More information about the SeaBIOS