diff mbox

monitor: Add -a (all) option to info registers

Message ID 20170605004701.31891-1-sjitindarsingh@gmail.com
State New
Headers show

Commit Message

Suraj Jitindar Singh June 5, 2017, 12:47 a.m. UTC
The info registers command in the qemu monitor is used to dump register
values.

Currently this command uses the monitor cpu (which can be set by the
user) as the cpu for whose registers will be dumped. Sometimes it is
useful to see the registers for all cpus and currently this requires
setting the monitor cpu and the re-running the command for each cpu
in the system. I would be nice if there was an easier way to do this.

Add the "-a" option to the info registers command to dump the register
values for all cpus.

Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
---
 hmp-commands-info.hx |  6 +++---
 monitor.c            | 20 +++++++++++++++-----
 2 files changed, 18 insertions(+), 8 deletions(-)

Comments

Dr. David Alan Gilbert June 7, 2017, 7:16 p.m. UTC | #1
* Suraj Jitindar Singh (sjitindarsingh@gmail.com) wrote:
> The info registers command in the qemu monitor is used to dump register
> values.
> 
> Currently this command uses the monitor cpu (which can be set by the
> user) as the cpu for whose registers will be dumped. Sometimes it is
> useful to see the registers for all cpus and currently this requires
> setting the monitor cpu and the re-running the command for each cpu
> in the system. I would be nice if there was an easier way to do this.
> 
> Add the "-a" option to the info registers command to dump the register
> values for all cpus.
> 
> Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>

Hi Suraj,
  That looks pretty good, one minor suggestion below

> ---
>  hmp-commands-info.hx |  6 +++---
>  monitor.c            | 20 +++++++++++++++-----
>  2 files changed, 18 insertions(+), 8 deletions(-)
> 
> diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
> index ae16901..ba98e58 100644
> --- a/hmp-commands-info.hx
> +++ b/hmp-commands-info.hx
> @@ -100,9 +100,9 @@ ETEXI
>  
>      {
>          .name       = "registers",
> -        .args_type  = "",
> -        .params     = "",
> -        .help       = "show the cpu registers",
> +        .args_type  = "cpustate_all:-a",
> +        .params     = "[-a]",
> +        .help       = "show the cpu registers (-a: all - show register info for all cpus)",
>          .cmd        = hmp_info_registers,
>      },
>  
> diff --git a/monitor.c b/monitor.c
> index baa73c9..5875f88 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -1078,13 +1078,23 @@ int monitor_get_cpu_index(void)
>  
>  static void hmp_info_registers(Monitor *mon, const QDict *qdict)
>  {
> -    CPUState *cs = mon_get_cpu();
> +    bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all", false);
> +    CPUState *cs;
>  
> -    if (!cs) {
> -        monitor_printf(mon, "No CPU available\n");
> -        return;
> +    if (all_cpus) {
> +        CPU_FOREACH(cs) {

Could we add a monitor_printf here giving the CPU number ?
It would just make it a little easier when you have big list of CPUs
and each has lots of registers to be able to see which one you're
looking at.


Thanks,

Dave

> +            cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
> +        }
> +    } else {
> +        cs = mon_get_cpu();
> +
> +        if (!cs) {
> +            monitor_printf(mon, "No CPU available\n");
> +            return;
> +        }
> +
> +        cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
>      }
> -    cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
>  }
>  
>  static void hmp_info_jit(Monitor *mon, const QDict *qdict)
> -- 
> 2.9.4

Dave

> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Suraj Jitindar Singh June 8, 2017, 5:38 a.m. UTC | #2
On Wed, 2017-06-07 at 20:16 +0100, Dr. David Alan Gilbert wrote:
> * Suraj Jitindar Singh (sjitindarsingh@gmail.com) wrote:
> > The info registers command in the qemu monitor is used to dump
> > register
> > values.
> > 
> > Currently this command uses the monitor cpu (which can be set by
> > the
> > user) as the cpu for whose registers will be dumped. Sometimes it
> > is
> > useful to see the registers for all cpus and currently this
> > requires
> > setting the monitor cpu and the re-running the command for each cpu
> > in the system. I would be nice if there was an easier way to do
> > this.
> > 
> > Add the "-a" option to the info registers command to dump the
> > register
> > values for all cpus.
> > 
> > Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
> 
> Hi Suraj,
>   That looks pretty good, one minor suggestion below

Thanks, V2 to come :)

