From: Peter Krempa Date: Mon, 17 Feb 2025 13:16:04 +0000 (+0100) Subject: virPerfReadEvent: Refactor to return -errno on failure X-Git-Tag: v11.1.0-rc1~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=613901baecd870d88b716fb9bb0f59b3f092be53;p=thirdparty%2Flibvirt.git virPerfReadEvent: Refactor to return -errno on failure The function didn't comply with libvirt's error reporting scheme as it reported libvirt errors only sometimes. As callers may want to ignore errors convert it to returning -errno on failure instead. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index efb6e2c454..e5d5c8c484 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -17581,9 +17581,13 @@ qemuDomainGetStatsPerfOneEvent(virPerf *perf, virTypedParamList *params) { uint64_t value = 0; + int rv; - if (virPerfReadEvent(perf, type, &value) < 0) + if ((rv = virPerfReadEvent(perf, type, &value)) < 0) { + virReportSystemError(-rv, "%s", + _("Unable to read cache data")); return -1; + } virTypedParamListAddULLong(params, value, "perf.%s", virPerfEventTypeToString(type)); diff --git a/src/util/virperf.c b/src/util/virperf.c index 91f2ca632a..7f0253d5b2 100644 --- a/src/util/virperf.c +++ b/src/util/virperf.c @@ -290,6 +290,12 @@ bool virPerfEventIsEnabled(virPerf *perf, return perf && perf->events[type].enabled; } + +/** + * virPerfReadEvent: + * + * Returns 0 on success -ERRNO on failure. + */ int virPerfReadEvent(virPerf *perf, virPerfEventType type, @@ -297,13 +303,10 @@ virPerfReadEvent(virPerf *perf, { struct virPerfEvent *event = &perf->events[type]; if (!event->enabled) - return -1; + return -EINVAL; - if (saferead(event->fd, value, sizeof(uint64_t)) < 0) { - virReportSystemError(errno, "%s", - _("Unable to read cache data")); - return -1; - } + if (saferead(event->fd, value, sizeof(uint64_t)) < 0) + return -errno; if (type == VIR_PERF_EVENT_CMT) *value *= event->efields.cmt.scale; @@ -350,9 +353,7 @@ virPerfReadEvent(virPerf *perf G_GNUC_UNUSED, virPerfEventType type G_GNUC_UNUSED, uint64_t *value G_GNUC_UNUSED) { - virReportSystemError(ENXIO, "%s", - _("Perf not supported on this platform")); - return -1; + return -ENOSYS; } #endif