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@xxxxxxxxxx> --- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list