[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