]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Adjust VM id allocation
authorErik Skultety <eskultet@redhat.com>
Tue, 28 Jul 2015 15:33:53 +0000 (17:33 +0200)
committerErik Skultety <eskultet@redhat.com>
Wed, 29 Jul 2015 07:15:44 +0000 (09:15 +0200)
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
src/qemu/qemu_conf.h
src/qemu/qemu_driver.c

index 38d4a861d1ff3f4abb83f6bed06724c536745f95..29049dc495ad51ba83d2061bf46a4454f0ee68ef 100644 (file)
@@ -1492,7 +1492,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
 
 int qemuDriverAllocateID(virQEMUDriverPtr driver)
 {
-    return virAtomicIntInc(&driver->nextvmid);
+    return virAtomicIntInc(&driver->lastvmid);
 }
 
 
index 3f739291edefeac4075ce553128357f66ebb9cb9..ed9cd466967a4cdb861a5c143b74fd825ed5e297 100644 (file)
@@ -192,7 +192,7 @@ struct _virQEMUDriver {
     virThreadPoolPtr workerPool;
 
     /* Atomic increment only */
-    int nextvmid;
+    int lastvmid;
 
     /* Atomic inc/dec only */
     unsigned int nactive;
index a761448ebaa0955a274fa31b0e720203822893dc..5b226395e860756791f46893f31adc5eac3e758e 100644 (file)
@@ -611,8 +611,8 @@ qemuDomainFindMaxID(virDomainObjPtr vm,
 {
     int *driver_maxid = data;
 
-    if (vm->def->id >= *driver_maxid)
-        *driver_maxid = vm->def->id + 1;
+    if (vm->def->id > *driver_maxid)
+        *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,