[libvirt] [RFC PATCH 08/12] qemu: introduce qemuBuildCPUDeviceStr
Zhu Guihua
zhugh.fnst at cn.fujitsu.com
Thu Jan 22 08:50:39 UTC 2015
On Wed, 2015-01-21 at 10:24 +0100, Peter Krempa wrote:
> On Wed, Jan 21, 2015 at 16:01:00 +0800, Zhu Guihua wrote:
> > qemuBuildCPUDeviceStr being introduced is responsible for creating command
> > line argument for '-device' for given cpu device.
> >
> > Signed-off-by: Zhu Guihua <zhugh.fnst at cn.fujitsu.com>
> > ---
> > src/qemu/qemu_command.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++
> > src/qemu/qemu_command.h | 5 +++++
> > 2 files changed, 55 insertions(+)
> >
> > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> > index 2ee3e10..824ad29 100644
> > --- a/src/qemu/qemu_command.c
> > +++ b/src/qemu/qemu_command.c
> > @@ -5956,6 +5956,50 @@ static char *qemuBuildTPMDevStr(const virDomainDef *def,
> > }
> >
> >
> > +int
> > +qemuBuildCPUDeviceStr(char **deviceStr,
> > + virDomainCPUDefPtr dev,
> > + virQEMUCapsPtr qemuCaps)
> > +{
> > + virBuffer buf = VIR_BUFFER_INITIALIZER;
> > +
> > + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU64_CPU)) {
> > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> > + _("%s not supported in this QEMU binary"), dev->driver);
>
> You blindly assume that the user passed the correct model here and not
> any other invalid string. As I've already said, having this converted to
> an enum makes things easier.
>
> > + goto error;
> > + }
> > +
> > + virBufferAsprintf(&buf, "%s,id=%s,apic-id=%d",
> > + dev->driver, dev->info.alias,
> > + dev->apic_id);
>
> Having a buffer for a single virBufferAsprintf case is a bit overkill.
>
> > +
> > + if (virBufferCheckError(&buf) < 0)
> > + goto error;
> > +
> > + *deviceStr = virBufferContentAndReset(&buf);
> > + return 0;
> > +
> > + error:
> > + virBufferFreeAndReset(&buf);
> > + return -1;
> > +}
> > +
> > +static int
> > +qemuBuildCPUDeviceCommandLine(virCommandPtr cmd,
> > + virDomainCPUDefPtr dev,
> > + virQEMUCapsPtr qemuCaps)
> > +{
> > + char *devstr = NULL;
> > +
> > + if (qemuBuildCPUDeviceStr(&devstr, dev, qemuCaps) < 0)
> > + return -1;
> > +
> > + virCommandAddArgList(cmd, "-device", devstr, NULL);
> > + VIR_FREE(devstr);
> > + return 0;
> > +}
> > +
> > +
> > static char *qemuBuildSmbiosBiosStr(virSysinfoDefPtr def)
> > {
> > virBuffer buf = VIR_BUFFER_INITIALIZER;
> > @@ -9862,6 +9906,12 @@ qemuBuildCommandLine(virConnectPtr conn,
> > goto error;
> > }
> >
> > + /* add cpu devices */
> > + for (i = 0; i < def->ncpus; i++) {
> > + if (qemuBuildCPUDeviceCommandLine(cmd, def->cpus[i], qemuCaps) < 0)
> > + goto error;
> > + }
>
>
> As I've asked before. The question here is whether this is equivalent
> with just increasing the vCPU count in the "-cpu" argument.
>
> If not it will require a bit more work for setting cgroups, numa pinning
> and other stuff.
Yes, we should require more work.
Regards,
Zhu
>
> If they are equivalent we should use that instead and have the existing
> code do the magic.
>
> Peter
More information about the libvir-list
mailing list