[libvirt] [RFC PATCH 08/12] qemu: introduce qemuBuildCPUDeviceStr
Peter Krempa
pkrempa at redhat.com
Wed Jan 21 09:24:02 UTC 2015
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.
If they are equivalent we should use that instead and have the existing
code do the magic.
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/20150121/e90d7a19/attachment-0001.sig>
More information about the libvir-list
mailing list