Commit 795dc6e4 authored by Mao Chuan Li's avatar Mao Chuan Li Committed by Christian Borntraeger
Browse files

watchdog: Add new Virtual Watchdog action INJECT-NMI



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

Signed-off-by: default avatarMao Chuan Li <maochuan@linux.vnet.ibm.com>
Reviewed-by: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
CC: Eric Blake <eblake@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
parent f9a535e0
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+5 −1
Original line number Diff line number Diff line
@@ -3746,10 +3746,14 @@
#
# @none: nothing is done
#
# @inject-nmi: a non-maskable interrupt is injected into the first VCPU (all
#              VCPUS on x86) (since 2.4)
#
# Since: 2.1
##
{ 'enum': 'WatchdogExpirationAction',
  'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none' ] }
  'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none',
            'inject-nmi' ] }

##
# @IoOperationType