From 73411a7ff1e4102960b2c09ed604933b104c53dc Mon Sep 17 00:00:00 2001 From: Jiri Denemark <jdenemar@redhat.com> Date: Sun, 20 Nov 2016 23:21:19 +0100 Subject: [PATCH] qemu: Avoid reporting "host" as a supported CPU model "host" CPU model is supported by a special host-passthrough CPU mode and users is not allowed to specify this model directly with custom mode. Thus we should not advertise "host" CPU model in domain capabilities. This worked well on architectures for which libvirt provides a list of supported CPU models in cpu_map.xml (since "host" is not in the list). But we need to explicitly filter "host" model out for all other architectures. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/conf/domain_capabilities.c | 6 +++++- src/conf/domain_capabilities.h | 3 ++- src/qemu/qemu_capabilities.c | 4 +++- .../domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml | 1 - tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml | 1 - 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index fb2d696449..bb6742359b 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -176,7 +176,8 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old) virDomainCapsCPUModelsPtr virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, - const char **models) + const char **models, + const char **blacklist) { virDomainCapsCPUModelsPtr cpuModels; size_t i; @@ -188,6 +189,9 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, if (models && !virStringListHasString(models, old->models[i].name)) continue; + if (blacklist && virStringListHasString(blacklist, old->models[i].name)) + continue; + if (virDomainCapsCPUModelsAdd(cpuModels, old->models[i].name, -1, old->models[i].usable) < 0) diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 13a65e3516..82183c4524 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -167,7 +167,8 @@ virDomainCapsPtr virDomainCapsNew(const char *path, virDomainCapsCPUModelsPtr virDomainCapsCPUModelsNew(size_t nmodels); virDomainCapsCPUModelsPtr virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old); virDomainCapsCPUModelsPtr virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, - const char **models); + const char **models, + const char **blacklist); int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, char **name, virDomainCapsCPUUsable usable); diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 9e3d10f702..3581c2d723 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -4955,6 +4955,7 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, VIR_CPU_MODE_CUSTOM)) { virDomainCapsCPUModelsPtr filtered = NULL; char **models = NULL; + const char *blacklist[] = { "host", NULL }; if (virCPUGetModels(domCaps->arch, &models) >= 0) { virDomainCapsCPUModelsPtr cpus; @@ -4965,7 +4966,8 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, cpus = qemuCaps->tcgCPUModels; filtered = virDomainCapsCPUModelsFilter(cpus, - (const char **) models); + (const char **) models, + blacklist); virStringListFree(models); } domCaps->cpu.custom = filtered; diff --git a/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml b/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml index 0b5a4379a1..76aee83ba1 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml @@ -38,7 +38,6 @@ <model usable='unknown'>sa1110</model> <model usable='unknown'>arm1176</model> <model usable='unknown'>cortex-a53</model> - <model usable='unknown'>host</model> <model usable='unknown'>sa1100</model> <model usable='unknown'>pxa270-c5</model> <model usable='unknown'>cortex-a9</model> diff --git a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml index 201f9e0d7b..ca511f48d8 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml @@ -38,7 +38,6 @@ <model usable='unknown'>sa1110</model> <model usable='unknown'>arm1176</model> <model usable='unknown'>cortex-a53</model> - <model usable='unknown'>host</model> <model usable='unknown'>sa1100</model> <model usable='unknown'>pxa270-c5</model> <model usable='unknown'>cortex-a9</model>