[libvirt] [PATCH] qemu: Adjust VM id allocation

Daniel P. Berrange berrange at redhat.com
Tue Jul 28 15:49:50 UTC 2015


On Tue, Jul 28, 2015 at 05:41:25PM +0200, Erik Skultety wrote:
> Our atomic increment (virAtomicIntInc) uses (if available) gcc
> __sync_add_and_fetch builtin. In qemu driver though, we'd profit more
> from __sync_fetch_and_add builtin. To keep it simplistic, this patch
> adjusts qemu driver initialization rather than adding a new atomic
> increment macro.
> ---
>  src/qemu/qemu_conf.c   | 2 +-
>  src/qemu/qemu_conf.h   | 2 +-
>  src/qemu/qemu_driver.c | 7 ++-----
>  3 files changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index 38d4a86..29049dc 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -1492,7 +1492,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
>  
>  int qemuDriverAllocateID(virQEMUDriverPtr driver)
>  {
> -    return virAtomicIntInc(&driver->nextvmid);
> +    return virAtomicIntInc(&driver->lastvmid);
>  }
>  
>  
> diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
> index 3f73929..ed9cd46 100644
> --- a/src/qemu/qemu_conf.h
> +++ b/src/qemu/qemu_conf.h
> @@ -192,7 +192,7 @@ struct _virQEMUDriver {
>      virThreadPoolPtr workerPool;
>  
>      /* Atomic increment only */
> -    int nextvmid;
> +    int lastvmid;
>  
>      /* Atomic inc/dec only */
>      unsigned int nactive;
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index a761448..055f0ca 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -612,7 +612,7 @@ qemuDomainFindMaxID(virDomainObjPtr vm,
>      int *driver_maxid = data;
>  
>      if (vm->def->id >= *driver_maxid)

You can s/>=/>/ now too - functionally the same but slightly
less misleading

> -        *driver_maxid = vm->def->id + 1;
> +        *driver_maxid = vm->def->id;
>  
>      return 0;
>  }
> @@ -649,9 +649,6 @@ qemuStateInitialize(bool privileged,
>      qemu_driver->inhibitCallback = callback;
>      qemu_driver->inhibitOpaque = opaque;
>  
> -    /* Don't have a dom0 so start from 1 */
> -    qemu_driver->nextvmid = 1;
> -
>      qemu_driver->privileged = privileged;
>  
>      if (!(qemu_driver->domains = virDomainObjListNew()))
> @@ -909,7 +906,7 @@ qemuStateInitialize(bool privileged,
>       * threads */
>      virDomainObjListForEach(qemu_driver->domains,
>                              qemuDomainFindMaxID,
> -                            &qemu_driver->nextvmid);
> +                            &qemu_driver->lastvmid);
>  
>      virDomainObjListForEach(qemu_driver->domains,
>                              qemuDomainNetsRestart,

ACK

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list