[libvirt] [PATCH v3 17/26] qemu: Deal with PHB naming conventions
Laine Stump
laine at laine.org
Tue Jun 27 01:20:06 UTC 2017
On 06/23/2017 11:03 AM, Andrea Bolognani wrote:
> Usually, a controller with alias 'x' will create a bus with the
> same name; however, the bus created by a PHBs with alias 'x' will
> be named 'x.0' instead, so we need to account for that.
>
> As an exception to the exception, the implicit PHB that's added
> automatically to every pSeries guest creates the 'pci.0' bus.
>
> Signed-off-by: Andrea Bolognani <abologna at redhat.com>
Sigh. Words can't even describe my feelings. Nothing else you can do
about it though.
Reviewed-by: Laine Stump <laine at laine.org>
> ---
> src/qemu/qemu_command.c | 20 +++++++++++++++++++-
> 1 file changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index f79fbfc..dba2519 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -302,6 +302,9 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
> int ret = -1;
> char *devStr = NULL;
> const char *contAlias = NULL;
> + virDomainControllerModelPCI contModel;
> + virDomainControllerPCIModelName contModelName;
> + int contIndex;
>
> if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
> size_t i;
> @@ -314,6 +317,9 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
> if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI &&
> cont->idx == info->addr.pci.bus) {
> contAlias = cont->info.alias;
> + contModel = cont->model;
> + contModelName = cont->opts.pciopts.modelName;
> + contIndex = cont->opts.pciopts.idx;
> if (!contAlias) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("Device alias was not set for PCI "
> @@ -349,7 +355,19 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
> }
> }
>
> - virBufferAsprintf(buf, ",bus=%s", contAlias);
> + if (contModel == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT &&
> + contModelName == VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_SPAPR_PCI_HOST_BRIDGE &&
> + contIndex > 0) {
> + /* The PCI bus created by a spapr-pci-host-bridge device with
> + * alias 'x' will be called 'x.0' rather than 'x'; however,
> + * this does not apply to the implicit PHB in a pSeries guest,
> + * which always has the hardcoded name 'pci.0' */
> + virBufferAsprintf(buf, ",bus=%s.0", contAlias);
> + } else {
> + /* For all other controllers, the bus name matches the alias
> + * of the corresponding controller */
> + virBufferAsprintf(buf, ",bus=%s", contAlias);
> + }
>
> if (info->addr.pci.multi == VIR_TRISTATE_SWITCH_ON)
> virBufferAddLit(buf, ",multifunction=on");
>
More information about the libvir-list
mailing list