> 
> > ---
> >  hmp-commands-info.hx |  6 +++---
> >  monitor.c            | 20 +++++++++++++++-----
> >  2 files changed, 18 insertions(+), 8 deletions(-)
> > 
> > diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
> > index ae16901..ba98e58 100644
> > --- a/hmp-commands-info.hx
> > +++ b/hmp-commands-info.hx
> > @@ -100,9 +100,9 @@ ETEXI
> >  
> >      {
> >          .name       = "registers",
> > -        .args_type  = "",
> > -        .params     = "",
> > -        .help       = "show the cpu registers",
> > +        .args_type  = "cpustate_all:-a",
> > +        .params     = "[-a]",
> > +        .help       = "show the cpu registers (-a: all - show
> > register info for all cpus)",
> >          .cmd        = hmp_info_registers,
> >      },
> >  
> > diff --git a/monitor.c b/monitor.c
> > index baa73c9..5875f88 100644
> > --- a/monitor.c
> > +++ b/monitor.c
> > @@ -1078,13 +1078,23 @@ int monitor_get_cpu_index(void)
> >  
> >  static void hmp_info_registers(Monitor *mon, const QDict *qdict)
> >  {
> > -    CPUState *cs = mon_get_cpu();
> > +    bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all",
> > false);
> > +    CPUState *cs;
> >  
> > -    if (!cs) {
> > -        monitor_printf(mon, "No CPU available\n");
> > -        return;
> > +    if (all_cpus) {
> > +        CPU_FOREACH(cs) {
> 
> Could we add a monitor_printf here giving the CPU number ?
> It would just make it a little easier when you have big list of CPUs
> and each has lots of registers to be able to see which one you're
> looking at.

Good idea, I never noticed because the CPU# is in the powerpc cpu dump
anyway.

I'll add it and send a V2.

> 
> 
> Thanks,
> 
> Dave
> 
> > +            cpu_dump_state(cs, (FILE *)mon, monitor_fprintf,
> > CPU_DUMP_FPU);
> > +        }
> > +    } else {
> > +        cs = mon_get_cpu();
> > +
> > +        if (!cs) {
> > +            monitor_printf(mon, "No CPU available\n");
> > +            return;
> > +        }
> > +
> > +        cpu_dump_state(cs, (FILE *)mon, monitor_fprintf,
> > CPU_DUMP_FPU);
> >      }
> > -    cpu_dump_state(cs, (FILE *)mon, monitor_fprintf,
> > CPU_DUMP_FPU);
> >  }
> >  
> >  static void hmp_info_jit(Monitor *mon, const QDict *qdict)
> > -- 
> > 2.9.4
> 
> Dave
> 
> > 
> 
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff mbox

Patch

diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index ae16901..ba98e58 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -100,9 +100,9 @@  ETEXI
 
     {
         .name       = "registers",
-        .args_type  = "",
-        .params     = "",
-        .help       = "show the cpu registers",
+        .args_type  = "cpustate_all:-a",
+        .params     = "[-a]",
+        .help       = "show the cpu registers (-a: all - show register info for all cpus)",
         .cmd        = hmp_info_registers,
     },
 
diff --git a/monitor.c b/monitor.c
index baa73c9..5875f88 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1078,13 +1078,23 @@  int monitor_get_cpu_index(void)
 
 static void hmp_info_registers(Monitor *mon, const QDict *qdict)
 {
-    CPUState *cs = mon_get_cpu();
+    bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all", false);
+    CPUState *cs;
 
-    if (!cs) {
-        monitor_printf(mon, "No CPU available\n");
-        return;
+    if (all_cpus) {
+        CPU_FOREACH(cs) {
+            cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
+        }
+    } else {
+        cs = mon_get_cpu();
+
+        if (!cs) {
+            monitor_printf(mon, "No CPU available\n");
+            return;
+        }
+
+        cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
     }
-    cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
 }
 
 static void hmp_info_jit(Monitor *mon, const QDict *qdict)