[SeaBIOS] [Qemu-devel] [PATCH v5 for-2.3 00/28] hw/pc: implement multiple primary busses for pc machines

Marcel Apfelbaum marcel at redhat.com
Tue Mar 10 16:31:46 CET 2015


Notes:
 - Sorry for the late submission, I was waiting for dynamic ACPI series to get merged
   in order to submit - my bad.
 - The prev version (v2) was wrongfully tagged by me as RFC, it was actually ready but not
   rebased. V3 only rebases with no actual functionality changed.
 - This series is not that big, patches 1-8 are really small and can be submitted
   separately, however I preferred to keep them here to get the whole picture.

The series is fully functional.
 - Limitations:
   - Pxb's bus does not support hotplug. It will be addressed on top of this series
     because is already getting to big.
 - Depends on:
    - [SeaBIOS] [PATCH V3 0/2] fw/pci: better support for multiple host bridges
      - It was already reviewed/accepted by the maintainers, it will be merged
        after this series gets accepted.
 - 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>

v4->v5:
 - Rebased on pci branch, tree: git://git.kernel.org/pub/scm/virt/kvm/mst/qemu.git
 - Added PXB documentation (patch 28/28)
 - Addressed Gerd Hoffmann's review:
   - fix PXB behaviour if used with unsupported BIOS (patch 27/28)
 - Addressed Michael S. Tsirkin's review:
   - Removed assert in aml_index (patch 5/28)
   - Renamed pci_ functions to crs_ (patch 12/28)
   - used uint64_t variables instead of signed ones (patch 12/28)
   - Emit MEM/IO AML only for PXBs and i440fx (patch 26/28)
 - Addressed Shannon Zhao's review:
   - Changed build_append_int to  build_append_byte in aml_or (patch 2/25)
 - Thanks to Igor and Kevin for reviews

v3->v4:
 - Addressed Michael S. Tsirkin's review:
   - refactored build_prt method (patch 11/25) 
     hw/apci: add _PRT method for extra PCI root busses
 - Addressed Igor Mammedov's reiew
   - add assert to aml_index (patch 5/25)
 - Fixed aml_equal implementation (patch 1/25)

v2->v3:
 - Rebased on Michael S. Tsirkin's pci branch (that includes now all the dependencies)
 - Refactored acpi terms patch into multiple patches to match Igor's design.

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.

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-9 adds the necessary acpi constructs based on Igor's series
patch 10-13 implements acpi code needed to expose the pxb's primary bus to guests
patch 14 separates the pci_bus code into a designated file
patch 15-19 handles the implicit assumptions in code that only one primary bus can exist
patch 20 handles the actual implementation of the PXB devices
patch 21-22 enables the device
patch 23 implements PXB map_irq function, (can be squashed into the actual PXB)
patch 24-25 adds NUMA support
patch 26 Emit MEM/IO AML only for PXBs and i440fx
patch 27 Backward compatibility with SeaBIOS
patch 28 PXB Documentation

Marcel Apfelbaum (28):
  acpi: fix aml_equal term implementation
  acpi: add aml_or() term
  acpi: add aml_add() term
  acpi: add aml_lless() term
  acpi: add aml_index() term
  acpi: add aml_shiftleft() term
  acpi: add aml_shiftright() term
  acpi: add aml_increment() term
  acpi: add aml_while() term
  hw/acpi: add support for multiple root busses
  hw/apci: add _PRT method for extra PCI 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
  acpi: restrict the aml emission to PXB host bridges
  apci: fix PXB behaviour if used with unsupported BIOS
  docs: Add PXB documentation

 arch_init.c                         |   1 +
 docs/pci_expander_bridge.txt        |  52 ++++
 hw/acpi/aml-build.c                 |  76 +++++-
 hw/alpha/typhoon.c                  |   1 +
 hw/i386/acpi-build.c                | 367 ++++++++++++++++++++++++-
 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 | 207 +++++++++++++++
 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.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/aml-build.h         |   8 +
 include/hw/pci/pci.h                |   6 +-
 include/hw/pci/pci_bus.h            |  35 +++
 include/hw/pci/pci_host.h           |  13 +
 include/sysemu/sysemu.h             |   1 +
 31 files changed, 1377 insertions(+), 510 deletions(-)
 create mode 100644 docs/pci_expander_bridge.txt
 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