[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