[libvirt] [PATCH v2 4/4] qemu: assign nec-xhci (USB3) controller to a PCIe address when appropriate
Andrea Bolognani
abologna at redhat.com
Wed Aug 17 13:09:49 UTC 2016
On Mon, 2016-08-15 at 01:50 -0400, Laine Stump wrote:
> The nec-usb-xhci device (which is a USB3 controller) has always
> presented itself as a PCI device when plugged into a legacy PCI slot,
> and a PCIe device when plugged into a PCIe slot, but libvirt has
> always auto-assigned it to a PCI slot.
>
> This patch changes that behavior to auto-assign to a PCIe slot on
> systems that have pcie-root (e.g. Q35 and aarch64/virt).
>
> Since we don't yet auto-create pcie-*-port controllers on demand, this
> means a config with an nec-xhci USB controller that has no PCI address
> assigned will also need to have an otherwise-unused pcie-*-port
> controller specified:
>
> <controller type='pci' model='pcie-root-port'/>
> <controller type='usb' model='nec-xhci'/>
>
> (this assumes there is an otherwise-unused slot on pcie-root to accept
> the pcie-root-port)
> ---
> src/qemu/qemu_domain_address.c | 7 +++++
> tests/qemuxml2argvdata/qemuxml2argv-autoindex.args | 10 +++----
> tests/qemuxml2argvdata/qemuxml2argv-q35-pcie.args | 21 ++++++-------
> tests/qemuxml2argvdata/qemuxml2argv-q35-pcie.xml | 2 ++
> .../qemuxml2argv-q35-virtio-pci.args | 7 ++---
> .../qemuxml2argv-q35-virtio-pci.xml | 2 ++
> tests/qemuxml2argvtest.c | 2 ++
> .../qemuxml2xmlout-autoindex.xml | 10 +++----
> .../qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie.xml | 35 +++++++++-------------
> .../qemuxml2xmlout-q35-virtio-pci.xml | 21 +++++--------
> 10 files changed, 55 insertions(+), 62 deletions(-)
>
> diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
> index 9898eef..2c1341e 100644
> --- a/src/qemu/qemu_domain_address.c
> +++ b/src/qemu/qemu_domain_address.c
> @@ -1178,6 +1178,13 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
> (def->controllers[i]->type ==
> VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL))
> flags = virtioFlags;
> + else if (havePCIeRoot &&
> + def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_USB &&
This goes over 80 columns, so it will have to be split. Which
of course makes the whole thing nearly unreadable :(
> + def->controllers[i]->model ==
> + VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI)
> + flags = pcieFlags;
> + else
> + flags = pciFlags;
> if (virDomainPCIAddressReserveNextSlot(addrs,
> &def->controllers[i]->info,
> flags) < 0)
ACK
--
Andrea Bolognani / Red Hat / Virtualization
More information about the libvir-list
mailing list