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

Erik Skultety eskultet at redhat.com
Wed Jul 29 07:21:05 UTC 2015



On 28/07/15 17:49, Daniel P. Berrange wrote:
> 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
> 
Adjusted and pushed, thank you.
Erik




More information about the libvir-list mailing list