[libvirt] [RFC PATCH 09/12] qemu: implement cpu device hotplug on live level
Zhu Guihua
zhugh.fnst at cn.fujitsu.com
Thu Jan 22 08:51:18 UTC 2015
On Wed, 2015-01-21 at 10:27 +0100, Peter Krempa wrote:
> On Wed, Jan 21, 2015 at 16:01:01 +0800, Zhu Guihua wrote:
> > This patch implements live hotplug of a cpu device.
> >
> > Signed-off-by: Zhu Guihua <zhugh.fnst at cn.fujitsu.com>
> > ---
> > src/qemu/qemu_driver.c | 6 ++++++
> > src/qemu/qemu_hotplug.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
> > src/qemu/qemu_hotplug.h | 7 +++++++
> > 3 files changed, 68 insertions(+)
> >
>
> ...
>
> > diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> > index f6d7667..bff0d14 100644
> > --- a/src/qemu/qemu_hotplug.c
> > +++ b/src/qemu/qemu_hotplug.c
> > @@ -1541,6 +1541,61 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
> > return ret;
> > }
> >
> > +int
> > +qemuDomainCPUInsert(virDomainDefPtr vmdef,
> > + virDomainCPUDefPtr cpu)
> > +{
> > + if (virDomainCPUFind(vmdef, cpu)) {
> > + virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> > + _("cpu already exists"));
> > + return -1;
> > + }
> > +
> > + if (virDomainCPUInsert(vmdef, cpu) < 0)
> > + return -1;
> > +
> > + return 0;
> > +}
> > +
> > +int qemuDomainAttachCPUDevice(virQEMUDriverPtr driver,
> > + virDomainObjPtr vm,
> > + virDomainCPUDefPtr cpu)
> > +{
> > + int ret = -1;
> > + char *devstr = NULL;
> > + qemuDomainObjPrivatePtr priv = vm->privateData;
> > + virDomainDefPtr vmdef = vm->def;
> > +
> > + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) {
> > + virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> > + _("qemu does not support -device"));
> > + goto cleanup;;
> > + }
> > +
> > + if (qemuAssignDeviceCPUAlias(vmdef, cpu, -1) < 0)
> > + goto cleanup;
> > +
> > + if (qemuBuildCPUDeviceStr(&devstr, cpu, priv->qemuCaps) < 0)
> > + goto cleanup;
> > +
> > + if (qemuDomainCPUInsert(vmdef, cpu) < 0)
> > + goto cleanup;
> > +
> > + qemuDomainObjEnterMonitor(driver, vm);
> > + if (devstr && qemuMonitorAddDevice(priv->mon, devstr) < 0) {
> > + qemuDomainObjExitMonitor(driver, vm);
> > + goto cleanup;
> > + }
> > + qemuDomainObjExitMonitor(driver, vm);
>
> This function recently changed it's prototype and requires the return
> value to be checked. Rebasing to upstream will break build.
I will confirm it, thanks.
Regards,
Zhu
>
> > +
> > + ignore_value(virBitmapSetBit(vm->def->apic_id_map, cpu->apic_id));
> > + ret = 0;
> > +
> > + cleanup:
> > + VIR_FREE(devstr);
> > + return ret;
> > +}
> > +
> > static int
> > qemuDomainAttachHostUSBDevice(virQEMUDriverPtr driver,
> > virDomainObjPtr vm,a
>
> Peter
More information about the libvir-list
mailing list