This patches provides support for the new watchdog action "inject-nmi" which
allows to define an inject of a non-maskable interrupt into a guest.
Signed-off-by: Boris Fiuczynski <fiuczy(a)linux.vnet.ibm.com>
Reviewed-by: Daniel Hansel <daniel.hansel(a)linux.vnet.ibm.com>
Reviewed-by: Stefan Zimmermann <stzi(a)linux.vnet.ibm.com>
Reviewed-by: Tony Krowiak <akrowiak(a)linux.vnet.ibm.com>
---
docs/formatdomain.html.in | 3 +++
docs/schemas/domaincommon.rng | 1 +
include/libvirt/libvirt-domain.h | 1 +
src/conf/domain_conf.c | 3 ++-
src/conf/domain_conf.h | 1 +
src/qemu/qemu_monitor_json.c | 2 +-
tools/virsh-domain.c | 3 ++-
7 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 4e85b51..0ee555d 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -5704,6 +5704,9 @@ qemu-kvm -net nic,model=? /dev/null
<li>'none' — do nothing</li>
<li>'dump' — automatically dump the guest
<span class="since">Since 0.8.7</span></li>
+ <li>'inject-nmi' — inject a non-maskable interrupt
+ into the guest
+ <span class="since">Since 1.3.0</span></li>
</ul>
<p>
Note 1: the 'shutdown' action requires that the guest
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index f0f7400..55dec4e 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3272,6 +3272,7 @@
<value>pause</value>
<value>none</value>
<value>dump</value>
+ <value>inject-nmi</value>
</choice>
</attribute>
</optional>
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index d851225..ed34d53 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -2833,6 +2833,7 @@ typedef enum {
VIR_DOMAIN_EVENT_WATCHDOG_POWEROFF, /* Guest is forcibly powered off */
VIR_DOMAIN_EVENT_WATCHDOG_SHUTDOWN, /* Guest is requested to gracefully shutdown */
VIR_DOMAIN_EVENT_WATCHDOG_DEBUG, /* No action, a debug message logged */
+ VIR_DOMAIN_EVENT_WATCHDOG_INJECTNMI,/* Inject a non-maskable interrupt into guest */
# ifdef VIR_ENUM_SENTINELS
VIR_DOMAIN_EVENT_WATCHDOG_LAST
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ca55981..ecf7b0d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -506,7 +506,8 @@ VIR_ENUM_IMPL(virDomainWatchdogAction,
VIR_DOMAIN_WATCHDOG_ACTION_LAST,
"poweroff",
"pause",
"dump",
- "none")
+ "none",
+ "inject-nmi")
VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
"vga",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index ba17a8d..e677f30 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1315,6 +1315,7 @@ typedef enum {
VIR_DOMAIN_WATCHDOG_ACTION_PAUSE,
VIR_DOMAIN_WATCHDOG_ACTION_DUMP,
VIR_DOMAIN_WATCHDOG_ACTION_NONE,
+ VIR_DOMAIN_WATCHDOG_ACTION_INJECTNMI,
VIR_DOMAIN_WATCHDOG_ACTION_LAST
} virDomainWatchdogAction;
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 13c57d2..aef7c44 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -557,7 +557,7 @@ static void qemuMonitorJSONHandleRTCChange(qemuMonitorPtr mon,
virJSONValuePtr d
VIR_ENUM_DECL(qemuMonitorWatchdogAction)
VIR_ENUM_IMPL(qemuMonitorWatchdogAction, VIR_DOMAIN_EVENT_WATCHDOG_LAST,
- "none", "pause", "reset",
"poweroff", "shutdown", "debug");
+ "none", "pause", "reset",
"poweroff", "shutdown", "debug", "inject-nmi");
static void qemuMonitorJSONHandleWatchdog(qemuMonitorPtr mon, virJSONValuePtr data)
{
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 4c47473..cc1e46d 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -11677,7 +11677,8 @@ VIR_ENUM_IMPL(vshDomainEventWatchdog,
N_("reset"),
N_("poweroff"),
N_("shutdown"),
- N_("debug"))
+ N_("debug"),
+ N_("inject-nmi"))
static const char *
vshDomainEventWatchdogToString(int action)
--
2.3.0