Red Hat Bugzilla – Bug 1400785
qemu: Remove pxi-expander-bridge (PXB) device for Power
Last modified: 2017-08-01 23:35:00 EDT
Description of problem: We have some qemu devices that further consideration shows aren't really useful on Power: 1) ehci-hcd EHCI is not well tested on Power, and has hit a number of bugs. There's nothing it can do that can't be done with an XHCI device, which is the recommended USB controller for Power guests. 2) pxb PCI Expander Bridge. I'm trying to confirm, but this appears to be a hack to work around x86's poor support for multiple PCI domains / host bridges. On Power we should prefer creating multiple independent host bridges. We should consider removing these devices from qemu for RHEL 7.4.
Marcel, I'm trying to understand exactly what the pxb device is for. My impression is that it's essentially a hack to deal with the fact that x86 doesn't really handle truly independent PCI host bridges nicely. Does that sound right? I think we don't want it on Power, but I'm trying to make sure. [Incidentally pxi_expander_bridge.c #includes hw/i386/pc.h, but doesn't seem to need it (no compile errors if I take it away).]
(In reply to David Gibson from comment #1) > Marcel, Hi David, > > I'm trying to understand exactly what the pxb device is for. My impression > is that it's essentially a hack to deal with the fact that x86 doesn't > really handle truly independent PCI host bridges nicely. Does that sound > right? > You are right, anyway, the real reason is to be able to "assign" a PCI device to the correct Guest NUMA node. If the guest RAM comes from different host NUMA nodes and you have a host assigned device , you need to associate it somehow to the corresponding guest NUMA node. The pxb/pxb-pcie device exposes an extra root bus that can be associated with a specific guest NUMA node using the ACPI tables. > I think we don't want it on Power, but I'm trying to make sure. > Do you have a solution for the problem above? > [Incidentally pxi_expander_bridge.c #includes hw/i386/pc.h, but doesn't seem > to need it (no compile errors if I take it away).] Thanks, Marcel
(In reply to Marcel Apfelbaum from comment #2) > > I'm trying to understand exactly what the pxb device is for. My impression > > is that it's essentially a hack to deal with the fact that x86 doesn't > > really handle truly independent PCI host bridges nicely. Does that sound > > right? > > You are right, anyway, the real reason is to be able > to "assign" a PCI device to the correct Guest NUMA node. > > If the guest RAM comes from different host NUMA nodes and you have > a host assigned device , you need to associate it somehow to > the corresponding guest NUMA node. > > The pxb/pxb-pcie device exposes an extra root bus that can be associated > with a specific guest NUMA node using the ACPI tables. > > > I think we don't want it on Power, but I'm trying to make sure. > > Do you have a solution for the problem above? You should be able to achieve the same end result on ppc64 guests by creating additional PHBs (spapr-pci-host-bridge): Bug 1280542 is about adding support for this to libvirt.
Right. i.e. we have a solution on the qemu side, but not yet the libvirt side. Well.. we do upstream, in RHEL7.3, I believe you can add PHBs, but you can't set their NUMA node. That's fixed upstream so it should be in RHEL 7.4 as well.
So we can track them separately, move the EHCI related stuff to bug 1410674. Refocus this bug purely on removing the pxb.
The PXB is currently included unconditionally upstream, so it will need to be made conditional there, rather than only requiring a downstream config change.
I've posted an RFC patch for this upstream: https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg00715.html
This is now merged upstream, so we should get it in the rebase to 2.9. Qunfang, can we get a QA ack for this: this should reduce the overall testing load, since all the PXB related tests can be dropped.
Verified that PXB device existed on qemu-kvm-rhev-2.6.0-28.el7_3.9.ppc64le.rpm, and removed on qemu-kvm-rhev-2.9.0-2.el7.ppc64le. For old qemu-kvm-rhev-2.6.0-28.el7_3.9.ppc64le: # /usr/libexec/qemu-kvm -device ? Controller/Bridge/Hub devices: name "pci-bridge", bus PCI, desc "Standard PCI Bridge" name "pci-bridge-seat", bus PCI, desc "Standard PCI Bridge (multiseat)" name "pxb", bus PCI, desc "PCI Expander Bridge" name "pxb-pcie", bus PCI, desc "PCI Express Expander Bridge" name "spapr-pci-host-bridge", bus System name "spapr-pci-vfio-host-bridge", bus System name "usb-host", bus usb-bus name "usb-hub", bus usb-bus For qemu-kvm-rhev-2.9.0-2.el7.ppc64le: # /usr/libexec/qemu-kvm -device ? Controller/Bridge/Hub devices: name "pci-bridge", bus PCI, desc "Standard PCI Bridge" name "pci-bridge-seat", bus PCI, desc "Standard PCI Bridge (multiseat)" name "spapr-pci-host-bridge", bus System name "spapr-pci-vfio-host-bridge", bus System name "usb-host", bus usb-bus name "usb-hub", bus usb-bus Setting to VERIFIED.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHSA-2017:2392