From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43761) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YENoZ-0001D9-Rq for qemu-devel@nongnu.org; Thu, 22 Jan 2015 14:53:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YENoW-0007tA-C7 for qemu-devel@nongnu.org; Thu, 22 Jan 2015 14:53:15 -0500 From: Marcel Apfelbaum Date: Thu, 22 Jan 2015 21:52:26 +0200 Message-Id: <1421956363-23502-1-git-send-email-marcel@redhat.com> Subject: [Qemu-devel] [PATCH RFC 00/17] implement multiple primary busses for pc machines List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: seabios@seabios.org, kraxel@redhat.com, mst@redhat.com, quintela@redhat.com, agraf@suse.de, alex.williamson@redhat.com, kevin@koconnor.net, qemu-ppc@nongnu.org, hare@suse.de, imammedo@redhat.com, amit.shah@redhat.com, pbonzini@redhat.com, leon.alrae@imgtec.com, aurelien@aurel32.net, rth@twiddle.net This series depends on: - [SeaBIOS] [PATCH 0/2] fw/pci: better support for multiple host bridges (https://www.mail-archive.com/seabios@seabios.org/msg07103.html) - Not yet final, comments need to be adressed - [Qemu-devel] [PATCH v2 00/47] ACPI refactoring: replace template patching with C ASL API (http://lists.gnu.org/archive/html/qemu-devel/2015-01/msg02895.html) 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. Series status: The series is fully functional but tested only with Windows2012 server/Fedora 19 and e1000/virtio-net-pci. You are more than welcome to try using: -device pxb-device,id=bridge1,bus_nr=4 -device e1000,bus=bridge1,addr=0x1 -bios 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 hacks that need to be addressed before removing the "RFC" status. Todo: - Solve the little hacks (patches 16/17) - Resend the SeaBios series after the comments are addressed - More testing with other OS-es and other pci devices - Implement the association of a root bus with a NUMA node (acpi proximity) - Think of migration implications and missing code (Ideas?) Any comments will be welcomed and appreciated. I will not be able to respond next week, but after that I'll answer to all questions/comments. Thanks, Marcel 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-bridge: hack - disable shpc bar (will be removed from the series) hw/acpi: hack - generate dummy region ranges for first acpi-build (will be removed from the series) arch_init.c | 1 + hw/acpi/acpi-build-utils.c | 107 +++++++- hw/alpha/typhoon.c | 1 + hw/i386/acpi-build.c | 305 ++++++++++++++++++++- 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_bridge_dev.c | 2 + hw/pci-bridge/pci_expander_bridge.c | 191 ++++++++++++++ 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 | 510 ++++++++++++++++++++++++++++++++++++ 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 | 29 ++ include/hw/pci/pci_host.h | 11 + 31 files changed, 1267 insertions(+), 512 deletions(-) create mode 100644 hw/pci-bridge/pci_expander_bridge.c create mode 100644 hw/pci/pci_bus.c -- 2.1.0