The bulk domain stats API is meant to collect as much data as possible without erroring out. If fetching of the memory bandwidth stats fails just skip outputing them. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/qemu/qemu_driver.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e513223de2..45f286994e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -16697,28 +16697,30 @@ qemuDomainGetResctrlMonData(virQEMUDriver *driver, } -static int +static void qemuDomainGetStatsMemoryBandwidth(virQEMUDriver *driver, virDomainObj *dom, virTypedParamList *params) { - virQEMUResctrlMonData **resdata = NULL; + g_autofree virQEMUResctrlMonData **resdata = NULL; char **features = NULL; size_t nresdata = 0; size_t i = 0; size_t j = 0; size_t k = 0; - int ret = -1; if (!virDomainObjIsActive(dom)) - return 0; + return; if (qemuDomainGetResctrlMonData(driver, dom, &resdata, &nresdata, - VIR_RESCTRL_MONITOR_TYPE_MEMBW) < 0) - goto cleanup; + VIR_RESCTRL_MONITOR_TYPE_MEMBW) < 0) { + /* don't return cache stats if we can't fetch them */ + virResetLastError(); + return; + } if (nresdata == 0) - return 0; + return; virTypedParamListAddUInt(params, nresdata, "memory.bandwidth.monitor.count"); @@ -16751,12 +16753,8 @@ qemuDomainGetStatsMemoryBandwidth(virQEMUDriver *driver, } } - ret = 0; - cleanup: for (i = 0; i < nresdata; i++) qemuDomainFreeResctrlMonData(resdata[i]); - VIR_FREE(resdata); - return ret; } @@ -16970,7 +16968,8 @@ qemuDomainGetStatsMemory(virQEMUDriver *driver, unsigned int privflags G_GNUC_UNUSED) { - return qemuDomainGetStatsMemoryBandwidth(driver, dom, params); + qemuDomainGetStatsMemoryBandwidth(driver, dom, params); + return 0; } -- 2.48.1