diff mbox

[6/6] watchdog: Add new Virtual Watchdog action INJECT-NMI

Message ID 1429257161-29597-7-git-send-email-cornelia.huck@de.ibm.com
State New
Headers show

Commit Message

Cornelia Huck April 17, 2015, 7:52 a.m. UTC
From: Mao Chuan Li <maochuan@linux.vnet.ibm.com>

This patch allows QEMU to inject a NMI into a guest when the
watchdog expires.

Signed-off-by: Mao Chuan Li <maochuan@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/watchdog/watchdog.c | 10 ++++++++++
 qapi-schema.json       |  6 +++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

Comments

Eric Blake April 17, 2015, 12:28 p.m. UTC | #1
On 04/17/2015 01:52 AM, Cornelia Huck wrote:
> From: Mao Chuan Li <maochuan@linux.vnet.ibm.com>
> 
> This patch allows QEMU to inject a NMI into a guest when the
> watchdog expires.
> 
> Signed-off-by: Mao Chuan Li <maochuan@linux.vnet.ibm.com>
> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> ---
>  hw/watchdog/watchdog.c | 10 ++++++++++
>  qapi-schema.json       |  6 +++++-
>  2 files changed, 15 insertions(+), 1 deletion(-)
> 

> +++ b/qapi-schema.json
> @@ -3606,10 +3606,14 @@
>  #
>  # @none: nothing is done
>  #
> +# @inject-nmi: a non-maskable interrupt is injected into the first VCPU (all
> +#              VCPUS on x86)

Needs a '(since 2.4)' designation.
Cornelia Huck April 20, 2015, 3:23 p.m. UTC | #2
On Fri, 17 Apr 2015 06:28:10 -0600
Eric Blake <eblake@redhat.com> wrote:

> On 04/17/2015 01:52 AM, Cornelia Huck wrote:
> > From: Mao Chuan Li <maochuan@linux.vnet.ibm.com>
> > 
> > This patch allows QEMU to inject a NMI into a guest when the
> > watchdog expires.
> > 
> > Signed-off-by: Mao Chuan Li <maochuan@linux.vnet.ibm.com>
> > Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
> > Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> > ---
> >  hw/watchdog/watchdog.c | 10 ++++++++++
> >  qapi-schema.json       |  6 +++++-
> >  2 files changed, 15 insertions(+), 1 deletion(-)
> > 
> 
> > +++ b/qapi-schema.json
> > @@ -3606,10 +3606,14 @@
> >  #
> >  # @none: nothing is done
> >  #
> > +# @inject-nmi: a non-maskable interrupt is injected into the first VCPU (all
> > +#              VCPUS on x86)
> 
> Needs a '(since 2.4)' designation.
> 

Will add.
diff mbox

Patch

diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c
index 54440c9..8d4b0ee 100644
--- a/hw/watchdog/watchdog.c
+++ b/hw/watchdog/watchdog.c
@@ -27,6 +27,7 @@ 
 #include "sysemu/sysemu.h"
 #include "sysemu/watchdog.h"
 #include "qapi-event.h"
+#include "hw/nmi.h"
 
 /* Possible values for action parameter. */
 #define WDT_RESET        1	/* Hard reset. */
@@ -35,6 +36,7 @@ 
 #define WDT_PAUSE        4	/* Pause. */
 #define WDT_DEBUG        5	/* Prints a message and continues running. */
 #define WDT_NONE         6	/* Do nothing. */
+#define WDT_NMI          7	/* Inject nmi into the guest */
 
 static int watchdog_action = WDT_RESET;
 static QLIST_HEAD(watchdog_list, WatchdogTimerModel) watchdog_list;
@@ -95,6 +97,8 @@  int select_watchdog_action(const char *p)
         watchdog_action = WDT_DEBUG;
     else if (strcasecmp(p, "none") == 0)
         watchdog_action = WDT_NONE;
+    else if (strcasecmp(p, "inject-nmi") == 0)
+        watchdog_action = WDT_NMI;
     else
         return -1;
 
@@ -138,5 +142,11 @@  void watchdog_perform_action(void)
     case WDT_NONE:
         qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_NONE, &error_abort);
         break;
+
+    case WDT_NMI:
+        qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_INJECT_NMI,
+                                 &error_abort);
+        inject_nmi();
+        break;
     }
 }
diff --git a/qapi-schema.json b/qapi-schema.json
index ac9594d..2d3bce2 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3606,10 +3606,14 @@ 
 #
 # @none: nothing is done
 #
+# @inject-nmi: a non-maskable interrupt is injected into the first VCPU (all
+#              VCPUS on x86)
+#
 # Since: 2.1
 ##
 { 'enum': 'WatchdogExpirationAction',
-  'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none' ] }
+  'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none',
+            'inject-nmi' ] }
 
 ##
 # @IoOperationType