* [PATCH 2/3] nmi: make cpu-index argument optional
@ 2010-12-20 6:11 Lai Jiangshan
2010-12-20 16:58 ` [Qemu-devel] " Markus Armbruster
0 siblings, 1 reply; 3+ messages in thread
From: Lai Jiangshan @ 2010-12-20 6:11 UTC (permalink / raw)
To: Luiz Capitulino, Markus Armbruster, qemu-devel, aliguori, kvm,
Avi Kivity
When the argument "cpu-index" is not given,
then "nmi" command will inject NMI on all CPUs.
This simulate the nmi button on physical machine.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 8de7aa3..d8fe4c0 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -721,9 +721,9 @@ ETEXI
#if defined(TARGET_I386)
{
.name = "nmi",
- .args_type = "cpu-index:i",
- .params = "cpu",
- .help = "inject an NMI on the given CPU",
+ .args_type = "cpu-index:i?",
+ .params = "[cpu]",
+ .help = "inject an NMI on all CPUs or the given CPU",
.mhandler.cmd = do_inject_nmi,
},
#endif
diff --git a/monitor.c b/monitor.c
index c16b39d..45a8dc2 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2410,7 +2410,13 @@ static void do_wav_capture(Monitor *mon, const QDict *qdict)
static void do_inject_nmi(Monitor *mon, const QDict *qdict)
{
CPUState *env;
- int cpu_index = qdict_get_int(qdict, "cpu-index");
+ int cpu_index = qdict_get_try_int(qdict, "cpu-index", -1);
+
+ if (cpu_index == -1) {
+ for (env = first_cpu; env != NULL; env = env->next_cpu)
+ cpu_interrupt(env, CPU_INTERRUPT_NMI);
+ return;
+ }
for (env = first_cpu; env != NULL; env = env->next_cpu)
if (env->cpu_index == cpu_index) {
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] nmi: make cpu-index argument optional
2010-12-20 6:11 [PATCH 2/3] nmi: make cpu-index argument optional Lai Jiangshan
@ 2010-12-20 16:58 ` Markus Armbruster
2010-12-21 6:05 ` Lai Jiangshan
0 siblings, 1 reply; 3+ messages in thread
From: Markus Armbruster @ 2010-12-20 16:58 UTC (permalink / raw)
To: Lai Jiangshan; +Cc: Luiz Capitulino, qemu-devel, aliguori, kvm, Avi Kivity
Lai Jiangshan <laijs@cn.fujitsu.com> writes:
> When the argument "cpu-index" is not given,
> then "nmi" command will inject NMI on all CPUs.
>
> This simulate the nmi button on physical machine.
>
> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
> ---
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 8de7aa3..d8fe4c0 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -721,9 +721,9 @@ ETEXI
> #if defined(TARGET_I386)
> {
> .name = "nmi",
> - .args_type = "cpu-index:i",
> - .params = "cpu",
> - .help = "inject an NMI on the given CPU",
> + .args_type = "cpu-index:i?",
> + .params = "[cpu]",
> + .help = "inject an NMI on all CPUs or the given CPU",
> .mhandler.cmd = do_inject_nmi,
> },
> #endif
> diff --git a/monitor.c b/monitor.c
> index c16b39d..45a8dc2 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -2410,7 +2410,13 @@ static void do_wav_capture(Monitor *mon, const QDict *qdict)
> static void do_inject_nmi(Monitor *mon, const QDict *qdict)
> {
> CPUState *env;
> - int cpu_index = qdict_get_int(qdict, "cpu-index");
> + int cpu_index = qdict_get_try_int(qdict, "cpu-index", -1);
Note that we interpret "nmi -1" as "nmi" (no argument). Doesn't matter
now. Does matter after the next patch, because that patch makes the
command when the argument doesn't make sense. Except it doesn't for the
non-sensical argument -1. Same problem with every existing use of
qdict_get_try_int() in the monitor. Do we care?
> +
> + if (cpu_index == -1) {
> + for (env = first_cpu; env != NULL; env = env->next_cpu)
> + cpu_interrupt(env, CPU_INTERRUPT_NMI);
> + return;
> + }
>
> for (env = first_cpu; env != NULL; env = env->next_cpu)
> if (env->cpu_index == cpu_index) {
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] nmi: make cpu-index argument optional
2010-12-20 16:58 ` [Qemu-devel] " Markus Armbruster
@ 2010-12-21 6:05 ` Lai Jiangshan
0 siblings, 0 replies; 3+ messages in thread
From: Lai Jiangshan @ 2010-12-21 6:05 UTC (permalink / raw)
To: Markus Armbruster; +Cc: Luiz Capitulino, qemu-devel, aliguori, kvm, Avi Kivity
On 12/21/2010 12:58 AM, Markus Armbruster wrote:
> Lai Jiangshan <laijs@cn.fujitsu.com> writes:
>
>> When the argument "cpu-index" is not given,
>> then "nmi" command will inject NMI on all CPUs.
>>
>> This simulate the nmi button on physical machine.
>>
>> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
>> ---
>> diff --git a/hmp-commands.hx b/hmp-commands.hx
>> index 8de7aa3..d8fe4c0 100644
>> --- a/hmp-commands.hx
>> +++ b/hmp-commands.hx
>> @@ -721,9 +721,9 @@ ETEXI
>> #if defined(TARGET_I386)
>> {
>> .name = "nmi",
>> - .args_type = "cpu-index:i",
>> - .params = "cpu",
>> - .help = "inject an NMI on the given CPU",
>> + .args_type = "cpu-index:i?",
>> + .params = "[cpu]",
>> + .help = "inject an NMI on all CPUs or the given CPU",
>> .mhandler.cmd = do_inject_nmi,
>> },
>> #endif
>> diff --git a/monitor.c b/monitor.c
>> index c16b39d..45a8dc2 100644
>> --- a/monitor.c
>> +++ b/monitor.c
>> @@ -2410,7 +2410,13 @@ static void do_wav_capture(Monitor *mon, const QDict *qdict)
>> static void do_inject_nmi(Monitor *mon, const QDict *qdict)
>> {
>> CPUState *env;
>> - int cpu_index = qdict_get_int(qdict, "cpu-index");
>> + int cpu_index = qdict_get_try_int(qdict, "cpu-index", -1);
>
> Note that we interpret "nmi -1" as "nmi" (no argument). Doesn't matter
> now. Does matter after the next patch, because that patch makes the
> command when the argument doesn't make sense. Except it doesn't for the
> non-sensical argument -1. Same problem with every existing use of
> qdict_get_try_int() in the monitor. Do we care?
>
Good catch!! I will fix it.
Tanks,
Lai.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-12-21 6:04 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-20 6:11 [PATCH 2/3] nmi: make cpu-index argument optional Lai Jiangshan
2010-12-20 16:58 ` [Qemu-devel] " Markus Armbruster
2010-12-21 6:05 ` Lai Jiangshan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox