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