From 3545cbef7fb1184f88dffd7e0edf84b103ac20a7 Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Tue, 23 Jan 2018 09:55:52 +0100 Subject: [PATCH] util: mdev: Introduce virMediatedDeviceTypeReadAttrs getter 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 --- src/libvirt_private.syms | 1 + src/util/virmdev.c | 34 ++++++++++++++++++++++++++++++++++ src/util/virmdev.h | 5 +++++ 3 files changed, 40 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index fb7635499f..c52c3ec385 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2182,6 +2182,7 @@ virMediatedDeviceModelTypeToString; virMediatedDeviceNew; virMediatedDeviceSetUsedBy; virMediatedDeviceTypeFree; +virMediatedDeviceTypeReadAttrs; diff --git a/src/util/virmdev.c b/src/util/virmdev.c index db679b8a6d..1249335067 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) + + 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 320610ab97..01ab02e751 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); + #endif /* __VIR_MDEV_H__ */