Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> --- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list