From a404666457b54142d6cfe8302bcded9be4cda379 Mon Sep 17 00:00:00 2001 From: Lai Jiangshan Date: Mon, 7 Mar 2011 17:05:15 +0800 Subject: QMP: add inject-nmi qmp command inject-nmi command injects an NMI on all CPUs of guest. It is only supported for x86 guest currently, it will returns "Unsupported" error for non-x86 guest. Signed-off-by: Luiz Capitulino --- monitor.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'monitor.c') diff --git a/monitor.c b/monitor.c index f63cce050f..81d3c9b748 100644 --- a/monitor.c +++ b/monitor.c @@ -2555,6 +2555,23 @@ static void do_inject_nmi(Monitor *mon, const QDict *qdict) break; } } + +static int do_inject_nmi_all(Monitor *mon, const QDict *qdict, QObject **ret_data) +{ + CPUState *env; + + for (env = first_cpu; env != NULL; env = env->next_cpu) { + cpu_interrupt(env, CPU_INTERRUPT_NMI); + } + + return 0; +} +#else +static int do_inject_nmi_all(Monitor *mon, const QDict *qdict, QObject **ret_data) +{ + qerror_report(QERR_UNSUPPORTED); + return -1; +} #endif static void do_info_status_print(Monitor *mon, const QObject *data) -- cgit 1.4.1 From e9b4b432e781863869b074d46966bfa0bd672b8f Mon Sep 17 00:00:00 2001 From: Luiz Capitulino Date: Fri, 29 Apr 2011 12:11:50 -0300 Subject: HMP: Use QMP inject nmi implementation This **CHANGES** the human monitor "nmi" command behavior. Currently it accepts an CPU argument which, when provided, will send the NMI to the specified CPU. This feature is of discussable value though and HMP shouldn't have more features than QMP, so let's use QMP's instead (it's also simpler). Signed-off-by: Luiz Capitulino --- hmp-commands.hx | 9 +++++---- monitor.c | 16 ++-------------- qmp-commands.hx | 2 +- 3 files changed, 8 insertions(+), 19 deletions(-) (limited to 'monitor.c') diff --git a/hmp-commands.hx b/hmp-commands.hx index 834e6a8c87..6ad8806785 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -740,10 +740,11 @@ ETEXI #if defined(TARGET_I386) { .name = "nmi", - .args_type = "cpu_index:i", - .params = "cpu", - .help = "inject an NMI on the given CPU", - .mhandler.cmd = do_inject_nmi, + .args_type = "", + .params = "", + .help = "inject an NMI on all guest's CPUs", + .user_print = monitor_user_noop, + .mhandler.cmd_new = do_inject_nmi, }, #endif STEXI diff --git a/monitor.c b/monitor.c index 81d3c9b748..6af6a4d999 100644 --- a/monitor.c +++ b/monitor.c @@ -2544,19 +2544,7 @@ static void do_wav_capture(Monitor *mon, const QDict *qdict) #endif #if defined(TARGET_I386) -static void do_inject_nmi(Monitor *mon, const QDict *qdict) -{ - CPUState *env; - int cpu_index = qdict_get_int(qdict, "cpu_index"); - - for (env = first_cpu; env != NULL; env = env->next_cpu) - if (env->cpu_index == cpu_index) { - cpu_interrupt(env, CPU_INTERRUPT_NMI); - break; - } -} - -static int do_inject_nmi_all(Monitor *mon, const QDict *qdict, QObject **ret_data) +static int do_inject_nmi(Monitor *mon, const QDict *qdict, QObject **ret_data) { CPUState *env; @@ -2567,7 +2555,7 @@ static int do_inject_nmi_all(Monitor *mon, const QDict *qdict, QObject **ret_dat return 0; } #else -static int do_inject_nmi_all(Monitor *mon, const QDict *qdict, QObject **ret_data) +static int do_inject_nmi(Monitor *mon, const QDict *qdict, QObject **ret_data) { qerror_report(QERR_UNSUPPORTED); return -1; diff --git a/qmp-commands.hx b/qmp-commands.hx index ae08b7a59d..92c5c3a318 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -435,7 +435,7 @@ EQMP .params = "", .help = "", .user_print = monitor_user_noop, - .mhandler.cmd_new = do_inject_nmi_all, + .mhandler.cmd_new = do_inject_nmi, }, SQMP -- cgit 1.4.1