[libvirt] [v0.10.2-maint][PATCH] qemu: Always format CPU topology

Cole Robinson crobinso at redhat.com
Tue Nov 27 17:01:43 UTC 2012


On 11/13/2012 10:22 AM, Michal Privoznik wrote:
> From: Jiri Denemark <jdenemar at redhat.com>
> 
> When libvirt cannot find a suitable CPU model for host CPU (easily
> reproducible by running libvirt in a guest), it would not provide CPU
> topology in capabilities XML either. Even though CPU topology is known
> and can be queried by virNodeGetInfo. With this patch, CPU topology will
> always be provided in capabilities XML regardless on the presence of CPU
> model.
> (cherry picked from commit f1c70100409562c3f402392aa667732e5f89a2c4)
> 
> Conflicts:
> 
>     src/qemu/qemu_capabilities.c
>     src/qemu/qemu_command.c
> 
>     The new code uses capabilities caching.
> ---
> 
> I am not sure about the correct process of this. So if there are some pointers ....
> 

Thanks Michal, I pulled this locally. Mailing patches to me is fine, though
I'm also fine with just committing and pushing patches to the stable branch :)

Thanks,
Cole

>  src/qemu/qemu_capabilities.c |    6 +++---
>  src/qemu/qemu_domain.c       |    4 +++-
>  src/qemu/qemu_driver.c       |    3 ++-
>  3 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 37f1a2b..b1ef1b9 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -844,6 +844,7 @@ qemuCapsInitGuest(virCapsPtr caps,
>      guest->arch.defaultInfo.emulator_mtime = binary_mtime;
>  
>      if (caps->host.cpu &&
> +        caps->host.cpu->model &&
>          qemuCapsProbeCPUModels(binary, NULL, info->arch, &ncpus, NULL) == 0 &&
>          ncpus > 0 &&
>          !virCapabilitiesAddGuestFeature(guest, "cpuselection", 1, 0))
> @@ -973,12 +974,11 @@ qemuCapsInitCPU(virCapsPtr caps,
>      cpu->sockets = nodeinfo.sockets;
>      cpu->cores = nodeinfo.cores;
>      cpu->threads = nodeinfo.threads;
> +    caps->host.cpu = cpu;
>  
>      if (!(data = cpuNodeData(arch))
>          || cpuDecode(cpu, data, NULL, 0, NULL) < 0)
> -        goto error;
> -
> -    caps->host.cpu = cpu;
> +        goto cleanup;
>  
>      ret = 0;
>  
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 17ae3b9..e23ff11 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -1233,7 +1233,9 @@ qemuDomainDefFormatBuf(struct qemud_driver *driver,
>      if ((flags & VIR_DOMAIN_XML_UPDATE_CPU) &&
>          def_cpu &&
>          (def_cpu->mode != VIR_CPU_MODE_CUSTOM || def_cpu->model)) {
> -        if (!driver->caps || !driver->caps->host.cpu) {
> +        if (!driver->caps ||
> +            !driver->caps->host.cpu ||
> +            !driver->caps->host.cpu->model) {
>              virReportError(VIR_ERR_OPERATION_FAILED,
>                             "%s", _("cannot get host CPU capabilities"));
>              goto cleanup;
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 0258dbb..c1c8fa4 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -10083,7 +10083,8 @@ qemuCPUCompare(virConnectPtr conn,
>      if (!driver->caps) {
>          virReportError(VIR_ERR_INTERNAL_ERROR,
>                         "%s", _("cannot get host capabilities"));
> -    } else if (!driver->caps->host.cpu) {
> +    } else if (!driver->caps->host.cpu ||
> +               !driver->caps->host.cpu->model) {
>          VIR_WARN("cannot get host CPU capabilities");
>          ret = VIR_CPU_COMPARE_INCOMPATIBLE;
>      } else {
> 




More information about the libvir-list mailing list