[libvirt] [PATCH] util: Add more virsysfs functions for handling resctrl sysfs
Martin Kletzander
mkletzan at redhat.com
Wed Mar 29 12:11:43 UTC 2017
On Wed, Mar 29, 2017 at 05:44:36PM +0800, Eli Qiao wrote:
>Extended /sys/fs/resctrl sysfs handling.
>
This looks good, few notes below.
>Signed-off-by: Eli Qiao <liyong.qiao at intel.com>
>---
> src/libvirt_private.syms | 4 ++
> src/util/virsysfs.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++-
> src/util/virsysfs.h | 15 ++++++++
> 3 files changed, 116 insertions(+), 1 deletion(-)
>
>diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
>index b551cb8..e07ae79 100644
>--- a/src/libvirt_private.syms
>+++ b/src/libvirt_private.syms
>@@ -2631,6 +2631,10 @@ virSysfsGetValueBitmap;
> virSysfsGetValueInt;
> virSysfsGetValueString;
> virSysfsSetSystemPath;
>+virSysfsGetResctrlString;
>+virSysfsGetResctrlUint;
>+virSysfsGetResctrlInfoString;
>+virSysfsGetResCtrInfoUint;
>
This will not pass the tests.
>
> # util/virsysinfo.h
>diff --git a/src/util/virsysfs.c b/src/util/virsysfs.c
>index 7a98b48..d1be289 100644
>--- a/src/util/virsysfs.c
>+++ b/src/util/virsysfs.c
>@@ -36,8 +36,10 @@ VIR_LOG_INIT("util.sysfs");
>
> #define VIR_SYSFS_VALUE_MAXLEN 8192
> #define SYSFS_SYSTEM_PATH "/sys/devices/system"
>+#define SYSFS_RESCTRL_PATH "/sys/fs/resctrl"
>
> static const char *sysfs_system_path = SYSFS_SYSTEM_PATH;
>+static const char *sysfs_resctrl_path = SYSFS_RESCTRL_PATH;
>
>
> void virSysfsSetSystemPath(const char *path)
>@@ -48,13 +50,26 @@ void virSysfsSetSystemPath(const char *path)
> sysfs_system_path = SYSFS_SYSTEM_PATH;
> }
>
>-
> const char *
> virSysfsGetSystemPath(void)
> {
> return sysfs_system_path;
> }
>
>+void virSysfsSetResctrlPath(const char *path)
>+{
>+ if (path)
>+ sysfs_resctrl_path = path;
>+ else
>+ sysfs_resctrl_path = SYSFS_RESCTRL_PATH;
>+}
>+
>+const char *
>+virSysfsGetResctrlPath(void)
>+{
>+ return sysfs_resctrl_path;
>+}
>+
This will not compile (no previous declaration)
> int
> virSysfsGetValueInt(const char *file,
> int *value)
>@@ -227,3 +242,84 @@ virSysfsGetNodeValueBitmap(unsigned int node,
> VIR_FREE(path);
> return ret;
> }
>+
>+int
>+virSysfsGetResctrlString(const char* file,
>+ char **value)
>+{
>+ chat *path = NULL;
>+ int ret = -1;
Some empty line here ...
>+ if (virAsprintf(&path, "%s/%s", sysfs_resctrl_path, file) < 0)
... and there would be nice to read.
>+ if (!virFileExists(path)) {
>+ ret = -2;
>+ goto cleanup;
>+ }
>+
>+ if (virFileReadAll(path, VIR_SYSFS_VALUE_MAXLEN, value) < 0)
>+ goto cleanup;
>+
>+ ret = 0;
>+
>+ cleanup:
>+ VIR_FREE(path);
>+ return ret;
>+}
>+
>+int
>+virSysfsGetResctrlUint(const char* file,
>+ unsigned int **value)
>+{
>+ chat *path = NULL;
>+ int ret = -1;
>+ if (virAsprintf(&path, "%s/%s", sysfs_resctrl_path, file) < 0)
>+ if (!virFileExists(path)) {
>+ ret = -2;
>+ goto cleanup;
>+ }
>+
>+ ret = virFileReadValueUint(path, value);
>+
>+ cleanup:
>+ VIR_FREE(path);
>+ return ret;
>+}
>+
>+int
>+virSysfsGetResctrlInfoString(const char* file,
>+ char **value)
>+{
>+ chat *path = NULL;
>+ int ret = -1;
>+ if (virAsprintf(&path, "%s/info/%s", sysfs_resctrl_path, file) < 0)
>+ return -1;
>+
>+ if (!virFileExists(path)) {
>+ ret = -2;
>+ goto cleanup;
>+ }
>+
>+ if (virFileReadAll(path, VIR_SYSFS_VALUE_MAXLEN, value) < 0)
>+ goto cleanup;
>+
>+ ret = 0;
>+
>+ cleanup:
>+ VIR_FREE(path);
>+ return ret;
>+}
>+
>+int
>+virSysfsGetResCtrInfoUint(const char *file,
>+ unsigned int *value)
>+{
>+ char *path = NULL;
>+ int ret = -1;
>+
>+ if (virAsprintf(&path, "%s/info/%s", sysfs_resctrl_path, file) < 0)
>+ return -1;
>+
>+ ret = virFileReadValueUint(path, value);
>+
>+ VIR_FREE(path);
>+ return ret;
>+}
>diff --git a/src/util/virsysfs.h b/src/util/virsysfs.h
>index cd871ff..81a27c2 100644
>--- a/src/util/virsysfs.h
>+++ b/src/util/virsysfs.h
>@@ -67,4 +67,19 @@ virSysfsGetNodeValueBitmap(unsigned int cpu,
> const char *file,
> virBitmapPtr *value);
>
>+int
>+virSysfsGetResctrlString(const char* file,
>+ char **value);
>+
>+int
>+virSysfsGetResctrlUint(const char* file,
>+ unsigned int **value);
>+
>+int
>+virSysfsGetResctrlInfoString(const char* file,
>+ char **value);
>+
>+int
>+virSysfsGetResCtrInfoUint(const char *file,
>+ unsigned int *value);
> #endif /* __VIR_SYSFS_H__*/
>--
>1.9.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170329/b326bd97/attachment-0001.sig>
More information about the libvir-list
mailing list