[libvirt] [PATCHv3 11/12] qemu: Implement memory device hotplug

Peter Krempa pkrempa at redhat.com
Mon Mar 23 13:17:20 UTC 2015


On Thu, Mar 19, 2015 at 18:40:36 -0400, John Ferlan wrote:
> 
> 
> On 03/17/2015 10:20 AM, Peter Krempa wrote:
> > Add code to hot-add memory devices to running qemu instances.
> > ---
> > 
> > Notes:
> >     Version 3:
> >     - added comment to clarify that @mem is always consumed by qemuDomainAttachMemory
> >     Version 2:
> >     - no change
> >     
> >     Version 2:
> >     - no change
> > 
> >  src/qemu/qemu_command.c |  4 +--
> >  src/qemu/qemu_command.h | 15 ++++++++
> >  src/qemu/qemu_driver.c  |  5 ++-
> >  src/qemu/qemu_hotplug.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++
> >  src/qemu/qemu_hotplug.h |  3 ++
> >  5 files changed, 119 insertions(+), 3 deletions(-)
> > 
> > @@ -1672,6 +1672,101 @@ qemuDomainAttachRNGDevice(virQEMUDriverPtr driver,

...

> >  }
> > 
> > 
> > +/**
> > + * qemuDomainAttachMemory:
> > + * @driver: qemu driver data
> > + * @vm: VM object
> > + * @mem: Definition of the memory device to be attached. @mem is always consumed
> > + *
> > + * Attaches memory device described by @mem to domain @vm.
> > + *
> > + * Returns 0 on success -1 on error.
> > + */
> > +int
> > +qemuDomainAttachMemory(virQEMUDriverPtr driver,
> > +                       virDomainObjPtr vm,
> > +                       virDomainMemoryDefPtr mem)
> > +{
> > +    qemuDomainObjPrivatePtr priv = vm->privateData;
> > +    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> > +    char *devstr = NULL;
> > +    char *objalias = NULL;
> > +    const char *backendType;
> > +    virJSONValuePtr props = NULL;
> > +    int id;
> > +    int ret = -1;
> > +
> > +    if (virAsprintf(&mem->info.alias, "dimm%zu", vm->def->nmems) < 0)
> > +        goto cleanup;
> > +
> > +    if (virAsprintf(&objalias, "mem%s", mem->info.alias) < 0)
> > +        goto cleanup;
> > +
> > +    if (!(devstr = qemuBuildMemoryDeviceStr(mem, priv->qemuCaps)))
> > +        goto cleanup;
> > +
> > +    qemuDomainMemoryDeviceAlignSize(mem);
> > +
> > +    if (qemuBuildMemoryBackendStr(mem->size, mem->pagesize,
> > +                                  mem->targetNode, mem->sourceNodes, NULL,
> > +                                  vm->def, priv->qemuCaps, cfg,
> > +                                  &backendType, &props, true) < 0)
> 
> Coverity determines that qemuBuildMemoryBackendStr can return props here
> with a -1 return and thus leak props
> 
> That's because qemuBuildMemoryBackendStr sets the returned *backendProps
> and sets the local props to NULL before the (!hugepages) code which if
> it fails won't cause 'props' to be free'd properly
> 
> Adding the virJSONValueFree(props); makes Coverity happy again.

I'll fix qemuBuildMemoryBackendStr separately rather than adding a
pseudo-hack that would violate the style we are using for functions that
return via argument.

Peter
-------------- 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/20150323/c6b2f61f/attachment-0001.sig>


More information about the libvir-list mailing list