[libvirt PATCH v5 5/7] Add PCI VPD Capability Support

Laine Stump laine at redhat.com
Fri Oct 1 17:25:39 UTC 2021


On 9/27/21 3:30 PM, Dmitrii Shcherbakov wrote:
[...]
> diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
[...]
> +
> +static void
> +virNodeDeviceCapVPDResourceFormat(virBuffer *buf, virPCIVPDResource *res)
> +{
> +    GEnumValue *resRype = NULL;
> +    void (*resFormatFunc)(virBuffer *buf, virPCIVPDResource *res);
> +
> +    if (G_TYPE_CHECK_INSTANCE_TYPE(res, VIR_TYPE_PCI_VPD_STRING_RESOURCE)) {
> +        resFormatFunc = virNodeDeviceCapVPDStringResourceFormat;
> +    } else if (G_TYPE_CHECK_INSTANCE_TYPE(res, VIR_TYPE_PCI_VPD_KEYWORD_RESOURCE))  {
> +        resFormatFunc = virNodeDeviceCapVPDKeywordResourceFormat;
> +    } else {
> +        /* Unexpected resource type. This should not happen unless the PCI(e) specs
> +         * change and new resource types are introduced into util.virpcivpd. Either way,
> +         * we can only return the control back to the caller here.
> +         */
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("Unexpected VPD resource type encountered during formatting"));
> +        return;
> +    }
> +    virBufferAdjustIndent(buf, 2);
> +
> +    resRype = virPCIVPDResourceGetResourceType(res);
> +    virBufferEscapeString(buf, "<resource type='%s'>", resRype->value_nick);
> +    /* Format the resource in a type-specific way. */
> +    resFormatFunc(buf, res);

It's probably irrelevant since this will be mostly rewritten based on 
Dan's suggestions, but the resFormatFunc() pointer seems like an 
unnecessary complication - you could just move the if/else construct 
down to here and call the appropriate function directly.





More information about the libvir-list mailing list