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 <jdenemar@xxxxxxxxxx> --- Notes: Version 2: - adapted to changes in previous patches - fixed compile failure after "util: Make virStringArrayHasString() const-correct" src/conf/domain_capabilities.c | 27 ++ src/conf/domain_capabilities.h | 2 + src/libvirt_private.syms | 1 + src/qemu/qemu_capabilities.c | 10 +- tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml | 428 ---------------------- 5 files changed, 39 insertions(+), 429 deletions(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index e47aa86..828fa70 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 149a13f..57f0161 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 46e805a..b773951 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 87749c9..92b8b02 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 a0aa811..d969274 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml @@ -22,436 +22,8 @@ <mode name='host-passthrough' supported='yes'/> <mode name='host-model' supported='yes'/> <mode name='custom' supported='yes'> - <model>default</model> - <model>ppc</model> - <model>ppc32</model> - <model>ppc64</model> - <model>970mp</model> - <model>970fx</model> - <model>970</model> - <model>POWER8NVL</model> <model>POWER8</model> - <model>POWER8E</model> - <model>POWER7+</model> <model>POWER7</model> - <model>POWER5gs</model> - <model>POWER5+</model> - <model>Apollo7PM</model> - <model>7457A</model> - <model>7447A</model> - <model>Apollo7</model> - <model>7457</model> - <model>Apollo6</model> - <model>7455</model> - <model>7445</model> - <model>7451</model> - <model>7441</model> - <model>Vger</model> - <model>7450</model> - <model>7448</model> - <model>Nitro</model> - <model>7410</model> - <model>G4</model> - <model>Max</model> - <model>7400</model> - <model>Goldfinger</model> - <model>755</model> - <model>745</model> - <model>LoneStar</model> - <model>750l</model> - <model>750gx</model> - <model>750fx</model> - <model>750cxe</model> - <model>750cx</model> - <model>750cl</model> - <model>Conan/Doyle</model> - <model>G3</model> - <model>Typhoon</model> - <model>750</model> - <model>Arthur</model> - <model>740</model> - <model>Mach5</model> - <model>Sirocco</model> - <model>604e</model> - <model>Goldeneye</model> - <model>603r</model> - <model>Vaillant</model> - <model>Stretch</model> - <model>603e</model> - <model>Vanilla</model> - <model>601v</model> - <model>601</model> - <model>MPC8560</model> - <model>MPC8555E</model> - <model>MPC8555</model> - <model>MPC8548E</model> - <model>MPC8548</model> - <model>MPC8547E</model> - <model>MPC8545E</model> - <model>MPC8545</model> - <model>MPC8544E</model> - <model>MPC8544</model> - <model>MPC8543E</model> - <model>MPC8543</model> - <model>MPC8541E</model> - <model>MPC8541</model> - <model>MPC8540</model> - <model>MPC8533E</model> - <model>MPC8533</model> - <model>e500v2</model> - <model>e500v1</model> - <model>e500</model> - <model>MPC8347EA</model> - <model>MPC8347E</model> - <model>MPC8347A</model> - <model>MPC8347</model> - <model>e300</model> - <model>e200</model> - <model>MPC8280</model> - <model>MPC8275</model> - <model>MPC8272</model> - <model>MPC8271</model> - <model>MPC8270</model> - <model>MPC8266_HiP4</model> - <model>MPC8266_HiP3</model> - <model>MPC8266</model> - <model>MPC8265_HiP4</model> - <model>MPC8265_HiP3</model> - <model>MPC8265</model> - <model>MPC8264_HiP4</model> - <model>MPC8264_HiP3</model> - <model>MPC8264</model> - <model>MPC8260_HiP4</model> - <model>MPC8260_HiP3</model> - <model>MPC8260</model> - <model>MPC8255_HiP4</model> - <model>MPC8255_HiP3</model> - <model>MPC8255</model> - <model>MPC8250_HiP4</model> - <model>MPC8250_HiP3</model> - <model>MPC8250</model> - <model>MPC8248</model> - <model>MPC8247</model> - <model>MPC8245</model> - <model>MPC8241</model> - <model>PowerQUICC-II</model> - <model>MPC82xx</model> - <model>MPC5200B</model> - <model>MPC5200</model> - <model>MPC52xx</model> - <model>MPC8240</model> - <model>440EP</model> - <model>x2vp50</model> - <model>x2vp7</model> - <model>405GPe</model> - <model>405GP</model> - <model>405CR</model> - <model>405</model> - <model>403</model> - <model>750cl_v1.0</model> - <model>750cxe_v2.1</model> - <model>7457A_v1.2</model> - <model>755_v2.7</model> - <model>MPC8347ET</model> - <model>MPC8545E_v20</model> - <model>750_v2.1</model> - <model>755_v2.2</model> - <model>745_v2.0</model> - <model>7455_v1.0</model> - <model>MPC8547E_v21</model> - <model>STB25</model> - <model>POWER8_v2.0</model> - <model>401G2</model> - <model>MPC8349A</model> - <model>750e</model> - <model>MPC8545_v21</model> - <model>MPC8548_v11</model> - <model>970fx_v2.0</model> - <model>750fx_v2.0</model> - <model>POWER8E_v2.1</model> - <model>Cobra</model> - <model>603p</model> - <model>7400_v2.7</model> - <model>MPC8378E</model> - <model>e500v2_v10</model> - <model>e500mc</model> - <model>603e7v1</model> - <model>970mp_v1.0</model> - <model>MPC8555E_v11</model> - <model>440-Xilinx-w-dfpu</model> - <model>740e</model> - <model>405CRc</model> - <model>7447A_v1.1</model> - <model>MPC8543_v11</model> - <model>MPC8533E_v10</model> - <model>MPC8540_v21</model> - <model>e500v2_v21</model> - <model>e300c1</model> - <model>7400_v2.2</model> - <model>970fx_v1.0</model> - <model>750gx_v1.2</model> - <model>750fx_v1.0</model> - <model>MPC8641</model> - <model>MPC8544E_v10</model> - <model>405D4</model> - <model>7457_v1.1</model> - <model>970fx_v3.0</model> - <model>604e_v2.2</model> - <model>755_v2.6</model> - <model>7410_v1.4</model> - <model>Npe4GS3</model> - <model>745_v2.4</model> - <model>750_v2.0</model> - <model>7445_v3.2</model> - <model>750l_v3.2</model> - <model>MPC8540_v10</model> - <model>750_v1.0</model> - <model>MPC8343A</model> - <model>MPC8378</model> - <model>G2HiP3</model> - <model>750cxe_v3.0</model> - <model>e500_v10</model> - <model>STB03</model> - <model>MPC8567</model> - <model>MPC8545_v20</model> - <model>MPC8548_v10</model> - <model>755_v1.1</model> - <model>603e7v</model> - <model>Npe405H2</model> - <model>750_v3.0</model> - <model>Npe405H</model> - <model>7400_v2.6</model> - <model>405GPa</model> - <model>MPC8548_v21</model> - <model>MPC8541E_v10</model> - <model>750l_v2.2</model> - <model>MPC8555E_v10</model> - <model>7457A_v1.1</model> - <model>e200z6</model> - <model>MPC8379E</model> - <model>e500v2_v20</model> - <model>MPC8347AP</model> - <model>401B2</model> - <model>MPC8349E</model> - <model>755_v2.1</model> - <model>MPC8543_v21</model> - <model>MPC8547E_v20</model> - <model>745_v2.8</model> - <model>7455_v3.4</model> - <model>7448_v1.1</model> - <model>740_v2.2</model> - <model>7400_v1.1</model> - <model>MPC8567E</model> - <model>7441_v2.10</model> - <model>603e_v1.4</model> - <model>G2leGP1</model> - <model>7451_v2.10</model> - <model>MPC8343E</model> - <model>750cx_v2.2</model> - <model>Npe405L</model> - <model>603e7</model> - <model>401A1</model> - <model>MPC8377</model> - <model>7448_v2.1</model> - <model>7441_v2.3</model> - <model>7400_v2.1</model> - <model>405CRb</model> - <model>604</model> - <model>MPC8540_v20</model> - <model>MPC8543_v10</model> - <model>7447A_v1.0</model> - <model>7445_v2.1</model> - <model>e500_v20</model> - <model>750gx_v1.1</model> - <model>MPC8543E_v11</model> - <model>750cxe_v2.4</model> - <model>MPC8548_v20</model> - <model>MPC8347AT</model> - <model>POWER8NVL_v1.0</model> - <model>7457A_v1.0</model> - <model>7457_v1.0</model> - <model>7450_v1.2</model> - <model>MPC8572</model> - <model>755_v2.5</model> - <model>7410_v1.3</model> - <model>745_v2.3</model> - <model>750l_v2.1</model> - <model>405GPR</model> - <model>755_v2.0</model> - <model>MPC8541_v11</model> - <model>401C2</model> - <model>e500v2_v30</model> - <model>7455_v3.3</model> - <model>405EZ</model> - <model>MPC8568E</model> - <model>755_v1.0</model> - <model>603e_v1.3</model> - <model>MPC8560_v10</model> - <model>MPC8560_v21</model> - <model>G2H4</model> - <model>MPC8533_v11</model> - <model>740_v3.1</model> - <model>e200z5</model> - <model>MPC8349</model> - <model>7400_v2.0</model> - <model>405CRa</model> - <model>MPC8543E_v10</model> - <model>MPC8543E_v21</model> - <model>750cxe_v2.3</model> - <model>MPC8543_v20</model> - <model>745_v2.7</model> - <model>403GC</model> - <model>e5500</model> - <model>7448_v1.0</model> - <model>MPC5200_v12</model> - <model>740_v2.1</model> - <model>745_v2.2</model> - <model>7400_v1.0</model> - <model>7410_v1.2</model> - <model>x2vp4</model> - <model>MPC8555_v11</model> - <model>MPC8541_v10</model> - <model>405LP</model> - <model>750fx_v2.3</model> - <model>405EP</model> - <model>601_v2</model> - <model>MPC8544_v11</model> - <model>401D2</model> - <model>MPC8572E</model> - <model>604e_v1.0</model> - <model>750cx_v2.1</model> - <model>MPC5200B_v21</model> - <model>750l_v3.0</model> - <model>e300c4</model> - <model>7448_v2.0</model> - <model>7450_v2.1</model> - <model>G2leGP</model> - <model>750cxe_v3.1b</model> - <model>7400_v2.9</model> - <model>G2GP</model> - <model>603</model> - <model>405GPd</model> - <model>MPC8548E_v11</model> - <model>603e7t</model> - <model>IOP480</model> - <model>750gx_v1.0</model> - <model>MPC8560_v20</model> - <model>405D2</model> - <model>750fl</model> - <model>750l_v2.0</model> - <model>x2vp20</model> - <model>e600</model> - <model>7450_v1.1</model> - <model>755_v2.4</model> - <model>7445_v1.0</model> - <model>G2LS</model> - <model>MPC8543E_v20</model> - <model>7447_v1.1</model> - <model>603e_v2.2</model> - <model>603e_v4</model> - <model>7455_v3.2</model> - <model>740_v2.0</model> - <model>MPC8347P</model> - <model>440EPb</model> - <model>MPC603</model> - <model>603e_v1.2</model> - <model>750fx_v2.2</model> - <model>740_v1.0</model> - <model>MPC8544_v10</model> - <model>601_v1</model> - <model>745_v1.1</model> - <model>POWER7+_v2.1</model> - <model>750cx_v2.0</model> - <model>MPC8347EAP</model> - <model>401E2</model> - <model>MPC8641D</model> - <model>e300c3</model> - <model>MPC8533_v10</model> - <model>7441_v2.1</model> - <model>740_v3.0</model> - <model>POWER5+_v2.1</model> - <model>602</model> - <model>MPC8548E_v10</model> - <model>G2leLS</model> - <model>MPC8343</model> - <model>750cx_v1.0</model> - <model>750cxe_v2.2</model> - <model>604e_v2.4</model> - <model>755_v2.8</model> - <model>MPC8548E_v21</model> - <model>745_v2.6</model> - <model>G2le</model> - <model>403GB</model> - <model>MPC8545E_v21</model> - <model>POWER7_v2.3</model> - <model>750_v2.2</model> - <model>7450_v1.0</model> - <model>MPC5200_v11</model> - <model>755_v2.3</model> - <model>MPC8347EP</model> - <model>7410_v1.1</model> - <model>750gl</model> - <model>403GCX</model> - <model>750p</model> - <model>745_v2.1</model> - <model>7445_v3.4</model> - <model>G2</model> - <model>MPC8555_v10</model> - <model>MPC8347T</model> - <model>603e_v3</model> - <model>970_v2.2</model> - <model>440-Xilinx</model> - <model>740p</model> - <model>MPC5200B_v20</model> - <model>440EPX</model> - <model>603e_v1.1</model> - <model>7451_v2.3</model> - <model>7450_v2.0</model> - <model>7400_v2.8</model> - <model>7455_v2.1</model> - <model>405GPc</model> - <model>MPC8347EAT</model> - <model>970mp_v1.1</model> - <model>603e7v2</model> - <model>604r</model> - <model>7447A_v1.2</model> - <model>MPC8533E_v11</model> - <model>e500v2_v22</model> - <model>401F2</model> - <model>MPC8343EA</model> - <model>7457_v1.2</model> - <model>970fx_v3.1</model> - <model>7447_v1.0</model> - <model>745_v2.5</model> - <model>MPC8548E_v20</model> - <model>MPC8610</model> - <model>403GA</model> - <model>750cxe_v2.4b</model> - <model>MPC5200_v10</model> - <model>7410_v1.0</model> - <model>G2leGP3</model> - <model>603e_v4.1</model> - <model>7445_v3.3</model> - <model>440EPa</model> - <model>970fx_v2.1</model> - <model>MPC8377E</model> - <model>750fx_v2.1</model> - <model>601_v0</model> - <model>STB04</model> - <model>745_v1.0</model> - <model>G2HiP4</model> - <model>750cl_v2.0</model> - <model>750cxr</model> - <model>MPC8349EA</model> - <model>750cxe_v3.1</model> - <model>401</model> - <model>MPC8379</model> - <model>MPC8568</model> - <model>e300c2</model> - <model>750_v3.1</model> - <model>MPC8544E_v11</model> - <model>405GPb</model> - <model>MPC8541E_v11</model> </mode> </cpu> <devices> -- 2.10.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list