qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 2/2] qemu, qmp: convert do_inject_nmi() to QObject, QError
@ 2010-12-10  6:36 Lai Jiangshan
  2010-12-10 10:30 ` [Qemu-devel] " Markus Armbruster
  2010-12-10 11:20 ` Luiz Capitulino
  0 siblings, 2 replies; 5+ messages in thread
From: Lai Jiangshan @ 2010-12-10  6:36 UTC (permalink / raw)
  To: Luiz Capitulino, qemu-devel, kvm


Convert do_inject_nmi() to QObject, QError, we need to use it(via libvirt).

changed from v1
Add document.
Add error handling when the cpu index is invalid.

Signed-off-by:  Lai Jiangshan <laijs@cn.fujitsu.com>
---
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 23024ba..f86d9fe 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -724,7 +724,8 @@ ETEXI
         .args_type  = "cpu_index:i",
         .params     = "cpu",
         .help       = "inject an NMI on the given CPU",
-        .mhandler.cmd = do_inject_nmi,
+        .user_print = monitor_user_noop,
+        .mhandler.cmd_new = do_inject_nmi,
     },
 #endif
 STEXI
diff --git a/monitor.c b/monitor.c
index ec31eac..f375eb3 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2119,7 +2119,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)
+static int do_inject_nmi(Monitor *mon, const QDict *qdict, QObject **ret_data)
 {
     CPUState *env;
     int cpu_index = qdict_get_int(qdict, "cpu_index");
@@ -2127,8 +2127,11 @@ static void do_inject_nmi(Monitor *mon, const QDict *qdict)
     for (env = first_cpu; env != NULL; env = env->next_cpu)
         if (env->cpu_index == cpu_index) {
             cpu_interrupt(env, CPU_INTERRUPT_NMI);
-            break;
+            return 0;
         }
+
+    qerror_report(QERR_INVALID_CPU_INDEX, cpu_index);
+    return -1;
 }
 #endif
 
diff --git a/qmp-commands.hx b/qmp-commands.hx
index e5f157f..fcb6bf2 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -429,6 +429,33 @@ Example:
 
 EQMP
 
+#if defined(TARGET_I386)
+    {
+        .name       = "inject_nmi",
+        .args_type  = "cpu_index:i",
+        .params     = "cpu",
+        .help       = "inject an NMI on the given CPU",
+        .user_print = monitor_user_noop,
+        .mhandler.cmd_new = do_inject_nmi,
+    },
+#endif
+SQMP
+inject_nmi
+----------
+
+Inject an NMI on the given CPU (x86 only).
+
+Arguments:
+
+- "cpu_index": the index of the CPU to be injected NMI (json-int)
+
+Example:
+
+-> { "execute": "inject_nmi", "arguments": { "cpu_index": 0 } }
+<- { "return": {} }
+
+EQMP
+
     {
         .name       = "migrate",
         .args_type  = "detach:-d,blk:-b,inc:-i,uri:s",

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] Re: [PATCH v2 2/2] qemu, qmp: convert do_inject_nmi() to QObject, QError
  2010-12-10  6:36 [Qemu-devel] [PATCH v2 2/2] qemu, qmp: convert do_inject_nmi() to QObject, QError Lai Jiangshan
@ 2010-12-10 10:30 ` Markus Armbruster
  2010-12-10 11:20 ` Luiz Capitulino
  1 sibling, 0 replies; 5+ messages in thread
From: Markus Armbruster @ 2010-12-10 10:30 UTC (permalink / raw)
  To: Lai Jiangshan; +Cc: qemu-devel, kvm, Luiz Capitulino

Lai Jiangshan <laijs@cn.fujitsu.com> writes:

> Convert do_inject_nmi() to QObject, QError, we need to use it(via libvirt).
>
> changed from v1
> Add document.
> Add error handling when the cpu index is invalid.
>
> Signed-off-by:  Lai Jiangshan <laijs@cn.fujitsu.com>
> ---
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 23024ba..f86d9fe 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -724,7 +724,8 @@ ETEXI
>          .args_type  = "cpu_index:i",
>          .params     = "cpu",
>          .help       = "inject an NMI on the given CPU",
> -        .mhandler.cmd = do_inject_nmi,
> +        .user_print = monitor_user_noop,
> +        .mhandler.cmd_new = do_inject_nmi,
>      },
>  #endif
>  STEXI
> diff --git a/monitor.c b/monitor.c
> index ec31eac..f375eb3 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -2119,7 +2119,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)
> +static int do_inject_nmi(Monitor *mon, const QDict *qdict, QObject **ret_data)
>  {
>      CPUState *env;
>      int cpu_index = qdict_get_int(qdict, "cpu_index");
> @@ -2127,8 +2127,11 @@ static void do_inject_nmi(Monitor *mon, const QDict *qdict)
>      for (env = first_cpu; env != NULL; env = env->next_cpu)
>          if (env->cpu_index == cpu_index) {
>              cpu_interrupt(env, CPU_INTERRUPT_NMI);
> -            break;
> +            return 0;
>          }
> +
> +    qerror_report(QERR_INVALID_CPU_INDEX, cpu_index);
> +    return -1;

do_cpu_set() reports invalud index like this:

        qerror_report(QERR_INVALID_PARAMETER_VALUE, "index",
                      "a CPU number");

What about sticking to that?

[...]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] Re: [PATCH v2 2/2] qemu, qmp: convert do_inject_nmi() to QObject, QError
  2010-12-10  6:36 [Qemu-devel] [PATCH v2 2/2] qemu, qmp: convert do_inject_nmi() to QObject, QError Lai Jiangshan
  2010-12-10 10:30 ` [Qemu-devel] " Markus Armbruster
@ 2010-12-10 11:20 ` Luiz Capitulino
  2010-12-20 10:47   ` Marcelo Tosatti
  1 sibling, 1 reply; 5+ messages in thread
From: Luiz Capitulino @ 2010-12-10 11:20 UTC (permalink / raw)
  To: Lai Jiangshan; +Cc: aliguori, qemu-devel, kvm, avi

On Fri, 10 Dec 2010 14:36:08 +0800
Lai Jiangshan <laijs@cn.fujitsu.com> wrote:

> +SQMP
> +inject_nmi
> +----------
> +
> +Inject an NMI on the given CPU (x86 only).
> +
> +Arguments:
> +
> +- "cpu_index": the index of the CPU to be injected NMI (json-int)
> +
> +Example:
> +
> +-> { "execute": "inject_nmi", "arguments": { "cpu_index": 0 } }
> +<- { "return": {} }
> +
> +EQMP
> +

Avi, Anthony, can you please review this? Do we expect some kind of ack from
the guest? Do we expect it respond in some way?

Also note that the current series defines only one error condition: invalid
cpu index. Can this fail in other ways?

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] Re: [PATCH v2 2/2] qemu, qmp: convert do_inject_nmi() to QObject, QError
  2010-12-10 11:20 ` Luiz Capitulino
