From b2960501c7997978b1e42523c47169069fe1edbd Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Tue, 28 Jul 2015 17:33:53 +0200 Subject: [PATCH] qemu: Adjust VM id allocation 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 | 9 +++------ 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 38d4a861d1..29049dc495 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 3f739291ed..ed9cd46696 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 a761448eba..5b226395e8 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -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, -- 2.39.5