[libvirt] [PATCH 2/2] Emit VIR_DOMAIN_EVENT_ID_DEVICE_ADDED in the QEMU driver

Ján Tomko jtomko at redhat.com
Tue Apr 14 14:13:18 UTC 2015


On Mon, Apr 13, 2015 at 02:03:57PM -0400, John Ferlan wrote:
> 
> 
> On 04/04/2015 01:16 PM, Ján Tomko wrote:
> > Only for devices that have an alias.
> > ---
> >  src/qemu/qemu_driver.c  | 17 ++++++++++++++++-
> >  src/qemu/qemu_hotplug.c |  5 +++++
> >  2 files changed, 21 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> > index 6132674..c13f22b 100644
> > --- a/src/qemu/qemu_driver.c
> > +++ b/src/qemu/qemu_driver.c
> > @@ -7586,17 +7586,20 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm,
> >  {
> >      virQEMUDriverPtr driver = dom->conn->privateData;
> >      int ret = -1;
> > +    const char *alias = NULL;
> >  
> >      switch ((virDomainDeviceType) dev->type) {
> >      case VIR_DOMAIN_DEVICE_DISK:
> >          qemuDomainObjCheckDiskTaint(driver, vm, dev->data.disk, -1);
> >          ret = qemuDomainAttachDeviceDiskLive(dom->conn, driver, vm, dev);
> > +        alias = dev->data.disk->info.alias;
> >          if (!ret)
> >              dev->data.disk = NULL;
> >          break;
> >  
> >      case VIR_DOMAIN_DEVICE_CONTROLLER:
> >          ret = qemuDomainAttachDeviceControllerLive(driver, vm, dev);
> > +        alias = dev->data.controller->info.alias;
> 
> The one concern I'd have for all of these is - if (ret != 0) - is there
> any path that free's anything along the way that you're using a pointer
> in the alias fetching?

All the functions except AttachMemory should only add the device to the
domain definition right after setting ret to 0, so if ret == -1, it
should still be owned by the caller.

> 
> Additionally of course, since the only way to print the alias is if (ret
> == 0) later, one could point out that setting it when ret != 0 is
> pointless; however, at least if ret == 0, you should be able to assume
> no one as deleted the alias!
> 

Actually, this is wrong. When ret == 0, the device is already a part of
the domain definition. And the domain object is unlocked when we enter
the monitor in qemuDomainUpdateDeviceList.

So the Event should be queued before the call to UpdateDeviceList, or a
local copy of the alias is needed. Either way, another version of this
patch is needed.

> Perhaps it's best to only get the alias if (!ret)
> 
> Your call if you want to add a "note" for case VIR_DOMAIN_DEVICE_MEMORY
> that the event is elicited inside the call since the call consumes
> dev->data.memory and hence the alias.

Good idea.

Jan

> 
> I think with the alias setting inside !ret I'd feel comfortable giving
> an ACK - although I suspect in the other case it's not deleted until
> after this call exits
> 
> John
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150414/dd341149/attachment-0001.sig>


More information about the libvir-list mailing list