diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cpu/cpu_x86.c | 8 | ||||
-rw-r--r-- | src/cpu/cpu_x86_data.h | 8 | ||||
-rw-r--r-- | src/driver-hypervisor.h | 6 | ||||
-rw-r--r-- | src/libvirt-domain.c | 22 | ||||
-rw-r--r-- | src/libxl/libxl_driver.c | 11 | ||||
-rw-r--r-- | src/qemu/qemu_command.c | 27 | ||||
-rw-r--r-- | src/qemu/qemu_driver.c | 99 | ||||
-rw-r--r-- | src/qemu/qemu_process.c | 59 | ||||
-rw-r--r-- | src/remote/remote_client_bodies.h | 3 | ||||
-rw-r--r-- | src/remote/remote_driver.c | 12 | ||||
-rw-r--r-- | src/remote/remote_protocol.c | 12 | ||||
-rw-r--r-- | src/remote/remote_protocol.h | 2 | ||||
-rw-r--r-- | src/remote/remote_protocol.x | 2 | ||||
-rw-r--r-- | src/remote_protocol-structs | 2 | ||||
-rw-r--r-- | src/rpc/virnetsaslcontext.h | 2 | ||||
-rw-r--r-- | src/util/virperf.c | 2 | ||||
-rw-r--r-- | src/util/virperf.h | 4 |
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 = ¶ms[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 = ¶ms[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 = ¶ms[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; |