The current schema is more permissive than the XML parsing code in
libvirt. Precisely, 'match' attribute is optional in schema while in
reality its use is bound to <model> element:
- <cpu> element without 'match' attribute is allowed only if
<topology>
element is the only child element of <cpu>
- <cpu> element with 'match' attribute requires <model> element to be
present; <topology> and <feature> elements are optional
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
docs/schemas/domain.rng | 109 +++++++++++++++++++++++++++--------------------
1 files changed, 63 insertions(+), 46 deletions(-)
diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
index bb6d00d..c913a50 100644
--- a/docs/schemas/domain.rng
+++ b/docs/schemas/domain.rng
@@ -1313,52 +1313,69 @@
-->
<define name="cpu">
<element name="cpu">
- <optional>
- <attribute name="match">
- <choice>
- <value>minimum</value>
- <value>exact</value>
- <value>strict</value>
- </choice>
- </attribute>
- </optional>
- <interleave>
- <optional>
- <element name="model">
- <text/>
- </element>
- </optional>
- <optional>
- <element name="topology">
- <attribute name="sockets">
- <ref name="positiveInteger"/>
- </attribute>
- <attribute name="cores">
- <ref name="positiveInteger"/>
- </attribute>
- <attribute name="threads">
- <ref name="positiveInteger"/>
- </attribute>
- </element>
- </optional>
- <zeroOrMore>
- <element name="feature">
- <attribute name="policy">
- <choice>
- <value>force</value>
- <value>require</value>
- <value>optional</value>
- <value>disable</value>
- <value>forbid</value>
- </choice>
- </attribute>
- <attribute name="name">
- <ref name="featureName"/>
- </attribute>
- <empty/>
- </element>
- </zeroOrMore>
- </interleave>
+ <choice>
+ <ref name="cpuTopology"/>
+ <group>
+ <ref name="cpuMatch"/>
+ <interleave>
+ <ref name="cpuModel"/>
+ <optional>
+ <ref name="cpuTopology"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="cpuFeature"/>
+ </zeroOrMore>
+ </interleave>
+ </group>
+ </choice>
+ </element>
+ </define>
+
+ <define name="cpuMatch">
+ <attribute name="match">
+ <choice>
+ <value>minimum</value>
+ <value>exact</value>
+ <value>strict</value>
+ </choice>
+ </attribute>
+ </define>
+
+ <define name="cpuModel">
+ <element name="model">
+ <text/>
+ </element>
+ </define>
+
+ <define name="cpuFeature">
+ <element name="feature">
+ <attribute name="policy">
+ <choice>
+ <value>force</value>
+ <value>require</value>
+ <value>optional</value>
+ <value>disable</value>
+ <value>forbid</value>
+ </choice>
+ </attribute>
+ <attribute name="name">
+ <ref name="featureName"/>
+ </attribute>
+ <empty/>
+ </element>
+ </define>
+
+ <define name="cpuTopology">
+ <element name="topology">
+ <attribute name="sockets">
+ <ref name="positiveInteger"/>
+ </attribute>
+ <attribute name="cores">
+ <ref name="positiveInteger"/>
+ </attribute>
+ <attribute name="threads">
+ <ref name="positiveInteger"/>
+ </attribute>
</element>
</define>
--
1.6.6.1