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

Erik Skultety eskultet at redhat.com
Tue Jul 28 15:41:25 UTC 2015


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)
-        *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,
-- 
2.4.3




More information about the libvir-list mailing list