[libvirt] [PATCH v3 05/20] Remove probing of CPU models when launching QEMU guests

Jiri Denemark jdenemar at redhat.com
Wed Sep 26 09:05:14 UTC 2012


On Tue, Sep 25, 2012 at 18:59:58 +0100, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> When launching a QEMU guest the binary is probed to discover
> the list of supported CPU names. Remove this probing with a
> simple lookup of CPU models in the qemuCapsPtr object. This
> avoids another invocation of the QEMU binary during the
> startup path.
> 
> As a nice benefit we can now remove all the nasty hacks from
> the test suite which were done to avoid having to exec QEMU
> on the test system. The building of the -cpu command line
> can just rely on data we pre-populate in qemuCapsPtr.

Nice, I wanted to do this since I first implemented CPU model probing :-)

> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index dd043a1..c73034d 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -4067,7 +4067,7 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
>      virCPUDefPtr guest = NULL;
>      virCPUDefPtr cpu = NULL;
>      size_t ncpus = 0;
> -    const char **cpus = NULL;
> +    char **cpus = NULL;
>      const char *default_model;
>      union cpuData *data = NULL;
>      bool have_cpu = false;
> @@ -4089,12 +4089,8 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
>          const char *preferred;
>          int hasSVM;
>  
> -        if (host &&
> -            qemuCapsProbeCPUModels(emulator, caps, host->arch,
> -                                   &ncpus, &cpus) < 0)
> -            goto cleanup;
> -
> -        if (!ncpus || !host) {
> +        if (!host ||
> +            (ncpus = qemuCapsGetCPUDefinitions(caps, &cpus)) == 0) {
>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                             _("CPU specification not supported by hypervisor"));
>              goto cleanup;
> @@ -4163,7 +4159,7 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
>  
>              guest->type = VIR_CPU_TYPE_GUEST;
>              guest->fallback = cpu->fallback;
> -            if (cpuDecode(guest, data, cpus, ncpus, preferred) < 0)
> +            if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)

Hmm, is this typecast really necessary?

>                  goto cleanup;
>  
>              virBufferAdd(&buf, guest->model, -1);
...

ACK

Jirka




More information about the libvir-list mailing list