From: Jiri Denemark Date: Sun, 20 Nov 2016 22:21:19 +0000 (+0100) Subject: qemu: Avoid reporting "host" as a supported CPU model X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=73411a7ff1e4102960b2c09ed604933b104c53dc;p=libvirt.git 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 --- 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 @@ sa1110 arm1176 cortex-a53 - host sa1100 pxa270-c5 cortex-a9 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 @@ sa1110 arm1176 cortex-a53 - host sa1100 pxa270-c5 cortex-a9