[libvirt] [PATCH 1/3] conf: improve error log when PCI devices don't match requested controller

Andrea Bolognani abologna at redhat.com
Mon Aug 8 17:38:37 UTC 2016


On Fri, 2016-08-05 at 23:01 -0400, Laine Stump wrote:
> The virDomainPCIAddressFlagsCompatible() error logs report that a
> device required a controller that accepted standard PCI endpoint
> devices, or PCI Express endpoint devices, and if hotplug was required
> by the configuration but not provided by the selected controller. But
> the wording of the error messages was apparently confusing (according
> to the bugzilla report referenced below). On top of that, if the
> device was something other than an endpoint device (e.g. a
> pcie-switch-downstream-port) the error message was a complete punt -
> it would just say that the flags were incorrect.
> 
> This patch makes the messages for PCI/PCIe endpoint and hotplug
> requirements more clear, and also specifically indicates what was the
> device type when it is other than an endpoint device.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1363627
> ---
>  src/conf/domain_addr.c | 58 ++++++++++++++++++++++++++++----------------------
>  1 file changed, 33 insertions(+), 25 deletions(-)
> 
> diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
> index a0c2f88..98176e2 100644
> --- a/src/conf/domain_addr.c
> +++ b/src/conf/domain_addr.c
> @@ -118,38 +118,46 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
>       * hot-plug and this bus doesn't have it, return false.
>       */
>      if (!(devFlags & busFlags & VIR_PCI_CONNECT_TYPES_MASK)) {
> -        if (reportError) {
> -            if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_DEVICE) {
> -                virReportError(errType,
> -                               _("PCI bus is not compatible with the device "
> -                                 "at %s. Device requires a standard PCI slot, "
> -                                 "which is not provided by bus %.4x:%.2x"),
> -                               addrStr, addr->domain, addr->bus);
> -            } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_DEVICE) {
> -                virReportError(errType,
> -                               _("PCI bus is not compatible with the device "
> -                                 "at %s. Device requires a PCI Express slot, "
> -                                 "which is not provided by bus %.4x:%.2x"),
> -                               addrStr, addr->domain, addr->bus);
> -            } else {
> -                /* this should never happen. If it does, there is a
> -                 * bug in the code that sets the flag bits for devices.
> -                 */
> -                virReportError(errType,
> -                           _("The device information for %s has no PCI "
> -                             "connection types listed"), addrStr);
> -            }
> +        const char *connectStr;
> +
> +        if (!reportError)
> +            return false;
> +
> +        if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_DEVICE) {
> +            connectStr = "standard PCI device";
> +        } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_DEVICE) {
> +            connectStr = "PCI Express device";
> +        } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT) {
> +            connectStr = "pcie-root-port";
> +        } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT) {
> +            connectStr = "pci-switch-upstream-port";
> +        } else if (devFlags & VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT) {
> +            connectStr = "pci-switch-downstream-port";
> +        } else {
> +            /* this should never happen. If it does, there is a
> +             * bug in the code that sets the flag bits for devices.
> +             */
> +            virReportError(errType,
> +                           _("The device at PCI address %s has "
> +                             "unrecognized connection type flags 0x%.2x"),
> +                           addrStr, devFlags & VIR_PCI_CONNECT_TYPES_MASK);
> +            return false;
>          }
> +        virReportError(errType,
> +                       _("The device at PCI address %s cannot be "
> +                         "plugged into the PCI controller with index 0x%.2x. "
> +                         "It requires a controller that accepts a %s."),
> +                       addrStr, addr->bus, connectStr);
>          return false;
>      }
>      if ((devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE) &&
>          !(busFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)) {
>          if (reportError) {
>              virReportError(errType,
> -                           _("PCI bus is not compatible with the device "
> -                             "at %s. Device requires hot-plug capability, "
> -                             "which is not provided by bus %.4x:%.2x"),
> -                           addrStr, addr->domain, addr->bus);
> +                           _("The device at PCI address %s requires "
> +                             "hot-plug capability, but the PCI controller "
> +                             "at index %.2x doesn't support hot-plug"),
> +                           addrStr, addr->bus);

s/hot-plug/hotplug/g ?

>          }
>          return false;
>      }

ACK

-- 
Andrea Bolognani / Red Hat / Virtualization




More information about the libvir-list mailing list