Series status: 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. - Limitations: - 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>
v1->v2: - 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
Reasoning: 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