This lets us simplify the cleanup paths when populating the host cache
bank information in capabilities XML.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
src/conf/capabilities.c | 34 ++++++++++++++--------------------
src/conf/capabilities.h | 3 +++
2 files changed, 17 insertions(+), 20 deletions(-)
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
index 1a7ebf4a13..d693d38f3c 100644
--- a/src/conf/capabilities.c
+++ b/src/conf/capabilities.c
@@ -2150,9 +2150,7 @@ virCapabilitiesInitCaches(virCaps *caps)
size_t i = 0;
g_autoptr(virBitmap) cpus = NULL;
ssize_t pos = -1;
- int ret = -1;
struct dirent *ent = NULL;
- virCapsHostCacheBank *bank = NULL;
const virResctrlMonitorType montype = VIR_RESCTRL_MONITOR_TYPE_CACHE;
const char *prefix = virResctrlMonitorPrefixTypeToString(montype);
@@ -2172,10 +2170,11 @@ virCapabilitiesInitCaches(virCaps *caps)
int rv = -1;
g_autoptr(DIR) dirp = NULL;
g_autofree char *path = g_strdup_printf("%s/cpu/cpu%zd/cache/",
SYSFS_SYSTEM_PATH, pos);
+ g_autoptr(virCapsHostCacheBank) bank = NULL;
rv = virDirOpenIfExists(&dirp, path);
if (rv < 0)
- goto cleanup;
+ return -1;
if (!dirp)
continue;
@@ -2191,7 +2190,7 @@ virCapabilitiesInitCaches(virCaps *caps)
if (virFileReadValueUint(&level,
"%s/cpu/cpu%zd/cache/%s/level",
SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0)
- goto cleanup;
+ return -1;
if (level < cache_min_level)
continue;
@@ -2202,33 +2201,33 @@ virCapabilitiesInitCaches(virCaps *caps)
if (virFileReadValueUint(&bank->id,
"%s/cpu/cpu%zd/cache/%s/id",
SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0)
- goto cleanup;
+ return -1;
if (virFileReadValueUint(&bank->level,
"%s/cpu/cpu%zd/cache/%s/level",
SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0)
- goto cleanup;
+ return -1;
if (virFileReadValueString(&type,
"%s/cpu/cpu%zd/cache/%s/type",
SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0)
- goto cleanup;
+ return -1;
if (virFileReadValueScaledInt(&bank->size,
"%s/cpu/cpu%zd/cache/%s/size",
SYSFS_SYSTEM_PATH, pos, ent->d_name) <
0)
- goto cleanup;
+ return -1;
if (virFileReadValueBitmap(&bank->cpus,
"%s/cpu/cpu%zd/cache/%s/shared_cpu_list",
SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0)
- goto cleanup;
+ return -1;
kernel_type = virCacheKernelTypeFromString(type);
if (kernel_type < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown cache type '%s'"), type);
- goto cleanup;
+ return -1;
}
bank->type = kernel_type;
@@ -2244,15 +2243,13 @@ virCapabilitiesInitCaches(virCaps *caps)
bank->size,
&bank->ncontrols,
&bank->controls) < 0)
- goto cleanup;
+ return -1;
VIR_APPEND_ELEMENT(caps->host.cache.banks, caps->host.cache.nbanks,
bank);
}
-
- g_clear_pointer(&bank, virCapsHostCacheBankFree);
}
if (rv < 0)
- goto cleanup;
+ return -1;
}
/* Sort the array in order for the tests to be predictable. This way we can
@@ -2264,16 +2261,13 @@ virCapabilitiesInitCaches(virCaps *caps)
}
if (virCapabilitiesInitResctrlMemory(caps) < 0)
- goto cleanup;
+ return -1;
if (virResctrlInfoGetMonitorPrefix(caps->host.resctrl, prefix,
&caps->host.cache.monitor) < 0)
- goto cleanup;
+ return -1;
- ret = 0;
- cleanup:
- virCapsHostCacheBankFree(bank);
- return ret;
+ return 0;
}
diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
index 6fe7818b2e..ef6e8ab685 100644
--- a/src/conf/capabilities.h
+++ b/src/conf/capabilities.h
@@ -137,6 +137,9 @@ struct _virCapsHostCacheBank {
virResctrlInfoPerCache **controls;
};
+void virCapsHostCacheBankFree(virCapsHostCacheBank *ptr);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCapsHostCacheBank, virCapsHostCacheBankFree);
+
struct _virCapsHostCache {
size_t nbanks;
virCapsHostCacheBank **banks;
--
2.37.3