The current way we organize the IO windows into PCI space for the
pseries machine type has several problems.
- It makes it difficult to create very large MMIO spaces which is
necessary for certain PCI devices with very large BARs. This
problem has been known for a while.
- More recently we discovered a more serious problem: it prevents
more than 1TiB of RAM being added to a pseries guest.
- It doesn't make very efficient use of address space.
Fixing this is complicated by keeping migration from old versionss
working and working out what things belong on which side of the
abstraction barrier between the machine type and the host bridge
This series addresses all these problems. Patches 1-3/7 perform
preliminary cleanups to the spapr specific PCI test code, which we'll
need to get the tests working with the changed implementation. 4-5/7
represent a minimal fix for the most serious problem (the 1 TiB limit)
- once polished, I'll consider submiting these for the stable branch.
6-7/7 complete a more comprehensive fix.
Changes since v2:
* Removed window sizes from placement callback. Having them in there
led to a small behavioural change that wasn't intended
* Adjusted / added some comments for clarity.
Changes since v1:
* Removed a debugging printf()
Changes since RFC:
* Fixed some bugs
* Fixed up PCI testcases which were broken by the change (due to
* Seriously contemplated, then rejected a completely different
*** BLURB HERE ***
David Gibson (7):
libqos: Isolate knowledge of spapr memory map to qpci_init_spapr()
libqos: Correct error in PCI hole sizing for spapr
libqos: Limit spapr-pci to 32-bit MMIO for now
spapr_pci: Delegate placement of PCI host bridges to machine type
spapr: Adjust placement of PCI host bridge to allow > 1TiB RAM
spapr_pci: Add a 64-bit MMIO window
spapr: Improved placement of PCI host bridges in guest memory map
hw/ppc/spapr.c | 119 +++++++++++++++++++++++++++++++++++++++++++-
hw/ppc/spapr_pci.c | 90 +++++++++++++++++++++++----------
include/hw/pci-host/spapr.h | 25 +++++-----
include/hw/ppc/spapr.h | 4 ++
tests/endianness-test.c | 3 +-
tests/libqos/pci-spapr.c | 116 +++++++++++++++++++++++-------------------
tests/spapr-phb-test.c | 2 +-
7 files changed, 265 insertions(+), 94 deletions(-)