[libvirt] [PATCH v2 RESEND 08/12] conf: Allocate/release 'uid' and 'fid' in PCI address

Andrea Bolognani abologna at redhat.com
Tue Jul 24 14:58:43 UTC 2018


On Tue, 2018-07-10 at 16:02 +0800, Yi Min Zhao wrote:
> This patch adds new functions for reservation, assignment and release
> to handle the uid/fid. If the uid/fid is defined in the domain XML,
> they will be reserved directly in collecting phase. If any of them is
> not defined, we will find out an available value for it from zPCI
> address hashtable, and reserve it. For hotplug case, there might be or
> not zPCI definition. So allocate and reserve uid/fid for undefined
> case. Assign if needed and reserve uid/fid for defined case. If the user
> define zPCI extension address but zPCI capability doesn't exist, an
> error will be reported.

For this patch I once again didn't look too closely to the
implementation, sorry.

[...]
> +static int
> +virDomainZPCIAddressReserveId(virHashTablePtr set, unsigned int id,
> +                              const char *name)

One argument per line, please.

There are more instances in the patch, but I'm not going to
point them all out :)

[...]
> +static int
> +virDomainZPCIAddressAssignUid(virHashTablePtr set, virZPCIDeviceAddressPtr addr)
> +{
> +    if (addr->uid_assigned)
> +        return 0;
> +
> +    addr->uid_assigned = virDomainZPCIAddressAssignId(set, &addr->zpci_uid, 1,
> +                                       VIR_DOMAIN_DEVICE_ZPCI_MAX_UID, "uid");

Messed up alignment. More instances further down.

[...]
> +static void
> +virDomainZPCIAddressReleaseUid(virHashTablePtr set, virZPCIDeviceAddressPtr addr)
> +{
> +    if (!addr->uid_assigned)
> +        return;
> +
> +    if (virHashRemoveEntry(set, &addr->zpci_uid))
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       _("Release uid %u failed"), addr->zpci_uid);

Curly braces are required here. More instances further down.


Looking at

> +static void
> +virDomainZPCIAddressReleaseFid(virHashTablePtr set, virZPCIDeviceAddressPtr addr)

and

> +static void
> +virDomainZPCIAddressReleaseIds(virDomainZPCIAddressIdsPtr zpciIds,
> +                               virPCIDeviceAddressPtr addr)

and

> +static int
> +virDomainZPCIAddressReserveAddr(virDomainPCIAddressSetPtr addrs,
> +                                virPCIDeviceAddressPtr addr)

you're being awfully inconsistent about the datatypes you're passing
around...

Unless I've missed something that makes doing so impossible, please
try to make it so only the top-level datatypes (DomainPCIAddressSet
and PCIDeviceAddress) are passed around.

[...]
> +static int
> +virDomainZPCIAddressReserveNextAddr(virDomainPCIAddressSetPtr addrs,
> +                                    virZPCIDeviceAddressPtr zpci)
> +{
> +    if (!zpci->uid_assigned &&
> +        virDomainZPCIAddressReserveNextUid(addrs->zpciIds->uids, zpci))
> +            return -1;

Messed up indentation. Also, missing curly braces.

[...]
> +int
> +virDomainPCIAddressExtensionReserveAddr(virDomainPCIAddressSetPtr addrs,
> +                                        virPCIDeviceAddressPtr addr,
> +                                        virDomainPCIAddressExtensionFlags extFlags)
> +{
> +    if (extFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI) {
> +    /* Reserve uid/fid to ZPCI device which has defined uid/fid
> +     * in the domain.
> +     */

Messed up indentation.

[...]
> +int
> +virDomainPCIAddressExtensionReserveNextAddr(virDomainPCIAddressSetPtr addrs,
> +                                            virPCIDeviceAddressPtr dev,
> +                                            virDomainPCIAddressExtensionFlags extFlags)
> +{
> +    if (extFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI) {
> +    /* Assign and reserve uid/fid to ZPCI device which has not defined uid/fid
> +     * in the domain.
> +     */

Messed up indentation.

[...]
> +static int
> +virDomainPCIAddressEnsureExtensionAddr(virDomainPCIAddressSetPtr addrs,
> +                                       virDomainDeviceInfoPtr dev)

This should be virDomainPCIAddressExtensionEnsureAddr() for
consistency's sake.

> @@ -1385,7 +1403,12 @@ qemuDomainCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED,
>           * parent, and will have its address collected during the scan
>           * of the parent's device type.
>          */
> -        return 0;
> +        if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI ||
> +            info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
> +            return virDomainPCIAddressExtensionReserveAddr(addrs, addr,
> +                                                           info->pciAddressExtFlags);
> +        else
> +            return 0;

This doesn't look right: the comment specifically states that the
PCI address will be handled by the parent device in this case,
why wouldn't the zPCI address not be handled in the same way?

-- 
Andrea Bolognani / Red Hat / Virtualization




More information about the libvir-list mailing list