From: Jiri Denemark Date: Fri, 20 Sep 2019 20:48:13 +0000 (+0200) Subject: qemu: Filter models in virQEMUCapsGetCPUDefinitions X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=4d74990143fc892283a172ad6c485e685e2900de;p=libvirt.git qemu: Filter models in virQEMUCapsGetCPUDefinitions Some callers of virQEMUCapsGetCPUDefinitions will need to filter the returned list of CPU models. Let's add the filtering parameters directly to virQEMUCapsGetCPUDefinitions to avoid copying the CPU models list twice. Signed-off-by: Jiri Denemark Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 6e5d894a36..65260c77df 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1883,7 +1883,9 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, - virDomainVirtType type) + virDomainVirtType type, + const char **modelWhitelist, + const char **modelBlacklist) { virDomainCapsCPUModelsPtr cpuModels; @@ -1895,6 +1897,9 @@ virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, if (!cpuModels) return NULL; + if (modelWhitelist || modelBlacklist) + return virDomainCapsCPUModelsFilter(cpuModels, modelWhitelist, modelBlacklist); + return virDomainCapsCPUModelsCopy(cpuModels); } @@ -3132,7 +3137,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, if (!(data = virQEMUCapsGetCPUModelX86Data(qemuCaps, model, migratable))) goto cleanup; - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type); + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type, NULL, NULL); if (cpuDecode(cpu, data, cpuModels) < 0) goto cleanup; @@ -3221,7 +3226,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, VIR_DEBUG("No host CPU model info from QEMU; probing host CPU directly"); - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type); + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type, NULL, NULL); hostCPU = virQEMUCapsProbeHostCPU(hostArch, cpuModels); if (!hostCPU || diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index aa593396ce..d621d1fcfe 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -573,7 +573,9 @@ int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, size_t count, virDomainCapsCPUUsable usable); virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, - virDomainVirtType type); + virDomainVirtType type, + const char **modelWhitelist, + const char **modelBlacklist); virDomainCapsCPUModelsPtr virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, virArch arch); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f5e3671c2b..0a748b10a2 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13710,7 +13710,7 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn, if (!qemuCaps) goto cleanup; - if (!(cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, virttype)) || + if (!(cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, virttype, NULL, NULL)) || cpuModels->nmodels == 0) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("QEMU '%s' does not support any CPU models for " diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 148d498035..55595aa73a 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6054,7 +6054,7 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0) return -1; - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType); + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType, NULL, NULL); if (virCPUTranslate(def->os.arch, def->cpu, cpuModels) < 0) return -1; diff --git a/tests/cputest.c b/tests/cputest.c index b8ec76d2fe..21d95e9e28 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -542,7 +542,7 @@ cpuTestGetCPUModels(const struct data *data, if (!(qemuCaps = cpuTestMakeQEMUCaps(data))) return -1; - *models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM); + *models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM, NULL, NULL); virObjectUnref(qemuCaps);