[SeaBIOS] [Qemu-devel] [PATCH RFC 00/17] implement multiple primary busses for pc machines

Marcel Apfelbaum marcel at redhat.com
Thu Jan 22 20:52:26 CET 2015


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 <patched with the above series>

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




More information about the SeaBIOS mailing list