[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 = &params[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