nmi: make cpu-index argument optional
PATCH RESEND v6 2/4 nmi: make cpu-index argument optional
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.
Note: it will allow non-argument "nmi" command and
change the human monitor behavior.
Thanks to Markus Armbruster for correcting the logic detecting "cpu-index" is given or not.
Signed-off-by Lai Jiangshan <[email protected]>
---
hmp-commands.hx +4 -3
@@ -721,9 +721,10 @@ 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 if no argument is given, " + "otherwise inject it on the specified CPU", .mhandler.cmd = do_inject_nmi, }, #endif
monitor.c +8 -1
@@ -2545,8 +2545,15 @@ 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; +if (!qdict_haskey (qdict,"cpu-index" )) { +for (env = first_cpu; env !=NULL ; env = env->next_cpu) +cpu_interrupt (env,CPU_INTERRUPT_NMI ); +return ; + } + + cpu_index =qdict_get_int (qdict,"cpu-index" );for (env = first_cpu; env !=NULL ; env = env->next_cpu)if (env->cpu_index == cpu_index) {if (kvm_enabled ())