@ 2010-12-20 10:47   ` Marcelo Tosatti
  2011-01-03 17:01     ` Luiz Capitulino
  0 siblings, 1 reply; 5+ messages in thread
From: Marcelo Tosatti @ 2010-12-20 10:47 UTC (permalink / raw)
  To: Luiz Capitulino; +Cc: avi, aliguori, Lai Jiangshan, kvm, qemu-devel

On Fri, Dec 10, 2010 at 09:20:26AM -0200, Luiz Capitulino wrote:
> On Fri, 10 Dec 2010 14:36:08 +0800
> Lai Jiangshan <laijs@cn.fujitsu.com> wrote:
> 
> > +SQMP
> > +inject_nmi
> > +----------
> > +
> > +Inject an NMI on the given CPU (x86 only).
> > +
> > +Arguments:
> > +
> > +- "cpu_index": the index of the CPU to be injected NMI (json-int)
> > +
> > +Example:
> > +
> > +-> { "execute": "inject_nmi", "arguments": { "cpu_index": 0 } }
> > +<- { "return": {} }
> > +
> > +EQMP
> > +
> 
> Avi, Anthony, can you please review this? Do we expect some kind of ack from
> the guest? Do we expect it respond in some way?

Looks good to me. Don't except any response from the guest.

> Also note that the current series defines only one error condition: invalid
> cpu index. Can this fail in other ways?
> --

Not really. An NMI can be pending already (which means the current
command has no effect), but i don't see the need to report that.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] Re: [PATCH v2 2/2] qemu, qmp: convert do_inject_nmi() to QObject, QError
  2010-12-20 10:47   ` Marcelo Tosatti
@ 2011-01-03 17:01     ` Luiz Capitulino
  0 siblings, 0 replies; 5+ messages in thread
From: Luiz Capitulino @ 2011-01-03 17:01 UTC (permalink / raw)
  To: Marcelo Tosatti; +Cc: avi, aliguori, Lai Jiangshan, kvm, qemu-devel

On Mon, 20 Dec 2010 08:47:46 -0200
Marcelo Tosatti <mtosatti@redhat.com> wrote:

> On Fri, Dec 10, 2010 at 09:20:26AM -0200, Luiz Capitulino wrote:
> > On Fri, 10 Dec 2010 14:36:08 +0800
> > Lai Jiangshan <laijs@cn.fujitsu.com> wrote:
> > 
> > > +SQMP
> > > +inject_nmi
> > > +----------
> > > +
> > > +Inject an NMI on the given CPU (x86 only).
> > > +
> > > +Arguments:
> > > +
> > > +- "cpu_index": the index of the CPU to be injected NMI (json-int)
> > > +
> > > +Example:
> > > +
> > > +-> { "execute": "inject_nmi", "arguments": { "cpu_index": 0 } }
> > > +<- { "return": {} }
> > > +
> > > +EQMP
> > > +
> > 
> > Avi, Anthony, can you please review this? Do we expect some kind of ack from
> > the guest? Do we expect it respond in some way?
> 
> Looks good to me. Don't except any response from the guest.
> 
> > Also note that the current series defines only one error condition: invalid
> > cpu index. Can this fail in other ways?
> > --
> 
> Not really. An NMI can be pending already (which means the current
> command has no effect), but i don't see the need to report that.

Ok, thanks for the feedback Marcelo.

> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-01-03 17:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-10  6:36 [Qemu-devel] [PATCH v2 2/2] qemu, qmp: convert do_inject_nmi() to QObject, QError Lai Jiangshan
2010-12-10 10:30 ` [Qemu-devel] " Markus Armbruster
2010-12-10 11:20 ` Luiz Capitulino
2010-12-20 10:47   ` Marcelo Tosatti
2011-01-03 17:01     ` Luiz Capitulino

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).