On 08/12/2016 09:33 AM, Jiri Denemark wrote:
In case a hypervisor is able to tell us a list of supported CPU
models
and whether each CPU models can be used on the current host, we can
propagate this to domain capabilities. This is a better alternative
to calling virConnectCompareCPU for each supported CPU model.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
docs/formatdomaincaps.html.in | 10 ++--
docs/schemas/domaincaps.rng | 7 +++
src/conf/domain_capabilities.c | 50 +++++++++++++-----
src/conf/domain_capabilities.h | 16 +++++-
src/libvirt_private.syms | 2 +
src/qemu/qemu_capabilities.c | 15 ++++--
tests/domaincapsschemadata/full.xml | 6 +--
tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml | 48 ++++++++---------
.../qemu_2.6.0-gicv2-virt.aarch64.xml | 60 +++++++++++-----------
.../qemu_2.6.0-gicv3-virt.aarch64.xml | 60 +++++++++++-----------
tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml | 60 +++++++++++-----------
tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml | 4 +-
tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml | 56 ++++++++++----------
tests/domaincapstest.c | 9 ++--
14 files changed, 229 insertions(+), 174 deletions(-)
So 11-19 with at least some adjustments have an ACK from me. Since
you're fixing issues the point I noted in patch 11 is probably something
that patches 10-12 resolve, so no big deal. The coverity issue in 15
would be nice to resolve, but since it already exists afaict it's doable
afterwards. My note from patch 19 probably needs to be handled as I
imagine it'll be an "issue" on "some" platform with
"some" compiler.
I'll hold off on an ACK for this one. I'm going to stop here for today
and pick it up again tomorrow. I do have some notations below. I have
some questions, but perhaps they'll be answered in future changes.
John
diff --git a/docs/formatdomaincaps.html.in
b/docs/formatdomaincaps.html.in
index 15a13c1..49ccbfc 100644
--- a/docs/formatdomaincaps.html.in
+++ b/docs/formatdomaincaps.html.in
@@ -156,9 +156,9 @@
<mode name='host-passthrough' supported='yes'/>
<mode name='host-model' supported='yes'/>
<mode name='custom' supported='yes'>
- <model>Broadwell</model>
- <model>Broadwell-noTSX</model>
- <model>Haswell</model>
+ <model usable='no'>Broadwell</model>
+ <model usable='yes'>Broadwell-noTSX</model>
+ <model usable='no'>Haswell</model>
...
</mode>
</cpu>
@@ -183,6 +183,10 @@
<dd>
The <code>mode</code> element contains a list of supported CPU
models, each described by a dedicated <code>model</code> element.
+ The <code>usable</code> attribute specifies whether the model can
+ be used on the host. A special value <code>unknown</code> says
s/says/indicates/
+ libvirt does not have enough information to provide the
usability
+ data.
</dd>
</dl>
diff --git a/docs/schemas/domaincaps.rng b/docs/schemas/domaincaps.rng
index 9f3d225..5a605a7 100644
--- a/docs/schemas/domaincaps.rng
+++ b/docs/schemas/domaincaps.rng
@@ -105,6 +105,13 @@
<ref name='supported'/>
<zeroOrMore>
<element name='model'>
+ <attribute name='usable'>
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ <value>unknown</value>
+ </choice>
+ </attribute>
Why is this not optional? Hmm... Seems to be output only - still an odd
construct though. Not sure I have a better idea (yet).
<text/>
</element>
</zeroOrMore>
diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
index 6f9f7e7..c9e3a28 100644
--- a/src/conf/domain_capabilities.c
+++ b/src/conf/domain_capabilities.c
@@ -29,6 +29,9 @@
#define VIR_FROM_THIS VIR_FROM_CAPABILITIES
+VIR_ENUM_IMPL(virDomainCapsCPUUsable, VIR_DOMCAPS_CPU_USABLE_LAST,
+ "unknown", "yes", "no");
+
static virClassPtr virDomainCapsClass;
static virClassPtr virDomainCapsCPUModelsClass;
@@ -157,7 +160,9 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old)
return NULL;
for (i = 0; i < old->count; i++) {
- if (virDomainCapsCPUModelsAdd(cpuModels, old->models[i].name, -1) < 0)
+ if (virDomainCapsCPUModelsAdd(cpuModels,
+ old->models[i].name, -1,
+ old->models[i].usable) < 0)
goto error;
}
@@ -184,7 +189,8 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old,
continue;
if (virDomainCapsCPUModelsAdd(cpuModels,
- old->models[i].name, -1) < 0)
+ old->models[i].name, -1,
+ old->models[i].usable) < 0)
goto error;
}
@@ -198,13 +204,16 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old,
int
virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
- char **name)
+ char **name,
+ virDomainCapsCPUUsable usable)
{
if (VIR_RESIZE_N(cpuModels->models, cpuModels->alloc,
cpuModels->count, 1) < 0)
return -1;
- cpuModels->models[cpuModels->count++].name = *name;
+ cpuModels->models[cpuModels->count].usable = usable;
+ cpuModels->models[cpuModels->count].name = *name;
+ cpuModels->count++;
*name = NULL;
return 0;
}
@@ -213,14 +222,15 @@ virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr
cpuModels,
int
virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
const char *name,
- ssize_t nameLen)
+ ssize_t nameLen,
+ virDomainCapsCPUUsable usable)
{
char *copy = NULL;
if (VIR_STRNDUP(copy, name, nameLen) < 0)
goto error;
- if (virDomainCapsCPUModelsAddSteal(cpuModels, ©) < 0)
+ if (virDomainCapsCPUModelsAddSteal(cpuModels, ©, usable) < 0)
goto error;
return 0;
@@ -366,18 +376,21 @@ virDomainCapsOSFormat(virBufferPtr buf,
static void
virDomainCapsCPUCustomFormat(virBufferPtr buf,
- virDomainCapsCPUModelsPtr custom)
+ virDomainCapsCPUModelsPtr custom,
+ virDomainCapsCPUUsable usable)
{
size_t i;
-
- virBufferAdjustIndent(buf, 2);
+ const char *usableStr = virDomainCapsCPUUsableTypeToString(usable);
for (i = 0; i < custom->count; i++) {
- virBufferAsprintf(buf, "<model>%s</model>\n",
- custom->models[i].name);
- }
+ virDomainCapsCPUModelPtr model = custom->models + i;
- virBufferAdjustIndent(buf, -2);
+ if (model->usable != usable)
+ continue;
+
+ virBufferAsprintf(buf, "<model
usable='%s'>%s</model>\n",
+ usableStr, model->name);
+ }
}
static void
@@ -399,7 +412,16 @@ virDomainCapsCPUFormat(virBufferPtr buf,
virCPUModeTypeToString(VIR_CPU_MODE_CUSTOM));
if (cpu->custom && cpu->custom->count) {
virBufferAddLit(buf, "supported='yes'>\n");
- virDomainCapsCPUCustomFormat(buf, cpu->custom);
+ virBufferAdjustIndent(buf, 2);
+
+ virDomainCapsCPUCustomFormat(buf, cpu->custom,
+ VIR_DOMCAPS_CPU_USABLE_YES);
+ virDomainCapsCPUCustomFormat(buf, cpu->custom,
+ VIR_DOMCAPS_CPU_USABLE_NO);
+ virDomainCapsCPUCustomFormat(buf, cpu->custom,
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN);
So we're listing all the usable ones first, followed by the unusable,
followed by the unknown. Hence the full.xml output change.
In any case, that seem like something that would be documentable - the
sorting algorithm... It wasn't listed in the cover letter either (the
usable attribute isn't there).
I guess it just seems inefficient to run through the custom list 3 times
just so we can print out in a specific/sorted order. Not sure what
printing "unknown" really buys us - seems to be ignorable to me at least
at this point in the review process.
+
+ virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</mode>\n");
} else {
virBufferAddLit(buf, "supported='no'/>\n");
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
index 29b18bb..7498f89 100644
--- a/src/conf/domain_capabilities.h
+++ b/src/conf/domain_capabilities.h
@@ -102,10 +102,20 @@ struct _virDomainCapsFeatureGIC {
virDomainCapsEnum version; /* Info about virGICVersion */
};
+typedef enum {
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN,
+ VIR_DOMCAPS_CPU_USABLE_YES,
+ VIR_DOMCAPS_CPU_USABLE_NO,
+
+ VIR_DOMCAPS_CPU_USABLE_LAST
+} virDomainCapsCPUUsable;
+VIR_ENUM_DECL(virDomainCapsCPUUsable);
+
typedef struct _virDomainCapsCPUModel virDomainCapsCPUModel;
typedef virDomainCapsCPUModel *virDomainCapsCPUModelPtr;
struct _virDomainCapsCPUModel {
char *name;
+ virDomainCapsCPUUsable usable;
};
typedef struct _virDomainCapsCPUModels virDomainCapsCPUModels;
@@ -159,10 +169,12 @@ virDomainCapsCPUModelsPtr
virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr o
virDomainCapsCPUModelsPtr virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old,
char **models);
int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
- char **name);
+ char **name,
+ virDomainCapsCPUUsable usable);
int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
const char *name,
- ssize_t nameLen);
+ ssize_t nameLen,
+ virDomainCapsCPUUsable usable);
# define VIR_DOMAIN_CAPS_ENUM_SET(capsEnum, ...) \
do { \
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 80c112a..53d4e7f 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -157,6 +157,8 @@ virDomainCapsCPUModelsAddSteal;
virDomainCapsCPUModelsCopy;
virDomainCapsCPUModelsFilter;
virDomainCapsCPUModelsNew;
+virDomainCapsCPUUsableTypeFromString;
+virDomainCapsCPUUsableTypeToString;
virDomainCapsEnumClear;
virDomainCapsEnumSet;
virDomainCapsFormat;
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 123aae5..232ae1f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -665,7 +665,8 @@ virQEMUCapsParseX86Models(const char *output,
len -= 2;
}
- if (virDomainCapsCPUModelsAdd(cpus, p, len) < 0)
+ if (virDomainCapsCPUModelsAdd(cpus, p, len,
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
goto error;
} while ((p = next));
@@ -713,7 +714,8 @@ virQEMUCapsParsePPCModels(const char *output,
if (*p == '\n')
continue;
- if (virDomainCapsCPUModelsAdd(cpus, p, t - p - 1) < 0)
+ if (virDomainCapsCPUModelsAdd(cpus, p, t - p - 1,
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
goto error;
} while ((p = next));
@@ -2244,7 +2246,8 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
return -1;
for (i = 0; i < count; i++) {
- if (virDomainCapsCPUModelsAdd(qemuCaps->cpuDefinitions, name[i], -1) < 0)
+ if (virDomainCapsCPUModelsAdd(qemuCaps->cpuDefinitions, name[i], -1,
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
return -1;
}
@@ -2593,7 +2596,8 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
for (i = 0; i < ncpus; i++) {
if (virDomainCapsCPUModelsAddSteal(qemuCaps->cpuDefinitions,
- &cpus[i]->name) < 0)
+ &cpus[i]->name,
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
goto cleanup;
}
@@ -2960,7 +2964,8 @@ virQEMUCapsLoadCache(virQEMUCapsPtr qemuCaps, const char
*filename,
}
if (virDomainCapsCPUModelsAddSteal(qemuCaps->cpuDefinitions,
- &str) < 0)
+ &str,
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)]
So we can go from 'yes' or 'no' to 'unknown' (for at least a
short
period of time). I guess I would have expected to "read" and use the
cached data like other places... Leads me to wonder why it's being
saved. Can it be possible to go from 'yes' to 'no' if we go through
unknown? Guess it's just not clear what the dynamics of the conversion
are and when is (should be) expected.
goto cleanup;
}
}
diff --git a/tests/domaincapsschemadata/full.xml b/tests/domaincapsschemadata/full.xml
index 80fd1f0..1d58e57 100644
--- a/tests/domaincapsschemadata/full.xml
+++ b/tests/domaincapsschemadata/full.xml
@@ -23,9 +23,9 @@
<mode name='host-passthrough' supported='yes'/>
<mode name='host-model' supported='yes'/>
<mode name='custom' supported='yes'>
- <model>Model1</model>
- <model>Model2</model>
- <model>Model3</model>
+ <model usable='yes'>Model3</model>
+ <model usable='no'>Model2</model>
+ <model usable='unknown'>Model1</model>
Sort by yes, no, unknown...
</mode>
</cpu>
<devices>
diff --git a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
index 4ee2f95..2b17dd0 100644
--- a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
@@ -22,30 +22,30 @@
<mode name='host-passthrough' supported='yes'/>
<mode name='host-model' supported='yes'/>
<mode name='custom' supported='yes'>
- <model>Opteron_G5</model>
- <model>Opteron_G4</model>
- <model>Opteron_G3</model>
- <model>Opteron_G2</model>
- <model>Opteron_G1</model>
- <model>Haswell</model>
- <model>SandyBridge</model>
- <model>Westmere</model>
- <model>Nehalem</model>
- <model>Penryn</model>
- <model>Conroe</model>
- <model>n270</model>
- <model>athlon</model>
- <model>pentium3</model>
- <model>pentium2</model>
- <model>pentium</model>
- <model>486</model>
- <model>coreduo</model>
- <model>kvm32</model>
- <model>qemu32</model>
- <model>kvm64</model>
- <model>core2duo</model>
- <model>phenom</model>
- <model>qemu64</model>
+ <model usable='unknown'>Opteron_G5</model>
+ <model usable='unknown'>Opteron_G4</model>
+ <model usable='unknown'>Opteron_G3</model>
+ <model usable='unknown'>Opteron_G2</model>
+ <model usable='unknown'>Opteron_G1</model>
+ <model usable='unknown'>Haswell</model>
+ <model usable='unknown'>SandyBridge</model>
+ <model usable='unknown'>Westmere</model>
+ <model usable='unknown'>Nehalem</model>
+ <model usable='unknown'>Penryn</model>
+ <model usable='unknown'>Conroe</model>
+ <model usable='unknown'>n270</model>
+ <model usable='unknown'>athlon</model>
+ <model usable='unknown'>pentium3</model>
+ <model usable='unknown'>pentium2</model>
+ <model usable='unknown'>pentium</model>
+ <model usable='unknown'>486</model>
+ <model usable='unknown'>coreduo</model>
+ <model usable='unknown'>kvm32</model>
+ <model usable='unknown'>qemu32</model>
+ <model usable='unknown'>kvm64</model>
+ <model usable='unknown'>core2duo</model>
+ <model usable='unknown'>phenom</model>
+ <model usable='unknown'>qemu64</model>
</mode>
</cpu>
<devices>
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 9e96f47..8a54f9e 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml
@@ -22,36 +22,36 @@
<mode name='host-passthrough' supported='yes'/>
<mode name='host-model' supported='yes'/>
<mode name='custom' supported='yes'>
- <model>pxa262</model>
- <model>pxa270-a0</model>
- <model>arm1136</model>
- <model>cortex-a15</model>
- <model>pxa260</model>
- <model>arm1136-r2</model>
- <model>pxa261</model>
- <model>pxa255</model>
- <model>arm926</model>
- <model>arm11mpcore</model>
- <model>pxa250</model>
- <model>ti925t</model>
- <model>cortex-a57</model>
- <model>sa1110</model>
- <model>arm1176</model>
- <model>cortex-a53</model>
- <model>sa1100</model>
- <model>pxa270-c5</model>
- <model>cortex-a9</model>
- <model>cortex-a8</model>
- <model>pxa270-c0</model>
- <model>arm1026</model>
- <model>pxa270-b1</model>
- <model>cortex-m3</model>
- <model>cortex-m4</model>
- <model>pxa270-b0</model>
- <model>arm946</model>
- <model>cortex-r5</model>
- <model>pxa270-a1</model>
- <model>pxa270</model>
+ <model usable='unknown'>pxa262</model>
+ <model usable='unknown'>pxa270-a0</model>
+ <model usable='unknown'>arm1136</model>
+ <model usable='unknown'>cortex-a15</model>
+ <model usable='unknown'>pxa260</model>
+ <model usable='unknown'>arm1136-r2</model>
+ <model usable='unknown'>pxa261</model>
+ <model usable='unknown'>pxa255</model>
+ <model usable='unknown'>arm926</model>
+ <model usable='unknown'>arm11mpcore</model>
+ <model usable='unknown'>pxa250</model>
+ <model usable='unknown'>ti925t</model>
+ <model usable='unknown'>cortex-a57</model>
+ <model usable='unknown'>sa1110</model>
+ <model usable='unknown'>arm1176</model>
+ <model usable='unknown'>cortex-a53</model>
+ <model usable='unknown'>sa1100</model>
+ <model usable='unknown'>pxa270-c5</model>
+ <model usable='unknown'>cortex-a9</model>
+ <model usable='unknown'>cortex-a8</model>
+ <model usable='unknown'>pxa270-c0</model>
+ <model usable='unknown'>arm1026</model>
+ <model usable='unknown'>pxa270-b1</model>
+ <model usable='unknown'>cortex-m3</model>
+ <model usable='unknown'>cortex-m4</model>
+ <model usable='unknown'>pxa270-b0</model>
+ <model usable='unknown'>arm946</model>
+ <model usable='unknown'>cortex-r5</model>
+ <model usable='unknown'>pxa270-a1</model>
+ <model usable='unknown'>pxa270</model>
</mode>
</cpu>
<devices>
diff --git a/tests/domaincapsschemadata/qemu_2.6.0-gicv3-virt.aarch64.xml
b/tests/domaincapsschemadata/qemu_2.6.0-gicv3-virt.aarch64.xml
index c081b35..8d8087f 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0-gicv3-virt.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0-gicv3-virt.aarch64.xml
@@ -22,36 +22,36 @@
<mode name='host-passthrough' supported='yes'/>
<mode name='host-model' supported='yes'/>
<mode name='custom' supported='yes'>
- <model>pxa262</model>
- <model>pxa270-a0</model>
- <model>arm1136</model>
- <model>cortex-a15</model>
- <model>pxa260</model>
- <model>arm1136-r2</model>
- <model>pxa261</model>
- <model>pxa255</model>
- <model>arm926</model>
- <model>arm11mpcore</model>
- <model>pxa250</model>
- <model>ti925t</model>
- <model>cortex-a57</model>
- <model>sa1110</model>
- <model>arm1176</model>
- <model>cortex-a53</model>
- <model>sa1100</model>
- <model>pxa270-c5</model>
- <model>cortex-a9</model>
- <model>cortex-a8</model>
- <model>pxa270-c0</model>
- <model>arm1026</model>
- <model>pxa270-b1</model>
- <model>cortex-m3</model>
- <model>cortex-m4</model>
- <model>pxa270-b0</model>
- <model>arm946</model>
- <model>cortex-r5</model>
- <model>pxa270-a1</model>
- <model>pxa270</model>
+ <model usable='unknown'>pxa262</model>
+ <model usable='unknown'>pxa270-a0</model>
+ <model usable='unknown'>arm1136</model>
+ <model usable='unknown'>cortex-a15</model>
+ <model usable='unknown'>pxa260</model>
+ <model usable='unknown'>arm1136-r2</model>
+ <model usable='unknown'>pxa261</model>
+ <model usable='unknown'>pxa255</model>
+ <model usable='unknown'>arm926</model>
+ <model usable='unknown'>arm11mpcore</model>
+ <model usable='unknown'>pxa250</model>
+ <model usable='unknown'>ti925t</model>
+ <model usable='unknown'>cortex-a57</model>
+ <model usable='unknown'>sa1110</model>
+ <model usable='unknown'>arm1176</model>
+ <model usable='unknown'>cortex-a53</model>
+ <model usable='unknown'>sa1100</model>
+ <model usable='unknown'>pxa270-c5</model>
+ <model usable='unknown'>cortex-a9</model>
+ <model usable='unknown'>cortex-a8</model>
+ <model usable='unknown'>pxa270-c0</model>
+ <model usable='unknown'>arm1026</model>
+ <model usable='unknown'>pxa270-b1</model>
+ <model usable='unknown'>cortex-m3</model>
+ <model usable='unknown'>cortex-m4</model>
+ <model usable='unknown'>pxa270-b0</model>
+ <model usable='unknown'>arm946</model>
+ <model usable='unknown'>cortex-r5</model>
+ <model usable='unknown'>pxa270-a1</model>
+ <model usable='unknown'>pxa270</model>
</mode>
</cpu>
<devices>
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
index 811d2b7..83c03db 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
@@ -22,36 +22,36 @@
<mode name='host-passthrough' supported='yes'/>
<mode name='host-model' supported='yes'/>
<mode name='custom' supported='yes'>
- <model>pxa262</model>
- <model>pxa270-a0</model>
- <model>arm1136</model>
- <model>cortex-a15</model>
- <model>pxa260</model>
- <model>arm1136-r2</model>
- <model>pxa261</model>
- <model>pxa255</model>
- <model>arm926</model>
- <model>arm11mpcore</model>
- <model>pxa250</model>
- <model>ti925t</model>
- <model>cortex-a57</model>
- <model>sa1110</model>
- <model>arm1176</model>
- <model>cortex-a53</model>
- <model>sa1100</model>
- <model>pxa270-c5</model>
- <model>cortex-a9</model>
- <model>cortex-a8</model>
- <model>pxa270-c0</model>
- <model>arm1026</model>
- <model>pxa270-b1</model>
- <model>cortex-m3</model>
- <model>cortex-m4</model>
- <model>pxa270-b0</model>
- <model>arm946</model>
- <model>cortex-r5</model>
- <model>pxa270-a1</model>
- <model>pxa270</model>
+ <model usable='unknown'>pxa262</model>
+ <model usable='unknown'>pxa270-a0</model>
+ <model usable='unknown'>arm1136</model>
+ <model usable='unknown'>cortex-a15</model>
+ <model usable='unknown'>pxa260</model>
+ <model usable='unknown'>arm1136-r2</model>
+ <model usable='unknown'>pxa261</model>
+ <model usable='unknown'>pxa255</model>
+ <model usable='unknown'>arm926</model>
+ <model usable='unknown'>arm11mpcore</model>
+ <model usable='unknown'>pxa250</model>
+ <model usable='unknown'>ti925t</model>
+ <model usable='unknown'>cortex-a57</model>
+ <model usable='unknown'>sa1110</model>
+ <model usable='unknown'>arm1176</model>
+ <model usable='unknown'>cortex-a53</model>
+ <model usable='unknown'>sa1100</model>
+ <model usable='unknown'>pxa270-c5</model>
+ <model usable='unknown'>cortex-a9</model>
+ <model usable='unknown'>cortex-a8</model>
+ <model usable='unknown'>pxa270-c0</model>
+ <model usable='unknown'>arm1026</model>
+ <model usable='unknown'>pxa270-b1</model>
+ <model usable='unknown'>cortex-m3</model>
+ <model usable='unknown'>cortex-m4</model>
+ <model usable='unknown'>pxa270-b0</model>
+ <model usable='unknown'>arm946</model>
+ <model usable='unknown'>cortex-r5</model>
+ <model usable='unknown'>pxa270-a1</model>
+ <model usable='unknown'>pxa270</model>
</mode>
</cpu>
<devices>
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml
b/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml
index d969274..14a087b 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml
@@ -22,8 +22,8 @@
<mode name='host-passthrough' supported='yes'/>
<mode name='host-model' supported='yes'/>
<mode name='custom' supported='yes'>
- <model>POWER8</model>
- <model>POWER7</model>
+ <model usable='unknown'>POWER8</model>
+ <model usable='unknown'>POWER7</model>
</mode>
</cpu>
<devices>
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
b/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
index 80101a4..4294c64 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
@@ -22,34 +22,34 @@
<mode name='host-passthrough' supported='yes'/>
<mode name='host-model' supported='yes'/>
<mode name='custom' supported='yes'>
- <model>Opteron_G5</model>
- <model>Opteron_G4</model>
- <model>Opteron_G3</model>
- <model>Opteron_G2</model>
- <model>Opteron_G1</model>
- <model>Broadwell</model>
- <model>Broadwell-noTSX</model>
- <model>Haswell</model>
- <model>Haswell-noTSX</model>
- <model>IvyBridge</model>
- <model>SandyBridge</model>
- <model>Westmere</model>
- <model>Nehalem</model>
- <model>Penryn</model>
- <model>Conroe</model>
- <model>n270</model>
- <model>athlon</model>
- <model>pentium3</model>
- <model>pentium2</model>
- <model>pentium</model>
- <model>486</model>
- <model>coreduo</model>
- <model>kvm32</model>
- <model>qemu32</model>
- <model>kvm64</model>
- <model>core2duo</model>
- <model>phenom</model>
- <model>qemu64</model>
+ <model usable='unknown'>Opteron_G5</model>
+ <model usable='unknown'>Opteron_G4</model>
+ <model usable='unknown'>Opteron_G3</model>
+ <model usable='unknown'>Opteron_G2</model>
+ <model usable='unknown'>Opteron_G1</model>
+ <model usable='unknown'>Broadwell</model>
+ <model usable='unknown'>Broadwell-noTSX</model>
+ <model usable='unknown'>Haswell</model>
+ <model usable='unknown'>Haswell-noTSX</model>
+ <model usable='unknown'>IvyBridge</model>
+ <model usable='unknown'>SandyBridge</model>
+ <model usable='unknown'>Westmere</model>
+ <model usable='unknown'>Nehalem</model>
+ <model usable='unknown'>Penryn</model>
+ <model usable='unknown'>Conroe</model>
+ <model usable='unknown'>n270</model>
+ <model usable='unknown'>athlon</model>
+ <model usable='unknown'>pentium3</model>
+ <model usable='unknown'>pentium2</model>
+ <model usable='unknown'>pentium</model>
+ <model usable='unknown'>486</model>
+ <model usable='unknown'>coreduo</model>
+ <model usable='unknown'>kvm32</model>
+ <model usable='unknown'>qemu32</model>
+ <model usable='unknown'>kvm64</model>
+ <model usable='unknown'>core2duo</model>
+ <model usable='unknown'>phenom</model>
+ <model usable='unknown'>qemu64</model>
</mode>
</cpu>
<devices>
diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c
index 10b7452..511066d 100644
--- a/tests/domaincapstest.c
+++ b/tests/domaincapstest.c
@@ -81,9 +81,12 @@ fillAllCaps(virDomainCapsPtr domCaps)
cpu->hostPassthrough = true;
cpu->hostModel = true;
if (!(cpu->custom = virDomainCapsCPUModelsNew(3)) ||
- virDomainCapsCPUModelsAdd(cpu->custom, "Model1", -1) < 0 ||
- virDomainCapsCPUModelsAdd(cpu->custom, "Model2", -1) < 0 ||
- virDomainCapsCPUModelsAdd(cpu->custom, "Model3", -1) < 0)
+ virDomainCapsCPUModelsAdd(cpu->custom, "Model1", -1,
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
+ virDomainCapsCPUModelsAdd(cpu->custom, "Model2", -1,
+ VIR_DOMCAPS_CPU_USABLE_NO) < 0 ||
+ virDomainCapsCPUModelsAdd(cpu->custom, "Model3", -1,
+ VIR_DOMCAPS_CPU_USABLE_YES) < 0)
return -1;
disk->supported = true;