[libvirt] [PATCH] Support QEMU/KVM watchdog device
Daniel Veillard
veillard at redhat.com
Wed Oct 21 15:28:49 UTC 2009
On Wed, Oct 21, 2009 at 03:52:18PM +0100, Richard W.M. Jones wrote:
> On Wed, Oct 21, 2009 at 04:42:06PM +0200, Daniel Veillard wrote:
> > On Wed, Oct 21, 2009 at 01:32:49PM +0100, Richard W.M. Jones wrote:
> > > + if ((n = virXPathNodeSet(conn, "./devices/watchdog", ctxt, &nodes)) < 0) {
> > > + virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
> > > + "%s", _("cannot extract watchdog devices"));
> > > + goto error;
> > > + }
> >
> > Hum, I'm afraid this will lead to errros for any defintition without a
> > watchdog ! Since that's completely optional we really should not error
> > there IMHO and just skip it.
>
> Trouble is, the code preceeding this would fail first. It seems to be
> a generic problem with all those calls to virXPathNodeSet in that
> case.
Yup, I'm sending a separate patch to cover this,
> > As well as extending the domain.rng as you raised on IRC :-)
>
> The attached patch includes changes to the domain.rng and adds XML <->
> qemu command line tests.
[...]
> --- a/docs/schemas/domain.rng
> +++ b/docs/schemas/domain.rng
> @@ -1013,6 +1013,27 @@
> </attribute>
> </element>
> </define>
> + <define name="watchdog">
> + <element name="watchdog">
> + <attribute name="model">
> + <choice>
> + <value>i6300esb</value>
> + <value>ib700</value>
> + </choice>
> + </attribute>
> + <optional>
> + <attribute name="action">
> + <choice>
> + <value>reset</value>
> + <value>shutdown</value>
> + <value>poweroff</value>
> + <value>pause</value>
> + <value>none</value>
> + </choice>
> + </attribute>
> + </optional>
> + </element>
> + </define>
> <define name="parallel">
> <element name="parallel">
> <ref name="qemucdev"/>
> @@ -1139,6 +1160,9 @@
> <ref name="serial"/>
> </choice>
> </zeroOrMore>
> + <optional>
> + <ref name="watchdog"/>
> + </optional>
> </interleave>
> </element>
> </define>
okay but indentation seems funky, can you double check ?
[...]
> diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c
> index 65d4d14..1b16aa9 100644
> --- a/tests/qemuargv2xmltest.c
> +++ b/tests/qemuargv2xmltest.c
> @@ -212,6 +212,7 @@ mymain(int argc, char **argv)
> DO_TEST("parallel-tcp", 0);
> DO_TEST("console-compat", 0);
> DO_TEST("sound", 0);
> + DO_TEST("watchdog", 0);
>
> DO_TEST("hostdev-usb-product", 0);
> DO_TEST("hostdev-usb-address", 0);
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-watchdog.args b/tests/qemuxml2argvdata/qemuxml2argv-watchdog.args
> new file mode 100644
> index 0000000..40a656b
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-watchdog.args
> @@ -0,0 +1 @@
> +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -watchdog ib700 -watchdog-action poweroff
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-watchdog.xml b/tests/qemuxml2argvdata/qemuxml2argv-watchdog.xml
> new file mode 100644
> index 0000000..9b2ffdf
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-watchdog.xml
> @@ -0,0 +1,23 @@
> +<domain type='qemu'>
> + <name>QEMUGuest1</name>
> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> + <memory>219200</memory>
> + <currentMemory>219200</currentMemory>
> + <vcpu>1</vcpu>
> + <os>
> + <type arch='i686' machine='pc'>hvm</type>
> + <boot dev='hd'/>
> + </os>
> + <clock offset='utc'/>
> + <on_poweroff>destroy</on_poweroff>
> + <on_reboot>restart</on_reboot>
> + <on_crash>destroy</on_crash>
> + <devices>
> + <emulator>/usr/bin/qemu</emulator>
> + <disk type='block' device='disk'>
> + <source dev='/dev/HostVG/QEMUGuest1'/>
> + <target dev='hda' bus='ide'/>
> + </disk>
> + <watchdog model='ib700' action='poweroff'/>
> + </devices>
> +</domain>
> --
ACK, looks fine to me !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list