From: Jiri Denemark Date: Fri, 29 Apr 2016 08:42:56 +0000 (+0200) Subject: domcaps: Show only CPU models supported by libvirt X-Git-Tag: v2.3.0-rc1~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=33f9ccc1414637a94e7744988e8858bbe91cdbcb;p=thirdparty%2Flibvirt.git domcaps: Show only CPU models supported by libvirt Listing all CPU models supported by QEMU in domain capabilities makes little sense when libvirt will refuse any model it doesn't know about. Signed-off-by: Jiri Denemark --- diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index e47aa865b1..828fa707ca 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -169,6 +169,33 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old) } +virDomainCapsCPUModelsPtr +virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, + const char **models) +{ + virDomainCapsCPUModelsPtr cpuModels; + size_t i; + + if (!(cpuModels = virDomainCapsCPUModelsNew(0))) + return NULL; + + for (i = 0; i < old->nmodels; i++) { + if (models && !virStringArrayHasString(models, old->models[i].name)) + continue; + + if (virDomainCapsCPUModelsAdd(cpuModels, + old->models[i].name, -1) < 0) + goto error; + } + + return cpuModels; + + error: + virObjectUnref(cpuModels); + return NULL; +} + + int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, char **name) diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 149a13f328..57f0161be8 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -156,6 +156,8 @@ virDomainCapsPtr virDomainCapsNew(const char *path, virDomainCapsCPUModelsPtr virDomainCapsCPUModelsNew(size_t nmodels); virDomainCapsCPUModelsPtr virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old); +virDomainCapsCPUModelsPtr virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, + const char **models); int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, char **name); int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 13e802a58b..dc4bba71f3 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -156,6 +156,7 @@ virDomainAuditVcpu; virDomainCapsCPUModelsAdd; virDomainCapsCPUModelsAddSteal; virDomainCapsCPUModelsCopy; +virDomainCapsCPUModelsFilter; virDomainCapsCPUModelsNew; virDomainCapsEnumClear; virDomainCapsEnumSet; diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 87749c9fb5..92b8b026de 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -4288,6 +4288,8 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, virQEMUCapsPtr qemuCaps, virDomainCapsPtr domCaps) { + virDomainCapsCPUModelsPtr filtered = NULL; + char **models = NULL; if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM && virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch)) @@ -4297,7 +4299,13 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, domCaps->cpu.hostModel = virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch); - domCaps->cpu.custom = virObjectRef(qemuCaps->cpuDefinitions); + if (qemuCaps->cpuDefinitions && + cpuGetModels(domCaps->arch, &models) >= 0) { + filtered = virDomainCapsCPUModelsFilter(qemuCaps->cpuDefinitions, + (const char **) models); + virStringFreeList(models); + } + domCaps->cpu.custom = filtered; return 0; } diff --git a/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml b/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml index a0aa8112a9..d96927438e 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml @@ -22,436 +22,8 @@ - default - ppc - ppc32 - ppc64 - 970mp - 970fx - 970 - POWER8NVL POWER8 - POWER8E - POWER7+ POWER7 - POWER5gs - POWER5+ - Apollo7PM - 7457A - 7447A - Apollo7 - 7457 - Apollo6 - 7455 - 7445 - 7451 - 7441 - Vger - 7450 - 7448 - Nitro - 7410 - G4 - Max - 7400 - Goldfinger - 755 - 745 - LoneStar - 750l - 750gx - 750fx - 750cxe - 750cx - 750cl - Conan/Doyle - G3 - Typhoon - 750 - Arthur - 740 - Mach5 - Sirocco - 604e - Goldeneye - 603r - Vaillant - Stretch - 603e - Vanilla - 601v - 601 - MPC8560 - MPC8555E - MPC8555 - MPC8548E - MPC8548 - MPC8547E - MPC8545E - MPC8545 - MPC8544E - MPC8544 - MPC8543E - MPC8543 - MPC8541E - MPC8541 - MPC8540 - MPC8533E - MPC8533 - e500v2 - e500v1 - e500 - MPC8347EA - MPC8347E - MPC8347A - MPC8347 - e300 - e200 - MPC8280 - MPC8275 - MPC8272 - MPC8271 - MPC8270 - MPC8266_HiP4 - MPC8266_HiP3 - MPC8266 - MPC8265_HiP4 - MPC8265_HiP3 - MPC8265 - MPC8264_HiP4 - MPC8264_HiP3 - MPC8264 - MPC8260_HiP4 - MPC8260_HiP3 - MPC8260 - MPC8255_HiP4 - MPC8255_HiP3 - MPC8255 - MPC8250_HiP4 - MPC8250_HiP3 - MPC8250 - MPC8248 - MPC8247 - MPC8245 - MPC8241 - PowerQUICC-II - MPC82xx - MPC5200B - MPC5200 - MPC52xx - MPC8240 - 440EP - x2vp50 - x2vp7 - 405GPe - 405GP - 405CR - 405 - 403 - 750cl_v1.0 - 750cxe_v2.1 - 7457A_v1.2 - 755_v2.7 - MPC8347ET - MPC8545E_v20 - 750_v2.1 - 755_v2.2 - 745_v2.0 - 7455_v1.0 - MPC8547E_v21 - STB25 - POWER8_v2.0 - 401G2 - MPC8349A - 750e - MPC8545_v21 - MPC8548_v11 - 970fx_v2.0 - 750fx_v2.0 - POWER8E_v2.1 - Cobra - 603p - 7400_v2.7 - MPC8378E - e500v2_v10 - e500mc - 603e7v1 - 970mp_v1.0 - MPC8555E_v11 - 440-Xilinx-w-dfpu - 740e - 405CRc - 7447A_v1.1 - MPC8543_v11 - MPC8533E_v10 - MPC8540_v21 - e500v2_v21 - e300c1 - 7400_v2.2 - 970fx_v1.0 - 750gx_v1.2 - 750fx_v1.0 - MPC8641 - MPC8544E_v10 - 405D4 - 7457_v1.1 - 970fx_v3.0 - 604e_v2.2 - 755_v2.6 - 7410_v1.4 - Npe4GS3 - 745_v2.4 - 750_v2.0 - 7445_v3.2 - 750l_v3.2 - MPC8540_v10 - 750_v1.0 - MPC8343A - MPC8378 - G2HiP3 - 750cxe_v3.0 - e500_v10 - STB03 - MPC8567 - MPC8545_v20 - MPC8548_v10 - 755_v1.1 - 603e7v - Npe405H2 - 750_v3.0 - Npe405H - 7400_v2.6 - 405GPa - MPC8548_v21 - MPC8541E_v10 - 750l_v2.2 - MPC8555E_v10 - 7457A_v1.1 - e200z6 - MPC8379E - e500v2_v20 - MPC8347AP - 401B2 - MPC8349E - 755_v2.1 - MPC8543_v21 - MPC8547E_v20 - 745_v2.8 - 7455_v3.4 - 7448_v1.1 - 740_v2.2 - 7400_v1.1 - MPC8567E - 7441_v2.10 - 603e_v1.4 - G2leGP1 - 7451_v2.10 - MPC8343E - 750cx_v2.2 - Npe405L - 603e7 - 401A1 - MPC8377 - 7448_v2.1 - 7441_v2.3 - 7400_v2.1 - 405CRb - 604 - MPC8540_v20 - MPC8543_v10 - 7447A_v1.0 - 7445_v2.1 - e500_v20 - 750gx_v1.1 - MPC8543E_v11 - 750cxe_v2.4 - MPC8548_v20 - MPC8347AT - POWER8NVL_v1.0 - 7457A_v1.0 - 7457_v1.0 - 7450_v1.2 - MPC8572 - 755_v2.5 - 7410_v1.3 - 745_v2.3 - 750l_v2.1 - 405GPR - 755_v2.0 - MPC8541_v11 - 401C2 - e500v2_v30 - 7455_v3.3 - 405EZ - MPC8568E - 755_v1.0 - 603e_v1.3 - MPC8560_v10 - MPC8560_v21 - G2H4 - MPC8533_v11 - 740_v3.1 - e200z5 - MPC8349 - 7400_v2.0 - 405CRa - MPC8543E_v10 - MPC8543E_v21 - 750cxe_v2.3 - MPC8543_v20 - 745_v2.7 - 403GC - e5500 - 7448_v1.0 - MPC5200_v12 - 740_v2.1 - 745_v2.2 - 7400_v1.0 - 7410_v1.2 - x2vp4 - MPC8555_v11 - MPC8541_v10 - 405LP - 750fx_v2.3 - 405EP - 601_v2 - MPC8544_v11 - 401D2 - MPC8572E - 604e_v1.0 - 750cx_v2.1 - MPC5200B_v21 - 750l_v3.0 - e300c4 - 7448_v2.0 - 7450_v2.1 - G2leGP - 750cxe_v3.1b - 7400_v2.9 - G2GP - 603 - 405GPd - MPC8548E_v11 - 603e7t - IOP480 - 750gx_v1.0 - MPC8560_v20 - 405D2 - 750fl - 750l_v2.0 - x2vp20 - e600 - 7450_v1.1 - 755_v2.4 - 7445_v1.0 - G2LS - MPC8543E_v20 - 7447_v1.1 - 603e_v2.2 - 603e_v4 - 7455_v3.2 - 740_v2.0 - MPC8347P - 440EPb - MPC603 - 603e_v1.2 - 750fx_v2.2 - 740_v1.0 - MPC8544_v10 - 601_v1 - 745_v1.1 - POWER7+_v2.1 - 750cx_v2.0 - MPC8347EAP - 401E2 - MPC8641D - e300c3 - MPC8533_v10 - 7441_v2.1 - 740_v3.0 - POWER5+_v2.1 - 602 - MPC8548E_v10 - G2leLS - MPC8343 - 750cx_v1.0 - 750cxe_v2.2 - 604e_v2.4 - 755_v2.8 - MPC8548E_v21 - 745_v2.6 - G2le - 403GB - MPC8545E_v21 - POWER7_v2.3 - 750_v2.2 - 7450_v1.0 - MPC5200_v11 - 755_v2.3 - MPC8347EP - 7410_v1.1 - 750gl - 403GCX - 750p - 745_v2.1 - 7445_v3.4 - G2 - MPC8555_v10 - MPC8347T - 603e_v3 - 970_v2.2 - 440-Xilinx - 740p - MPC5200B_v20 - 440EPX - 603e_v1.1 - 7451_v2.3 - 7450_v2.0 - 7400_v2.8 - 7455_v2.1 - 405GPc - MPC8347EAT - 970mp_v1.1 - 603e7v2 - 604r - 7447A_v1.2 - MPC8533E_v11 - e500v2_v22 - 401F2 - MPC8343EA - 7457_v1.2 - 970fx_v3.1 - 7447_v1.0 - 745_v2.5 - MPC8548E_v20 - MPC8610 - 403GA - 750cxe_v2.4b - MPC5200_v10 - 7410_v1.0 - G2leGP3 - 603e_v4.1 - 7445_v3.3 - 440EPa - 970fx_v2.1 - MPC8377E - 750fx_v2.1 - 601_v0 - STB04 - 745_v1.0 - G2HiP4 - 750cl_v2.0 - 750cxr - MPC8349EA - 750cxe_v3.1 - 401 - MPC8379 - MPC8568 - e300c2 - 750_v3.1 - MPC8544E_v11 - 405GPb - MPC8541E_v11