Re: [Qemu-devel] [PATCH 2/3] nmi: make cpu-index argument optional

2010-12-20 Thread Markus Armbruster
Lai Jiangshan la...@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 la...@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) {



Re: [Qemu-devel] [PATCH 2/3] nmi: make cpu-index argument optional

2010-12-20 Thread Lai Jiangshan
On 12/21/2010 12:58 AM, Markus Armbruster wrote:
 Lai Jiangshan la...@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 la...@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.