summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cpu/cpu_x86.c8
-rw-r--r--src/cpu/cpu_x86_data.h8
-rw-r--r--src/driver-hypervisor.h6
-rw-r--r--src/libvirt-domain.c22
-rw-r--r--src/libxl/libxl_driver.c11
-rw-r--r--src/qemu/qemu_command.c27
-rw-r--r--src/qemu/qemu_driver.c99
-rw-r--r--src/qemu/qemu_process.c59
-rw-r--r--src/remote/remote_client_bodies.h3
-rw-r--r--src/remote/remote_driver.c12
-rw-r--r--src/remote/remote_protocol.c12
-rw-r--r--src/remote/remote_protocol.h2
-rw-r--r--src/remote/remote_protocol.x2
-rw-r--r--src/remote_protocol-structs2
-rw-r--r--src/rpc/virnetsaslcontext.h2
-rw-r--r--src/util/virperf.c2
-rw-r--r--src/util/virperf.h4
17 files changed, 195 insertions, 86 deletions
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 90949f68c..b7f16903c 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -75,6 +75,14 @@ static const struct x86_kvm_feature x86_kvm_features[] =
{VIR_CPU_x86_KVM_PV_UNHALT, { .function = 0x40000001, .eax = 0x00000080 }},
{VIR_CPU_x86_KVM_CLOCKSOURCE_STABLE_BIT,
{ .function = 0x40000001, .eax = 0x01000000 }},
+ {VIR_CPU_x86_KVM_HV_RUNTIME, { .function = 0x40000003, .eax = 0x00000001 }},
+ {VIR_CPU_x86_KVM_HV_SYNIC, { .function = 0x40000003, .eax = 0x00000004 }},
+ {VIR_CPU_x86_KVM_HV_STIMER, { .function = 0x40000003, .eax = 0x00000008 }},
+ {VIR_CPU_x86_KVM_HV_RELAXED, { .function = 0x40000003, .eax = 0x00000020 }},
+ {VIR_CPU_x86_KVM_HV_SPINLOCK, { .function = 0x40000003, .eax = 0x00000022 }},
+ {VIR_CPU_x86_KVM_HV_VAPIC, { .function = 0x40000003, .eax = 0x00000030 }},
+ {VIR_CPU_x86_KVM_HV_VPINDEX, { .function = 0x40000003, .eax = 0x00000040 }},
+ {VIR_CPU_x86_KVM_HV_RESET, { .function = 0x40000003, .eax = 0x00000080 }},
};
struct x86_model {
diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h
index 88dccf67a..777cc8d4a 100644
--- a/src/cpu/cpu_x86_data.h
+++ b/src/cpu/cpu_x86_data.h
@@ -48,6 +48,14 @@ struct _virCPUx86CPUID {
# define VIR_CPU_x86_KVM_PV_EOI "__kvm_pv_eoi"
# define VIR_CPU_x86_KVM_PV_UNHALT "__kvm_pv_unhalt"
# define VIR_CPU_x86_KVM_CLOCKSOURCE_STABLE_BIT "__kvm_clocksource_stable"
+# define VIR_CPU_x86_KVM_HV_RUNTIME "__kvm_hv_runtime"
+# define VIR_CPU_x86_KVM_HV_SYNIC "__kvm_hv_synic"
+# define VIR_CPU_x86_KVM_HV_STIMER "__kvm_hv_stimer"
+# define VIR_CPU_x86_KVM_HV_RELAXED "__kvm_hv_relaxed"
+# define VIR_CPU_x86_KVM_HV_SPINLOCK "__kvm_hv_spinlock"
+# define VIR_CPU_x86_KVM_HV_VAPIC "__kvm_hv_vapic"
+# define VIR_CPU_x86_KVM_HV_VPINDEX "__kvm_hv_vpindex"
+# define VIR_CPU_x86_KVM_HV_RESET "__kvm_hv_reset"
typedef struct _virCPUx86Data virCPUx86Data;
diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h
index d0e729880..d11ff7fae 100644
--- a/src/driver-hypervisor.h
+++ b/src/driver-hypervisor.h
@@ -964,12 +964,14 @@ typedef int
typedef int
(*virDrvDomainGetPerfEvents)(virDomainPtr dom,
virTypedParameterPtr *params,
- int *nparams);
+ int *nparams,
+ unsigned int flags);
typedef int
(*virDrvDomainSetPerfEvents)(virDomainPtr dom,
virTypedParameterPtr params,
- int nparams);
+ int nparams,
+ unsigned int flags);
typedef int
(*virDrvDomainBlockJobAbort)(virDomainPtr dom,
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 42031bcd2..3e144b6f8 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -9695,6 +9695,7 @@ virDomainOpenChannel(virDomainPtr dom,
* @domain: a domain object
* @params: where to store perf events setting
* @nparams: number of items in @params
+ * @flags: extra flags; not used yet, so callers should always pass 0
*
* Get all perf events setting. Possible fields returned in @params are
* defined by VIR_DOMAIN_PERF_* macros and new fields will likely be
@@ -9704,12 +9705,13 @@ virDomainOpenChannel(virDomainPtr dom,
*/
int virDomainGetPerfEvents(virDomainPtr domain,
virTypedParameterPtr *params,
- int *nparams)
+ int *nparams,
+ unsigned int flags)
{
virConnectPtr conn;
- VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%p",
- params, nparams);
+ VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%p flags=%x",
+ params, nparams, flags);
virResetLastError();
@@ -9721,7 +9723,8 @@ int virDomainGetPerfEvents(virDomainPtr domain,
if (conn->driver->domainGetPerfEvents) {
int ret;
- ret = conn->driver->domainGetPerfEvents(domain, params, nparams);
+ ret = conn->driver->domainGetPerfEvents(domain, params,
+ nparams, flags);
if (ret < 0)
goto error;
return ret;
@@ -9740,6 +9743,7 @@ int virDomainGetPerfEvents(virDomainPtr domain,
* @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)
+ * @flags: extra flags; not used yet, so callers should always pass 0
*
* Enable or disable the particular list of perf events you care about.
*
@@ -9747,12 +9751,13 @@ int virDomainGetPerfEvents(virDomainPtr domain,
*/
int virDomainSetPerfEvents(virDomainPtr domain,
virTypedParameterPtr params,
- int nparams)
+ int nparams,
+ unsigned int flags)
{
virConnectPtr conn;
- VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d",
- params, nparams);
+ VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d flags=%x",
+ params, nparams, flags);
VIR_TYPED_PARAMS_DEBUG(params, nparams);
virResetLastError();
@@ -9769,7 +9774,8 @@ int virDomainSetPerfEvents(virDomainPtr domain,
if (conn->driver->domainSetPerfEvents) {
int ret;
- ret = conn->driver->domainSetPerfEvents(domain, params, nparams);
+ ret = conn->driver->domainSetPerfEvents(domain, params,
+ nparams, flags);
if (ret < 0)
goto error;
return ret;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 510349595..bf97c9c11 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -3174,12 +3174,13 @@ libxlDomainAttachNetDevice(libxlDriverPrivatePtr driver,
goto cleanup;
}
- vm->def->nets[vm->def->nnets++] = net;
ret = 0;
cleanup:
libxl_device_nic_dispose(&nic);
- if (ret) {
+ if (!ret) {
+ vm->def->nets[vm->def->nnets++] = net;
+ } else {
virDomainNetRemoveHostdev(vm->def, net);
networkReleaseActualDevice(vm->def, net);
}
@@ -3448,12 +3449,14 @@ libxlDomainDetachNetDevice(libxlDriverPrivatePtr driver,
goto cleanup;
}
- networkReleaseActualDevice(vm->def, detach);
- virDomainNetRemove(vm->def, detachidx);
ret = 0;
cleanup:
libxl_device_nic_dispose(&nic);
+ if (!ret) {
+ networkReleaseActualDevice(vm->def, detach);
+ virDomainNetRemove(vm->def, detachidx);
+ }
virObjectUnref(cfg);
return ret;
}
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 45c5398ad..2d0ca97ca 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2945,7 +2945,8 @@ static char *
qemuBuildMemoryDimmBackendStr(virDomainMemoryDefPtr mem,
virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
- virQEMUDriverConfigPtr cfg)
+ virQEMUDriverConfigPtr cfg,
+ virBitmapPtr auto_nodeset)
{
virJSONValuePtr props = NULL;
char *alias = NULL;
@@ -2962,7 +2963,7 @@ qemuBuildMemoryDimmBackendStr(virDomainMemoryDefPtr mem,
goto cleanup;
if (qemuBuildMemoryBackendStr(mem->size, mem->pagesize,
- mem->targetNode, mem->sourceNodes, NULL,
+ mem->targetNode, mem->sourceNodes, auto_nodeset,
def, qemuCaps, cfg,
&backendType, &props, true) < 0)
goto cleanup;
@@ -7181,18 +7182,14 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
static int
-qemuBuildNumaCommandLine(virCommandPtr cmd,
- virQEMUDriverConfigPtr cfg,
- virDomainDefPtr def,
- virQEMUCapsPtr qemuCaps,
- virBitmapPtr nodeset)
+qemuBuildMemoryDeviceCommandLine(virCommandPtr cmd,
+ virQEMUDriverConfigPtr cfg,
+ virDomainDefPtr def,
+ virQEMUCapsPtr qemuCaps,
+ virBitmapPtr nodeset)
{
size_t i;
- if (virDomainNumaGetNodeCount(def->numa) &&
- qemuBuildNumaArgStr(cfg, def, cmd, qemuCaps, nodeset) < 0)
- return -1;
-
/* memory hotplug requires NUMA to be enabled - we already checked
* that memory devices are present only when NUMA is */
for (i = 0; i < def->nmems; i++) {
@@ -7200,7 +7197,7 @@ qemuBuildNumaCommandLine(virCommandPtr cmd,
char *dimmStr;
if (!(backStr = qemuBuildMemoryDimmBackendStr(def->mems[i], def,
- qemuCaps, cfg)))
+ qemuCaps, cfg, nodeset)))
return -1;
if (!(dimmStr = qemuBuildMemoryDeviceStr(def->mems[i]))) {
@@ -9259,7 +9256,11 @@ qemuBuildCommandLine(virConnectPtr conn,
if (qemuBuildIOThreadCommandLine(cmd, def, qemuCaps) < 0)
goto error;
- if (qemuBuildNumaCommandLine(cmd, cfg, def, qemuCaps, nodeset) < 0)
+ if (virDomainNumaGetNodeCount(def->numa) &&
+ qemuBuildNumaArgStr(cfg, def, cmd, qemuCaps, nodeset) < 0)
+ goto error;
+
+ if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, qemuCaps, nodeset) < 0)
goto error;
virUUIDFormat(def->uuid, uuid);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index a0a33a499..4aa162590 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -10040,7 +10040,8 @@ qemuSetGlobalBWLive(virCgroupPtr cgroup, unsigned long long period,
static int
qemuDomainSetPerfEvents(virDomainPtr dom,
virTypedParameterPtr params,
- int nparams)
+ int nparams,
+ unsigned int flags)
{
virQEMUDriverPtr driver = dom->conn->privateData;
size_t i;
@@ -10049,12 +10050,16 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
qemuDomainObjPrivatePtr priv;
virDomainDefPtr def;
virDomainDefPtr persistentDef;
- unsigned int flags = VIR_DOMAIN_AFFECT_CURRENT;
int ret = -1;
virPerfEventType type;
bool enabled;
- if (virTypedParamsValidate(params, nparams, VIR_PERF_PARAMETERS) < 0)
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+ VIR_DOMAIN_AFFECT_CONFIG, -1);
+
+ if (virTypedParamsValidate(params, nparams,
+ VIR_PERF_PARAM_CMT, VIR_TYPED_PARAM_BOOLEAN,
+ NULL) < 0)
return -1;
if (!(vm = qemuDomObjFromDomain(dom)))
@@ -10066,38 +10071,50 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
if (virDomainSetPerfEventsEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
+ if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
- for (i = 0; i < nparams; i++) {
- virTypedParameterPtr param = &params[i];
- enabled = params->value.b;
- type = virPerfEventTypeFromString(param->field);
+ if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
+ goto endjob;
- if (!enabled && virPerfEventDisable(priv->perf, type))
- goto cleanup;
- if (enabled && virPerfEventEnable(priv->perf, type, vm->pid))
- goto cleanup;
+ if (def) {
+ for (i = 0; i < nparams; i++) {
+ virTypedParameterPtr param = &params[i];
+ enabled = params->value.b;
+ type = virPerfEventTypeFromString(param->field);
+
+ if (!enabled && virPerfEventDisable(priv->perf, type))
+ goto endjob;
+ if (enabled && virPerfEventEnable(priv->perf, type, vm->pid))
+ goto endjob;
- if (def) {
def->perf->events[type] = enabled ?
VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO;
-
- if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
- goto cleanup;
}
- if (persistentDef) {
+ if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
+ goto endjob;
+ }
+
+ if (persistentDef) {
+ for (i = 0; i < nparams; i++) {
+ virTypedParameterPtr param = &params[i];
+ enabled = params->value.b;
+ type = virPerfEventTypeFromString(param->field);
+
persistentDef->perf->events[type] = enabled ?
VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO;
-
- if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0)
- goto cleanup;
}
+
+ if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0)
+ goto endjob;
}
ret = 0;
+ endjob:
+ qemuDomainObjEndJob(driver, vm);
+
cleanup:
virDomainObjEndAPI(&vm);
virObjectUnref(cfg);
@@ -10107,39 +10124,63 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
static int
qemuDomainGetPerfEvents(virDomainPtr dom,
virTypedParameterPtr *params,
- int *nparams)
+ int *nparams,
+ unsigned int flags)
{
- size_t i;
+ virQEMUDriverPtr driver = dom->conn->privateData;
virDomainObjPtr vm = NULL;
qemuDomainObjPrivatePtr priv;
- int ret = -1;
+ virDomainDefPtr def;
virTypedParameterPtr par = NULL;
int maxpar = 0;
int npar = 0;
+ size_t i;
+ int ret = -1;
+
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+ VIR_DOMAIN_AFFECT_CONFIG |
+ VIR_TYPED_PARAM_STRING_OKAY, -1);
if (!(vm = qemuDomObjFromDomain(dom)))
goto cleanup;
- priv = vm->privateData;
-
if (virDomainGetPerfEventsEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
+ if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
+ goto cleanup;
+
+ if (!(def = virDomainObjGetOneDef(vm, flags)))
+ goto endjob;
+
+ priv = vm->privateData;
+
for (i = 0; i < VIR_PERF_EVENT_LAST; i++) {
+ bool perf_enabled;
+
+ if (flags & VIR_DOMAIN_AFFECT_CONFIG)
+ perf_enabled = def->perf->events[i] == VIR_TRISTATE_BOOL_YES;
+ else
+ perf_enabled = virPerfEventIsEnabled(priv->perf, i);
+
if (virTypedParamsAddBoolean(&par, &npar, &maxpar,
virPerfEventTypeToString(i),
- virPerfEventIsEnabled(priv->perf, i)) < 0) {
- virTypedParamsFree(par, npar);
- goto cleanup;
- }
+ perf_enabled) < 0)
+ goto endjob;
}
*params = par;
*nparams = npar;
+ par = NULL;
+ npar = 0;
ret = 0;
+ endjob:
+ qemuDomainObjEndJob(driver, vm);
+
cleanup:
virDomainObjEndAPI(&vm);
+ virTypedParamsFree(par, npar);
return ret;
}
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 205d9ae41..e58bf16ea 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3904,11 +3904,6 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
bool ret = false;
size_t i;
- /* no features are passed to QEMU with -cpu host
- * so it makes no sense to verify them */
- if (def->cpu && def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH)
- return true;
-
switch (arch) {
case VIR_ARCH_I686:
case VIR_ARCH_X86_64:
@@ -3933,17 +3928,53 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
}
}
- for (i = 0; def->cpu && i < def->cpu->nfeatures; i++) {
- virCPUFeatureDefPtr feature = &def->cpu->features[i];
+ for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) {
+ if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
+ char *cpuFeature;
+ if (virAsprintf(&cpuFeature, "__kvm_hv_%s",
+ virDomainHypervTypeToString(i)) < 0)
+ goto cleanup;
+ if (!cpuHasFeature(guestcpu, cpuFeature)) {
+ switch ((virDomainHyperv) i) {
+ case VIR_DOMAIN_HYPERV_RELAXED:
+ case VIR_DOMAIN_HYPERV_VAPIC:
+ case VIR_DOMAIN_HYPERV_SPINLOCKS:
+ VIR_WARN("host doesn't support hyperv '%s' feature",
+ virDomainHypervTypeToString(i));
+ break;
+ case VIR_DOMAIN_HYPERV_VPINDEX:
+ case VIR_DOMAIN_HYPERV_RUNTIME:
+ case VIR_DOMAIN_HYPERV_SYNIC:
+ case VIR_DOMAIN_HYPERV_STIMER:
+ case VIR_DOMAIN_HYPERV_RESET:
+ case VIR_DOMAIN_HYPERV_VENDOR_ID:
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("host doesn't support hyperv '%s' feature"),
+ virDomainHypervTypeToString(i));
+ goto cleanup;
+ break;
+
+ /* coverity[dead_error_begin] */
+ case VIR_DOMAIN_HYPERV_LAST:
+ break;
+ }
+ }
+ }
+ }
- if (feature->policy != VIR_CPU_FEATURE_REQUIRE)
- continue;
+ if (def->cpu && def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH) {
+ for (i = 0; i < def->cpu->nfeatures; i++) {
+ virCPUFeatureDefPtr feature = &def->cpu->features[i];
- if (STREQ(feature->name, "invtsc") &&
- !cpuHasFeature(guestcpu, feature->name)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("host doesn't support invariant TSC"));
- goto cleanup;
+ if (feature->policy != VIR_CPU_FEATURE_REQUIRE)
+ continue;
+
+ if (STREQ(feature->name, "invtsc") &&
+ !cpuHasFeature(guestcpu, feature->name)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("host doesn't support invariant TSC"));
+ goto cleanup;
+ }
}
}
break;
diff --git a/src/remote/remote_client_bodies.h b/src/remote/remote_client_bodies.h
index 460109243..e7615880e 100644
--- a/src/remote/remote_client_bodies.h
+++ b/src/remote/remote_client_bodies.h
@@ -4311,7 +4311,7 @@ done:
}
static int
-remoteDomainSetPerfEvents(virDomainPtr dom, virTypedParameterPtr params, int nparams)
+remoteDomainSetPerfEvents(virDomainPtr dom, virTypedParameterPtr params, int nparams, unsigned int flags)
{
int rv = -1;
struct private_data *priv = dom->conn->privateData;
@@ -4320,6 +4320,7 @@ remoteDomainSetPerfEvents(virDomainPtr dom, virTypedParameterPtr params, int npa
remoteDriverLock(priv);
make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
if (virTypedParamsSerialize(params, nparams,
(virTypedParameterRemotePtr *) &args.params.params_val,
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index b3c7b9c23..b03c9ca0a 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -1819,7 +1819,8 @@ remoteDomainGetNumaParameters(virDomainPtr domain,
static int
remoteDomainGetPerfEvents(virDomainPtr domain,
virTypedParameterPtr *params,
- int *nparams)
+ int *nparams,
+ unsigned int flags)
{
int rv = -1;
remote_domain_get_perf_events_args args;
@@ -1829,6 +1830,7 @@ remoteDomainGetPerfEvents(virDomainPtr domain,
remoteDriverLock(priv);
make_nonnull_domain(&args.dom, domain);
+ args.flags = flags;
memset(&ret, 0, sizeof(ret));
if (call(domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_PERF_EVENTS,
@@ -1837,10 +1839,10 @@ remoteDomainGetPerfEvents(virDomainPtr domain,
goto done;
if (virTypedParamsDeserialize((virTypedParameterRemotePtr) ret.params.params_val,
- ret.params.params_len,
- REMOTE_DOMAIN_PERF_EVENTS_MAX,
- params,
- nparams) < 0)
+ ret.params.params_len,
+ REMOTE_DOMAIN_PERF_EVENTS_MAX,
+ params,
+ nparams) < 0)
goto cleanup;
rv = 0;
diff --git a/src/remote/remote_protocol.c b/src/remote/remote_protocol.c
index 638dfc0a8..58c3532a9 100644
--- a/src/remote/remote_protocol.c
+++ b/src/remote/remote_protocol.c
@@ -888,6 +888,8 @@ xdr_remote_domain_set_perf_events_args (XDR *xdrs, remote_domain_set_perf_events
if (!xdr_array (xdrs, objp_cpp0, (u_int *) &objp->params.params_len, REMOTE_DOMAIN_PERF_EVENTS_MAX,
sizeof (remote_typed_param), (xdrproc_t) xdr_remote_typed_param))
return FALSE;
+ if (!xdr_u_int (xdrs, &objp->flags))
+ return FALSE;
return TRUE;
}
@@ -897,6 +899,8 @@ xdr_remote_domain_get_perf_events_args (XDR *xdrs, remote_domain_get_perf_events
if (!xdr_remote_nonnull_domain (xdrs, &objp->dom))
return FALSE;
+ if (!xdr_u_int (xdrs, &objp->flags))
+ return FALSE;
return TRUE;
}
@@ -6204,8 +6208,8 @@ xdr_remote_domain_migrate_begin3_params_ret (XDR *xdrs, remote_domain_migrate_be
bool_t
xdr_remote_domain_migrate_prepare3_params_args (XDR *xdrs, remote_domain_migrate_prepare3_params_args *objp)
{
- char **objp_cpp1 = (char **) (void *) &objp->cookie_in.cookie_in_val;
char **objp_cpp0 = (char **) (void *) &objp->params.params_val;
+ char **objp_cpp1 = (char **) (void *) &objp->cookie_in.cookie_in_val;
if (!xdr_array (xdrs, objp_cpp0, (u_int *) &objp->params.params_len, REMOTE_DOMAIN_MIGRATE_PARAM_LIST_MAX,
sizeof (remote_typed_param), (xdrproc_t) xdr_remote_typed_param))
@@ -6288,8 +6292,8 @@ xdr_remote_domain_migrate_perform3_params_ret (XDR *xdrs, remote_domain_migrate_
bool_t
xdr_remote_domain_migrate_finish3_params_args (XDR *xdrs, remote_domain_migrate_finish3_params_args *objp)
{
- char **objp_cpp1 = (char **) (void *) &objp->cookie_in.cookie_in_val;
char **objp_cpp0 = (char **) (void *) &objp->params.params_val;
+ char **objp_cpp1 = (char **) (void *) &objp->cookie_in.cookie_in_val;
if (!xdr_array (xdrs, objp_cpp0, (u_int *) &objp->params.params_len, REMOTE_DOMAIN_MIGRATE_PARAM_LIST_MAX,
sizeof (remote_typed_param), (xdrproc_t) xdr_remote_typed_param))
@@ -6318,8 +6322,8 @@ xdr_remote_domain_migrate_finish3_params_ret (XDR *xdrs, remote_domain_migrate_f
bool_t
xdr_remote_domain_migrate_confirm3_params_args (XDR *xdrs, remote_domain_migrate_confirm3_params_args *objp)
{
- char **objp_cpp1 = (char **) (void *) &objp->cookie_in.cookie_in_val;
char **objp_cpp0 = (char **) (void *) &objp->params.params_val;
+ char **objp_cpp1 = (char **) (void *) &objp->cookie_in.cookie_in_val;
if (!xdr_remote_nonnull_domain (xdrs, &objp->dom))
return FALSE;
@@ -6560,8 +6564,8 @@ xdr_remote_node_get_free_pages_ret (XDR *xdrs, remote_node_get_free_pages_ret *o
bool_t
xdr_remote_node_alloc_pages_args (XDR *xdrs, remote_node_alloc_pages_args *objp)
{
- char **objp_cpp0 = (char **) (void *) &objp->pageSizes.pageSizes_val;
char **objp_cpp1 = (char **) (void *) &objp->pageCounts.pageCounts_val;
+ char **objp_cpp0 = (char **) (void *) &objp->pageSizes.pageSizes_val;
if (!xdr_array (xdrs, objp_cpp0, (u_int *) &objp->pageSizes.pageSizes_len, REMOTE_NODE_MAX_CELLS,
sizeof (u_int), (xdrproc_t) xdr_u_int))
diff --git a/src/remote/remote_protocol.h b/src/remote/remote_protocol.h
index 568553594..3324686b2 100644
--- a/src/remote/remote_protocol.h
+++ b/src/remote/remote_protocol.h
@@ -509,11 +509,13 @@ struct remote_domain_set_perf_events_args {
u_int params_len;
remote_typed_param *params_val;
} params;
+ u_int flags;
};
typedef struct remote_domain_set_perf_events_args remote_domain_set_perf_events_args;
struct remote_domain_get_perf_events_args {
remote_nonnull_domain dom;
+ u_int flags;
};
typedef struct remote_domain_get_perf_events_args remote_domain_get_perf_events_args;
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index cb19bc079..8bda792ab 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -634,10 +634,12 @@ struct remote_domain_get_numa_parameters_ret {
struct remote_domain_set_perf_events_args {
remote_nonnull_domain dom;
remote_typed_param params<REMOTE_DOMAIN_PERF_EVENTS_MAX>;
+ unsigned int flags;
};
struct remote_domain_get_perf_events_args {
remote_nonnull_domain dom;
+ unsigned int flags;
};
struct remote_domain_get_perf_events_ret {
diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs
index 1257aac51..6dddd52ab 100644
--- a/src/remote_protocol-structs
+++ b/src/remote_protocol-structs
@@ -310,9 +310,11 @@ struct remote_domain_set_perf_events_args {
u_int params_len;
remote_typed_param * params_val;
} params;
+ u_int flags;
};
struct remote_domain_get_perf_events_args {
remote_nonnull_domain dom;
+ u_int flags;
};
struct remote_domain_get_perf_events_ret {
struct {
diff --git a/src/rpc/virnetsaslcontext.h b/src/rpc/virnetsaslcontext.h
index 54634d5f1..edc082f3a 100644
--- a/src/rpc/virnetsaslcontext.h
+++ b/src/rpc/virnetsaslcontext.h
@@ -21,9 +21,9 @@
#ifndef __VIR_NET_CLIENT_SASL_CONTEXT_H__
# define __VIR_NET_CLIENT_SASL_CONTEXT_H__
+# include "internal.h"
# include <sasl/sasl.h>
-# include "internal.h"
# include "virobject.h"
typedef struct _virNetSASLContext virNetSASLContext;
diff --git a/src/util/virperf.c b/src/util/virperf.c
index 9dc4e2562..359a9c34e 100644
--- a/src/util/virperf.c
+++ b/src/util/virperf.c
@@ -247,7 +247,7 @@ virPerfReadEvent(virPerfPtr perf,
if (event == NULL || !event->enabled)
return -1;
- if (read(event->fd, value, sizeof(uint64_t)) < 0) {
+ if (saferead(event->fd, value, sizeof(uint64_t)) < 0) {
virReportSystemError(errno, "%s",
_("Unable to read cache data"));
return -1;
diff --git a/src/util/virperf.h b/src/util/virperf.h
index 4c36b78f3..8ec87530b 100644
--- a/src/util/virperf.h
+++ b/src/util/virperf.h
@@ -32,10 +32,6 @@ typedef enum {
VIR_ENUM_DECL(virPerfEvent);
-# define VIR_PERF_PARAMETERS \
- VIR_PERF_PARAM_CMT, VIR_TYPED_PARAM_BOOLEAN, \
- NULL
-
struct virPerf;
typedef struct virPerf *virPerfPtr;