[libvirt] [PATCH 10/16] util: Add virSysfsGetCPUCache* functions

Martin Kletzander mkletzan at redhat.com
Thu Mar 30 14:03:42 UTC 2017


Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
---
 src/libvirt_private.syms |   5 +++
 src/util/virsysfs.c      | 102 +++++++++++++++++++++++++++++++++++++++++++++++
 src/util/virsysfs.h      |  34 ++++++++++++++++
 3 files changed, 141 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index bcd2506ef7c9..0b3b41516fe6 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2623,6 +2623,11 @@ virVasprintfInternal;
 # util/virsysfs.h
 virSysfsCpuDirOpen;
 virSysfsDirOpen;
+virSysfsGetCpuCacheValueBitmap;
+virSysfsGetCpuCacheValueInt;
+virSysfsGetCpuCacheValueScaledInt;
+virSysfsGetCpuCacheValueString;
+virSysfsGetCpuCacheValueUint;
 virSysfsGetCpuValueBitmap;
 virSysfsGetCpuValueInt;
 virSysfsGetCpuValueString;
diff --git a/src/util/virsysfs.c b/src/util/virsysfs.c
index a8550bbfbc26..2a64be4f5f73 100644
--- a/src/util/virsysfs.c
+++ b/src/util/virsysfs.c
@@ -221,6 +221,108 @@ virSysfsCpuDirOpen(unsigned int cpu,
 }


+/*
+ * Per-CPU/cache getters
+ */
+int
+virSysfsGetCpuCacheValueInt(unsigned int cpu,
+                            const char *cache,
+                            const char *file,
+                            int *value)
+{
+    char *path = NULL;
+    int ret = -1;
+
+    if (virAsprintf(&path, "%s/cpu/cpu%u/cache/%s/%s",
+                    sysfs_system_path, cpu, cache, file) < 0)
+        return -1;
+
+    ret = virFileReadValueInt(path, value);
+
+    VIR_FREE(path);
+    return ret;
+}
+
+
+int
+virSysfsGetCpuCacheValueUint(unsigned int cpu,
+                             const char *cache,
+                             const char *file,
+                             unsigned int *value)
+{
+    char *path = NULL;
+    int ret = -1;
+
+    if (virAsprintf(&path, "%s/cpu/cpu%u/cache/%s/%s",
+                    sysfs_system_path, cpu, cache, file) < 0)
+        return -1;
+
+    ret = virFileReadValueUint(path, value);
+
+    VIR_FREE(path);
+    return ret;
+}
+
+int
+virSysfsGetCpuCacheValueScaledInt(unsigned int cpu,
+                                  const char *cache,
+                                  const char *file,
+                                  unsigned long long *value)
+{
+    char *path = NULL;
+    int ret = -1;
+
+    if (virAsprintf(&path, "%s/cpu/cpu%u/cache/%s/%s",
+                    sysfs_system_path, cpu, cache, file) < 0)
+        return -1;
+
+    ret = virFileReadValueScaledInt(path, value);
+
+    VIR_FREE(path);
+    return ret;
+}
+
+
+int
+virSysfsGetCpuCacheValueString(unsigned int cpu,
+                               const char *cache,
+                               const char *file,
+                               char **value)
+{
+    char *path = NULL;
+    int ret = -1;
+
+    if (virAsprintf(&path, "cpu/cpu%u/cache/%s/%s", cpu, cache, file) < 0)
+        return -1;
+
+    ret = virSysfsGetValueString(path, value);
+
+    VIR_FREE(path);
+    return ret;
+}
+
+int
+virSysfsGetCpuCacheValueBitmap(unsigned int cpu,
+                               const char *cache,
+                               const char *file,
+                               virBitmapPtr *value)
+{
+    char *path = NULL;
+    int ret = -1;
+
+    if (virAsprintf(&path, "%s/cpu/cpu%u/cache/%s/%s",
+                    sysfs_system_path, cpu, cache, file) < 0)
+        return -1;
+
+    ret = virFileReadValueBitmap(path, VIR_SYSFS_VALUE_MAXLEN, value);
+    VIR_FREE(path);
+    return ret;
+}
+
+
+/*
+ * Per-NUMA node getters
+ */
 int
 virSysfsGetNodeValueString(unsigned int node,
                            const char *file,
diff --git a/src/util/virsysfs.h b/src/util/virsysfs.h
index 25bd100ea9cb..92f9111b069f 100644
--- a/src/util/virsysfs.h
+++ b/src/util/virsysfs.h
@@ -77,6 +77,40 @@ virSysfsCpuDirOpen(unsigned int cpu,


 /*
+ * Per-CPU/cache getters
+ */
+int
+virSysfsGetCpuCacheValueInt(unsigned int cpu,
+                            const char *cache,
+                            const char *file,
+                            int *value);
+
+int
+virSysfsGetCpuCacheValueUint(unsigned int cpu,
+                             const char *cache,
+                             const char *file,
+                             unsigned int *value);
+
+int
+virSysfsGetCpuCacheValueScaledInt(unsigned int cpu,
+                                  const char *cache,
+                                  const char *file,
+                                  unsigned long long *value);
+
+int
+virSysfsGetCpuCacheValueString(unsigned int cpu,
+                               const char *cache,
+                               const char *file,
+                               char **value);
+
+int
+virSysfsGetCpuCacheValueBitmap(unsigned int cpu,
+                               const char *cache,
+                               const char *file,
+                               virBitmapPtr *value);
+
+
+/*
  * Per-NUMA node getters
  */
 int
-- 
2.12.2




More information about the libvir-list mailing list