From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Anthony Liguori <anthony@codemonkey.ws>,
Lai Jiangshan <eag0628@gmail.com>,
kvm@vger.kernel.org, qemu-devel@nongnu.org,
Markus Armbruster <armbru@redhat.com>,
Avi Kivity <avi@redhat.com>
Subject: [PATCH 2/2 V9] qmp,inject-nmi: convert do_inject_nmi() to QObject
Date: Thu, 28 Apr 2011 11:35:33 +0800 [thread overview]
Message-ID: <4DB8E085.6000202@cn.fujitsu.com> (raw)
In-Reply-To: <20110427113346.5bd7fcac@doriath>
Make we can inject NMI via qemu-monitor-protocol.
We use "inject-nmi" for the command name, the meaning is clearer.
The behavior is cheanged to "injecting NMI to all CPU" which
simulates the Real hardware NMI button.
The command "inject-nmi" is only supported for x86 guest
currently, it will returns "Unsupported" error for non-x86 guest.
This error and this behavior are described in the comments.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
hmp-commands.hx | 21 +++++++++++----------
monitor.c | 20 +++++++++++++-------
qmp-commands.hx | 29 +++++++++++++++++++++++++++++
3 files changed, 53 insertions(+), 17 deletions(-)
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 834e6a8..b511850 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -737,19 +737,20 @@ The values that can be specified here depend on the machine type, but are
the same that can be specified in the @code{-boot} command line option.
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,
+ .name = "inject-nmi",
+ .args_type = "",
+ .params = "",
+ .help = "Inject an NMI on guest.\n"
+ "Returns \"Unsupported\" error when the guest does"
+ "not support NMI injection",
+ .user_print = monitor_user_noop,
+ .mhandler.cmd_new = do_inject_nmi,
},
-#endif
STEXI
-@item nmi @var{cpu}
-@findex nmi
-Inject an NMI on the given CPU (x86 only).
+@item inject-nmi
+@findex inject-nmi
+Inject an NMI on the guest (x86 only).
ETEXI
{
diff --git a/monitor.c b/monitor.c
index 5f3bc72..129eed1 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2544,16 +2544,22 @@ 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)
+static int do_inject_nmi(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
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;
- }
+ for (env = first_cpu; env != NULL; env = env->next_cpu) {
+ cpu_interrupt(env, CPU_INTERRUPT_NMI);
+ }
+
+ return 0;
+}
+#else
+static int do_inject_nmi(Monitor *mon, const QDict *qdict, QObject **ret_data)
+{
+ qerror_report(QERR_UNSUPPORTED,
+ "Injecting NMI is unsupported for the non-x86 guest");
+ return -1;
}
#endif
diff --git a/qmp-commands.hx b/qmp-commands.hx
index fbd98ee..e1b9b40 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -430,6 +430,35 @@ Example:
EQMP
{
+ .name = "inject-nmi",
+ .args_type = "",
+ .params = "",
+ .help = "Inject an NMI on guest.\n"
+ "Returns \"Unsupported\" error when the guest does"
+ "not support NMI injection",
+ .user_print = monitor_user_noop,
+ .mhandler.cmd_new = do_inject_nmi,
+ },
+
+SQMP
+inject-nmi
+----------
+
+Inject an NMI on guest.
+
+Arguments: None.
+
+Example:
+
+-> { "execute": "inject-nmi" }
+<- { "return": {} }
+
+Note: inject-nmi is only supported for x86 guest currently, it will
+ returns "Unsupported" error for non-x86 guest.
+
+EQMP
+
+ {
.name = "migrate",
.args_type = "detach:-d,blk:-b,inc:-i,uri:s",
.params = "[-d] [-b] [-i] uri",
--
1.7.4
next prev parent reply other threads:[~2011-04-28 3:32 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-07 9:43 [PATCH 0/2 V7] add inject-nmi qmp command Lai Jiangshan
2011-03-07 9:45 ` [PATCH 1/2] qemu,qmp: QError: New QERR_UNSUPPORTED Lai Jiangshan
2011-03-07 9:46 ` [PATCH 2/2 V7] qemu,qmp: add inject-nmi qmp command Lai Jiangshan
2011-04-04 10:59 ` [Qemu-devel] " Daniel P. Berrange
2011-04-04 12:19 ` Markus Armbruster
2011-04-04 13:04 ` Luiz Capitulino
2011-04-04 13:09 ` Anthony Liguori
2011-04-04 13:34 ` Luiz Capitulino
2011-04-20 1:53 ` Lai Jiangshan
2011-04-20 3:02 ` Lai Jiangshan
2011-04-25 15:00 ` [PATCH 2/2 V7] qemu, qmp: " Luiz Capitulino
2011-04-04 12:54 ` [Qemu-devel] [PATCH 2/2 V7] qemu,qmp: " Avi Kivity
2011-04-04 13:05 ` Anthony Liguori
2011-04-06 17:47 ` Luiz Capitulino
2011-04-06 18:03 ` Anthony Liguori
2011-04-06 18:08 ` Luiz Capitulino
2011-04-06 18:17 ` Jan Kiszka
2011-04-06 19:00 ` Luiz Capitulino
2011-04-06 19:27 ` Peter Maydell
2011-04-06 19:34 ` Anthony Liguori
2011-04-07 7:29 ` Jan Kiszka
2011-04-07 18:10 ` Peter Maydell
2011-04-07 18:32 ` Anthony Liguori
2011-04-07 18:51 ` Gleb Natapov
2011-04-07 19:04 ` Blue Swirl
2011-04-07 19:17 ` Gleb Natapov
2011-04-07 21:41 ` Anthony Liguori
2011-04-08 6:04 ` Gleb Natapov
2011-04-08 19:17 ` Blue Swirl
2011-04-08 19:32 ` Anthony Liguori
2011-04-08 20:07 ` Blue Swirl
2011-05-03 10:01 ` Jamie Lokier
2011-04-10 8:52 ` Avi Kivity
2011-04-11 7:01 ` Markus Armbruster
2011-04-11 17:15 ` Blue Swirl
2011-04-12 7:52 ` Avi Kivity
2011-04-12 18:31 ` Blue Swirl
2011-04-13 13:08 ` Luiz Capitulino
2011-04-13 19:56 ` [PATCH 2/2 V7] qemu, qmp: " Blue Swirl
2011-04-14 6:41 ` Markus Armbruster
2011-04-14 9:55 ` [Qemu-devel] [PATCH 2/2 V7] qemu,qmp: " Daniel P. Berrange
2011-04-15 16:37 ` [PATCH 2/2 V7] qemu, qmp: " Blue Swirl
2011-04-07 21:39 ` [Qemu-devel] [PATCH 2/2 V7] qemu,qmp: " Anthony Liguori
2011-04-08 5:54 ` Gleb Natapov
2011-05-03 9:54 ` [PATCH 2/2 V7] qemu, qmp: " Jamie Lokier
2011-04-10 8:57 ` [Qemu-devel] [PATCH 2/2 V7] qemu,qmp: " Avi Kivity
2011-04-20 6:19 ` [RFC PATCH 0/3 V8] QAPI: " Lai Jiangshan
2011-04-21 3:23 ` Lai Jiangshan
2011-04-26 13:26 ` Luiz Capitulino
2011-04-26 13:29 ` [Qemu-devel] " Anthony Liguori
2011-04-27 1:54 ` Lai Jiangshan
2011-04-27 14:33 ` Luiz Capitulino
2011-04-28 3:35 ` [PATCH 0/2 V9] hmp,qmp: add inject-nmi Lai Jiangshan
2011-04-29 22:24 ` Luiz Capitulino
2011-04-28 3:35 ` [PATCH 1/2 V9] qemu,qmp: QError: New QERR_UNSUPPORTED Lai Jiangshan
2011-04-28 3:35 ` Lai Jiangshan [this message]
2011-04-25 17:07 ` [Qemu-devel] [RFC PATCH 0/3 V8] QAPI: add inject-nmi qmp command Michael Roth
2011-04-20 6:19 ` [RFC PATCH 1/3 V8] QError: Introduce QERR_UNSUPPORTED Lai Jiangshan
2011-04-20 6:19 ` [RFC PATCH 2/3 V8] qapi,nmi: add inject-nmi qmp command Lai Jiangshan
2011-04-20 6:19 ` [RFC PATCH 3/3 V8] qapi-hmp: Convert HMP nmi to use QMP Lai Jiangshan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DB8E085.6000202@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=anthony@codemonkey.ws \
--cc=armbru@redhat.com \
--cc=avi@redhat.com \
--cc=eag0628@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.