[libvirt] [PATCH 3/8] perf: implement the public APIs for perf event

Qiaowei Ren qiaowei.ren at intel.com
Tue Nov 17 08:00:43 UTC 2015


* src/libvirt-domain.c: Implement virDomainGetPerfEvents and
virDomainSetPerfEvents.

Signed-off-by: Qiaowei Ren <qiaowei.ren at intel.com>
---
 src/libvirt-domain.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 106 insertions(+)

diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index de7eb04..e767606 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -9572,6 +9572,112 @@ virDomainOpenChannel(virDomainPtr dom,
 
 
 /**
+ * virDomainGetPerfEvents:
+ * @domain: pointer to domain object
+ * @params: pointer to perf events parameter object
+ *          (return value, allocated by the caller)
+ * @nparams: pointer to number of perf event parameters
+ *
+ * Get all perf events setting. On input, @nparams gives the size of the
+ * @params array; on output, @nparams gives how many slots were filled
+ * with parameter information, which might be less but will not exceed
+ * the input value.
+ *
+ * As a special case, calling with @params as NULL and @nparams as 0 on
+ * input will cause @nparams on output to contain the number of parameters
+ * supported by the hypervisor. The caller should then allocate @params
+ * array, i.e. (sizeof(@virTypedParameter) * @nparams) bytes and call the
+ * API again.
+ *
+ * See virDomainGetMemoryParameters() for an equivalent usage example.
+ *
+ * Returns -1 in case of error, 0 in case of success.
+ */
+int virDomainGetPerfEvents(virDomainPtr domain,
+                           virTypedParameterPtr params,
+                           int * nparams)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d",
+                     params, (nparams) ? *nparams : -1);
+
+    virResetLastError();
+
+    virCheckDomainReturn(domain, -1);
+    virCheckNonNullArgGoto(nparams, error);
+    virCheckNonNegativeArgGoto(*nparams, error);
+    if (*nparams != 0)
+        virCheckNonNullArgGoto(params, error);
+
+    conn = domain->conn;
+
+    if (conn->driver->domainGetPerfEvents) {
+        int ret;
+        ret = conn->driver->domainGetPerfEvents(domain, params, nparams);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+    virReportUnsupportedError();
+
+ error:
+    virDispatchError(domain->conn);
+    return -1;
+}
+
+
+/**
+ * virDomainSetPerfEvents:
+ * @domain: pointer to domain object
+ * @params: pointer to perf events parameter object
+ * @nparams: number of perf event parameters (this value can be the same
+ *           less than the number of parameters supported)
+ *
+ * Enable or disable the particular list of perf events you care about.
+ *
+ * Returns -1 in case of error, 0 in case of success.
+ */
+int virDomainSetPerfEvents(virDomainPtr domain,
+                           virTypedParameterPtr params,
+                           int nparams)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d",
+                     params, nparams);
+    VIR_TYPED_PARAMS_DEBUG(params, nparams);
+
+    virResetLastError();
+
+    virCheckDomainReturn(domain, -1);
+    conn = domain->conn;
+
+    virCheckReadOnlyGoto(conn->flags, error);
+    virCheckNonNullArgGoto(params, error);
+    virCheckPositiveArgGoto(nparams, error);
+
+    if (virTypedParameterValidateSet(conn, params, nparams) < 0)
+        goto error;
+
+    if (conn->driver->domainSetPerfEvents) {
+        int ret;
+        ret = conn->driver->domainSetPerfEvents(domain, params, nparams);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virReportUnsupportedError();
+
+ error:
+    virDispatchError(domain->conn);
+    return -1;
+
+}
+
+
+/**
  * virDomainBlockJobAbort:
  * @dom: pointer to domain object
  * @disk: path to the block device, or device shorthand
-- 
1.9.1




More information about the libvir-list mailing list