<optional>
<ref name='cpufeatures'/>
</optional>
+ <optional>
+ <ref name='cpuspec'/>
+ </optional>
</element>
<optional>
<ref name='migration'/>
</element>
</define>
+ <define name='cpuspec'>
+ <element name='model'>
+ <text/>
+ </element>
+ <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>
+ <zeroOrMore>
+ <element name='feature'>
+ <attribute name='name'>
+ <ref name='featureName'/>
+ </attribute>
+ <empty/>
+ </element>
+ </zeroOrMore>
+ </define>
+
<define name='migration'>
<element name='migration_features'>
<optional>
<empty/>
</element>
</optional>
+ <optional>
+ <element name='cpuselection'>
+ <empty/>
+ </element>
+ </optional>
</element>
</define>
</define>
+ <define name='positiveInteger'>
+ <data type='positiveInteger'>
+ <param name="pattern">[0-9]+</param>
+ </data>
+ </define>
+
<define name='uint'>
- <data type='string'>
+ <data type='unsignedInt'>
<param name="pattern">[0-9]+</param>
</data>
</define>
</data>
</define>
+ <define name='featureName'>
+ <data type='string'>
+ <param name='pattern'>[a-zA-Z0-9\-_]+</param>
+ </data>
+ </define>
</grammar>
<optional>
<ref name="description"/>
</optional>
+ <optional>
+ <ref name="cpu"/>
+ </optional>
<ref name="os"/>
<ref name="clock"/>
<ref name="resources"/>
</element>
</optional>
</define>
+ <!--
+ CPU specification
+ -->
+ <define name="cpu">
+ <element name="cpu">
+ <attribute name="match">
+ <choice>
+ <value>minimum</value>
+ <value>exact</value>
+ <value>strict</value>
+ </choice>
+ </attribute>
+ <interleave>
+ <element name="model">
+ <text/>
+ </element>
+ <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>
+ </element>
+ </define>
<!--
Type library
<param name="pattern">[0-9]+</param>
</data>
</define>
+ <define name='positiveInteger'>
+ <data type='positiveInteger'>
+ <param name="pattern">[0-9]+</param>
+ </data>
+ </define>
<define name="countCPU">
<data type="unsignedShort">
<param name="pattern">[0-9]+</param>
<param name="pattern">(0x)?[0-7]</param>
</data>
</define>
+ <define name="featureName">
+ <data type="string">
+ <param name='pattern'>[a-zA-Z0-9\-_]+</param>
+ </data>
+ </define>
</grammar>