Patchwork [1/2] hmp: fix info cpus for sparc targets

login
register
mail settings
Submitter Aurelien Jarno
Date Oct. 16, 2012, 11:28 p.m.
Message ID <1350430115-23724-1-git-send-email-aurelien@aurel32.net>
Download mbox | patch
Permalink /patch/191913/
State New
Headers show

Comments

Aurelien Jarno - Oct. 16, 2012, 11:28 p.m.
On sparc targets, info cpus returns this kind of output:

| info cpus
| * CPU #0: pc=0x0000000000424d18pc=0x0000000000424d18npc=0x0000000000424d1c thread_id=19460

pc is printed twice, there is no space between pc, pc and npc. As npc
implies pc, don't set has_pc on sparc, and add a space between pc and
npc.

Cc: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Cc: Blue Swirl <blauwirbel@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
---
 cpus.c |    2 --
 hmp.c  |    2 +-
 2 files changed, 1 insertion(+), 3 deletions(-)
Luiz Capitulino - Oct. 17, 2012, 2:01 a.m.
On Wed, 17 Oct 2012 01:28:34 +0200
Aurelien Jarno <aurelien@aurel32.net> wrote:

> On sparc targets, info cpus returns this kind of output:
> 
> | info cpus
> | * CPU #0: pc=0x0000000000424d18pc=0x0000000000424d18npc=0x0000000000424d1c thread_id=19460
> 
> pc is printed twice, there is no space between pc, pc and npc. As npc
> implies pc, don't set has_pc on sparc, and add a space between pc and
> npc.
> 
> Cc: Luiz Capitulino <lcapitulino@redhat.com>
> Cc: Markus Armbruster <armbru@redhat.com>
> Cc: Blue Swirl <blauwirbel@gmail.com>
> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
> ---
>  cpus.c |    2 --
>  hmp.c  |    2 +-
>  2 files changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/cpus.c b/cpus.c
> index 750a76f..cbc8556 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -1216,8 +1216,6 @@ CpuInfoList *qmp_query_cpus(Error **errp)
>          info->value->has_nip = true;
>          info->value->nip = env->nip;
>  #elif defined(TARGET_SPARC)
> -        info->value->has_pc = true;
> -        info->value->pc = env->pc;
>          info->value->has_npc = true;
>          info->value->npc = env->npc;
>  #elif defined(TARGET_MIPS)
> diff --git a/hmp.c b/hmp.c
> index 70bdec2..64b6ab5 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -242,7 +242,7 @@ void hmp_info_cpus(Monitor *mon)
>              monitor_printf(mon, "nip=0x%016" PRIx64, cpu->value->nip);
>          }
>          if (cpu->value->has_npc) {
> -            monitor_printf(mon, "pc=0x%016" PRIx64, cpu->value->pc);
> +            monitor_printf(mon, "pc=0x%016 " PRIx64, cpu->value->pc);

This patch changes qmp_query_cpus() to never set pc, so why do you print it?

>              monitor_printf(mon, "npc=0x%016" PRIx64, cpu->value->npc);
>          }
>          if (cpu->value->has_PC) {
Aurelien Jarno - Oct. 17, 2012, 6:06 a.m.
On Tue, Oct 16, 2012 at 11:01:45PM -0300, Luiz Capitulino wrote:
> On Wed, 17 Oct 2012 01:28:34 +0200
> Aurelien Jarno <aurelien@aurel32.net> wrote:
> 
> > On sparc targets, info cpus returns this kind of output:
> > 
> > | info cpus
> > | * CPU #0: pc=0x0000000000424d18pc=0x0000000000424d18npc=0x0000000000424d1c thread_id=19460
> > 
> > pc is printed twice, there is no space between pc, pc and npc. As npc
> > implies pc, don't set has_pc on sparc, and add a space between pc and
> > npc.
> > 
> > Cc: Luiz Capitulino <lcapitulino@redhat.com>
> > Cc: Markus Armbruster <armbru@redhat.com>
> > Cc: Blue Swirl <blauwirbel@gmail.com>
> > Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
> > ---
> >  cpus.c |    2 --
> >  hmp.c  |    2 +-
> >  2 files changed, 1 insertion(+), 3 deletions(-)
> > 
> > diff --git a/cpus.c b/cpus.c
> > index 750a76f..cbc8556 100644
> > --- a/cpus.c
> > +++ b/cpus.c
> > @@ -1216,8 +1216,6 @@ CpuInfoList *qmp_query_cpus(Error **errp)
> >          info->value->has_nip = true;
> >          info->value->nip = env->nip;
> >  #elif defined(TARGET_SPARC)
> > -        info->value->has_pc = true;
> > -        info->value->pc = env->pc;
> >          info->value->has_npc = true;
> >          info->value->npc = env->npc;
> >  #elif defined(TARGET_MIPS)
> > diff --git a/hmp.c b/hmp.c
> > index 70bdec2..64b6ab5 100644
> > --- a/hmp.c
> > +++ b/hmp.c
> > @@ -242,7 +242,7 @@ void hmp_info_cpus(Monitor *mon)
> >              monitor_printf(mon, "nip=0x%016" PRIx64, cpu->value->nip);
> >          }
> >          if (cpu->value->has_npc) {
> > -            monitor_printf(mon, "pc=0x%016" PRIx64, cpu->value->pc);
> > +            monitor_printf(mon, "pc=0x%016 " PRIx64, cpu->value->pc);
> 
> This patch changes qmp_query_cpus() to never set pc, so why do you print it?

Well the print part of the code isn't change beside adding a space at
the end. With the current code, has_npc implies has_pc, that's why I
have removed the latter from qmp_query_cpus() in the sparc case.

If you prefer to change this behavior and not have has_npc implying
has_pc, I can send another patch.

> >              monitor_printf(mon, "npc=0x%016" PRIx64, cpu->value->npc);
> >          }
> >          if (cpu->value->has_PC) {
> 
>
Luiz Capitulino - Oct. 17, 2012, 12:54 p.m.
On Wed, 17 Oct 2012 08:06:13 +0200
Aurelien Jarno <aurelien@aurel32.net> wrote:

> On Tue, Oct 16, 2012 at 11:01:45PM -0300, Luiz Capitulino wrote:
> > On Wed, 17 Oct 2012 01:28:34 +0200
> > Aurelien Jarno <aurelien@aurel32.net> wrote:
> > 
> > > On sparc targets, info cpus returns this kind of output:
> > > 
> > > | info cpus
> > > | * CPU #0: pc=0x0000000000424d18pc=0x0000000000424d18npc=0x0000000000424d1c thread_id=19460
> > > 
> > > pc is printed twice, there is no space between pc, pc and npc. As npc
> > > implies pc, don't set has_pc on sparc, and add a space between pc and
> > > npc.
> > > 
> > > Cc: Luiz Capitulino <lcapitulino@redhat.com>
> > > Cc: Markus Armbruster <armbru@redhat.com>
> > > Cc: Blue Swirl <blauwirbel@gmail.com>
> > > Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
> > > ---
> > >  cpus.c |    2 --
> > >  hmp.c  |    2 +-
> > >  2 files changed, 1 insertion(+), 3 deletions(-)
> > > 
> > > diff --git a/cpus.c b/cpus.c
> > > index 750a76f..cbc8556 100644
> > > --- a/cpus.c
> > > +++ b/cpus.c
> > > @@ -1216,8 +1216,6 @@ CpuInfoList *qmp_query_cpus(Error **errp)
> > >          info->value->has_nip = true;
> > >          info->value->nip = env->nip;
> > >  #elif defined(TARGET_SPARC)
> > > -        info->value->has_pc = true;
> > > -        info->value->pc = env->pc;
> > >          info->value->has_npc = true;
> > >          info->value->npc = env->npc;
> > >  #elif defined(TARGET_MIPS)
> > > diff --git a/hmp.c b/hmp.c
> > > index 70bdec2..64b6ab5 100644
> > > --- a/hmp.c
> > > +++ b/hmp.c
> > > @@ -242,7 +242,7 @@ void hmp_info_cpus(Monitor *mon)
> > >              monitor_printf(mon, "nip=0x%016" PRIx64, cpu->value->nip);
> > >          }
> > >          if (cpu->value->has_npc) {
> > > -            monitor_printf(mon, "pc=0x%016" PRIx64, cpu->value->pc);
> > > +            monitor_printf(mon, "pc=0x%016 " PRIx64, cpu->value->pc);
> > 
> > This patch changes qmp_query_cpus() to never set pc, so why do you print it?
> 
> Well the print part of the code isn't change beside adding a space at
> the end. With the current code, has_npc implies has_pc, that's why I
> have removed the latter from qmp_query_cpus() in the sparc case.

My point is that you dropped the pc assignment along:

-        info->value->pc = env->pc;

So, value->pc will be zeroed.

> If you prefer to change this behavior and not have has_npc implying
> has_pc, I can send another patch.

If pc is going to contain relevant info, then we have to set has_pc even
if has_npc implies it. If your point is that pc is irrelevant, then we have
to set has_pc to false and drop its printing from HMP.

> 
> > >              monitor_printf(mon, "npc=0x%016" PRIx64, cpu->value->npc);
> > >          }
> > >          if (cpu->value->has_PC) {
> > 
> > 
>

Patch

diff --git a/cpus.c b/cpus.c
index 750a76f..cbc8556 100644
--- a/cpus.c
+++ b/cpus.c
@@ -1216,8 +1216,6 @@  CpuInfoList *qmp_query_cpus(Error **errp)
         info->value->has_nip = true;
         info->value->nip = env->nip;
 #elif defined(TARGET_SPARC)
-        info->value->has_pc = true;
-        info->value->pc = env->pc;
         info->value->has_npc = true;
         info->value->npc = env->npc;
 #elif defined(TARGET_MIPS)
diff --git a/hmp.c b/hmp.c
index 70bdec2..64b6ab5 100644
--- a/hmp.c
+++ b/hmp.c
@@ -242,7 +242,7 @@  void hmp_info_cpus(Monitor *mon)
             monitor_printf(mon, "nip=0x%016" PRIx64, cpu->value->nip);
         }
         if (cpu->value->has_npc) {
-            monitor_printf(mon, "pc=0x%016" PRIx64, cpu->value->pc);
+            monitor_printf(mon, "pc=0x%016 " PRIx64, cpu->value->pc);
             monitor_printf(mon, "npc=0x%016" PRIx64, cpu->value->npc);
         }
         if (cpu->value->has_PC) {