[libvirt] [PATCH 11/15] util: mdev: Introduce virMediatedDeviceTypeReadAttrs getter

Michal Privoznik mprivozn at redhat.com
Fri Jan 26 11:39:10 UTC 2018


On 01/25/2018 10:23 AM, Erik Skultety wrote:
> This should serve as a replacement for the existing udevFillMdevType
> which is responsible for fetching the device type's attributes from the
> sysfs interface. The problem with the existing solution is that it's
> tied to the udev backend.
> 
> Signed-off-by: Erik Skultety <eskultet at redhat.com>
> ---
>  src/util/virmdev.c | 34 ++++++++++++++++++++++++++++++++++
>  src/util/virmdev.h |  5 +++++
>  2 files changed, 39 insertions(+)
> 
> diff --git a/src/util/virmdev.c b/src/util/virmdev.c
> index db679b8a6..b57cc3ed9 100644
> --- a/src/util/virmdev.c
> +++ b/src/util/virmdev.c
> @@ -496,3 +496,37 @@ virMediatedDeviceTypeFree(virMediatedDeviceTypePtr type)
>      VIR_FREE(type->device_api);
>      VIR_FREE(type);
>  }
> +
> +
> +int
> +virMediatedDeviceTypeReadAttrs(const char *sysfspath,
> +                               virMediatedDeviceTypePtr *type)
> +{
> +    int ret = -1;
> +    virMediatedDeviceTypePtr tmp = NULL;
> +
> +#define MDEV_GET_SYSFS_ATTR(attr, dst, cb) \
> +    do { \
> +        if (cb(dst, "%s/%s", sysfspath, attr) < 0) \
> +            goto cleanup; \
> +    } while (0) \

Drop this backward slash.

> +
> +    if (VIR_ALLOC(tmp) < 0)
> +        goto cleanup;
> +
> +    if (VIR_STRDUP(tmp->id, last_component(sysfspath)) < 0)
> +        goto cleanup;
> +
> +    MDEV_GET_SYSFS_ATTR("name", &tmp->name, virFileReadValueString);
> +    MDEV_GET_SYSFS_ATTR("device_api", &tmp->device_api, virFileReadValueString);
> +    MDEV_GET_SYSFS_ATTR("available_instances", &tmp->available_instances,
> +                        virFileReadValueUint);
> +
> +#undef MDEV_GET_SYSFS_ATTR
> +
> +    VIR_STEAL_PTR(*type, tmp);
> +    ret = 0;
> + cleanup:
> +    virMediatedDeviceTypeFree(tmp);
> +    return ret;
> +}
> diff --git a/src/util/virmdev.h b/src/util/virmdev.h
> index 320610ab9..01ab02e75 100644
> --- a/src/util/virmdev.h
> +++ b/src/util/virmdev.h
> @@ -129,4 +129,9 @@ virMediatedDeviceListMarkDevices(virMediatedDeviceListPtr dst,
>  
>  void
>  virMediatedDeviceTypeFree(virMediatedDeviceTypePtr type);
> +
> +int
> +virMediatedDeviceTypeReadAttrs(const char *sysfspath,
> +                               virMediatedDeviceTypePtr *type);

ACK if you also expose the function in libvirt_private.syms.

Michal




More information about the libvir-list mailing list