schema: Fix guest timer specification schema according to the docs

According to the documentation describing various tunables for domain
timers not all the fields are supported by all the driver types. Express
these in the RNG:

- rtc, platform: Only these support the "track" attribute.
- tsc: only one to support "frequency" and "mode" attributes
- hpet, pit: tickpolicy/catchup attribute/element
- kvmclock: no extra attributes are supported

Additionally the attributes of the <catchup> element for
tickpolicy='catchup' are optional according to the parsing code. Express
this in the XML and fix a spurious space added while formatting the
<catchup> element and add tests for it.
This commit is contained in:
Peter Krempa
2014-02-04 19:02:04 +01:00
parent f88a3d9b0c
commit bbd392ff86
6 changed files with 142 additions and 61 deletions

View File

@@ -857,54 +857,68 @@
</define>
<define name="timer">
<element name="timer">
<attribute name="name">
<choice>
<value>platform</value>
<value>hpet</value>
<value>kvmclock</value>
<value>pit</value>
<value>rtc</value>
<value>tsc</value>
</choice>
</attribute>
<optional>
<attribute name="track">
<choice>
<value>boot</value>
<value>guest</value>
<value>wall</value>
</choice>
</attribute>
</optional>
<optional>
<attribute name="tickpolicy">
<choice>
<value>delay</value>
<value>catchup</value>
<value>merge</value>
<value>discard</value>
</choice>
</attribute>
</optional>
<optional>
<ref name="catchup"/>
</optional>
<optional>
<attribute name="frequency">
<ref name="unsignedInt"/>
</attribute>
</optional>
<optional>
<attribute name="mode">
<choice>
<value>auto</value>
<value>native</value>
<value>emulate</value>
<value>paravirt</value>
<value>smpsafe</value>
</choice>
</attribute>
</optional>
<choice>
<group>
<attribute name="name">
<choice>
<value>platform</value>
<value>rtc</value>
</choice>
</attribute>
<optional>
<attribute name="track">
<choice>
<value>boot</value>
<value>guest</value>
<value>wall</value>
</choice>
</attribute>
</optional>
<optional>
<ref name="tickpolicy"/>
</optional>
</group>
<group>
<attribute name="name">
<value>tsc</value>
</attribute>
<optional>
<ref name="tickpolicy"/>
</optional>
<optional>
<attribute name="frequency">
<ref name="unsignedInt"/>
</attribute>
</optional>
<optional>
<attribute name="mode">
<choice>
<value>auto</value>
<value>native</value>
<value>emulate</value>
<value>paravirt</value>
<value>smpsafe</value>
</choice>
</attribute>
</optional>
</group>
<group>
<attribute name="name">
<choice>
<value>hpet</value>
<value>pit</value>
</choice>
</attribute>
<optional>
<ref name="tickpolicy"/>
</optional>
</group>
<group>
<attribute name="name">
<value>kvmclock</value>
</attribute>
</group>
</choice>
<optional>
<attribute name="present">
<choice>
@@ -916,20 +930,43 @@
<empty/>
</element>
</define>
<define name="catchup">
<element name="catchup">
<optional>
<attribute name="threshold">
<ref name="unsignedInt"/>
<define name="tickpolicy">
<choice>
<group>
<attribute name="tickpolicy">
<choice>
<value>delay</value>
<value>merge</value>
<value>discard</value>
</choice>
</attribute>
<attribute name="slew">
<ref name="unsignedInt"/>
</group>
<group>
<attribute name="tickpolicy">
<value>catchup</value>
</attribute>
<attribute name="limit">
<ref name="unsignedInt"/>
</attribute>
</optional>
</element>
<optional>
<element name="catchup">
<optional>
<attribute name="threshold">
<ref name="unsignedInt"/>
</attribute>
</optional>
<optional>
<attribute name="slew">
<ref name="unsignedInt"/>
</attribute>
</optional>
<optional>
<attribute name="limit">
<ref name="unsignedInt"/>
</attribute>
</optional>
</element>
</optional>
</group>
</choice>
</define>
<!--
A bootloader may be used to extract the OS information instead of