* src/libvirt-domain.c: Implement virDomainGetPerfEvents and
virDomainSetPerfEvents.
Signed-off-by: Qiaowei Ren <qiaowei.ren(a)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