[libvirt] [PATCH 1/2] qemu: clean up qemuSetSchedulerParametersFlags()
Eric Blake
eblake at redhat.com
Tue Sep 4 14:48:00 UTC 2012
On 09/04/2012 08:12 AM, Peter Krempa wrote:
> This patch tries to clean the code up a little bit and shorten very long
> lines.
> ---
> src/qemu/qemu_driver.c | 69 +++++++++++++++++++++++---------------------------
> 1 file changed, 31 insertions(+), 38 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index b12d9bc..4b8b751 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -7801,6 +7801,8 @@ qemuSetSchedulerParametersFlags(virDomainPtr dom,
> virCgroupPtr group = NULL;
> virDomainObjPtr vm = NULL;
> virDomainDefPtr vmdef = NULL;
> + unsigned long long value_ul;
> + long long value_l;
> int ret = -1;
> int rc;
>
> @@ -7857,74 +7859,65 @@ qemuSetSchedulerParametersFlags(virDomainPtr dom,
>
> for (i = 0; i < nparams; i++) {
> virTypedParameterPtr param = ¶ms[i];
> + value_ul = param->value.ul;
> + value_l = param->value.l;
Technically, reading two distinct values from a single union is
undefined behavior; it is only well-defined to read a single value
according to the discriminating type found outside the union. In
practice, though, I see no practical issues with this, if Coverity and
the like don't complain.
> } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_VCPU_PERIOD)) {
> - if (flags & VIR_DOMAIN_AFFECT_LIVE) {
> - rc = qemuSetVcpusBWLive(vm, group, params[i].value.ul, 0);
> - if (rc != 0)
> + if (flags & VIR_DOMAIN_AFFECT_LIVE && value_ul) {
> + if ((rc = qemuSetVcpusBWLive(vm, group, value_ul, 0)))
> goto cleanup;
>
> - if (params[i].value.ul)
> - vm->def->cputune.period = params[i].value.ul;
> + vm->def->cputune.period = value_ul;
> }
This is a slight change in semantics; beforehand, it called
qemuSetVcpusBWLive even when the value was 0; now it only calls the
helper function for a non-zero value. Your commit message made it sound
like this patch has no semantic impact; either it is wrong (this is
intentional, so you should document it), or it was right (and this hunk
is wrong). Which is it?
> } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_VCPU_QUOTA)) {
> - if (flags & VIR_DOMAIN_AFFECT_LIVE) {
> - rc = qemuSetVcpusBWLive(vm, group, 0, params[i].value.l);
> - if (rc != 0)
> + if (flags & VIR_DOMAIN_AFFECT_LIVE && value_l) {
And another one of those semantic changes.
> } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_EMULATOR_PERIOD)) {
> - if (flags & VIR_DOMAIN_AFFECT_LIVE) {
> - rc = qemuSetEmulatorBandwidthLive(vm, group, params[i].value.ul, 0);
> - if (rc != 0)
> + if (flags & VIR_DOMAIN_AFFECT_LIVE && value_ul) {
And another.
> } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA)) {
> - if (flags & VIR_DOMAIN_AFFECT_LIVE) {
> - rc = qemuSetEmulatorBandwidthLive(vm, group, 0, params[i].value.l);
> - if (rc != 0)
> + if (flags & VIR_DOMAIN_AFFECT_LIVE && value_l) {
And another.
Depending on how you answer my complaint, I might be able to ack this
with just an improved commit message, instead of needing a v2.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 617 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120904/2486c5dc/attachment-0001.sig>
More information about the libvir-list
mailing list