diff mbox

[v3,4/7] monitor: use cc->get_arch_id as the cpu index

Message ID 9f7bba73a1af52e5263660dccb0b2f5c0f998fa0.1421214155.git.zhugh.fnst@cn.fujitsu.com
State New
Headers show

Commit Message

Zhu Guihua Jan. 14, 2015, 7:27 a.m. UTC
From: Gu Zheng <guz.fnst@cn.fujitsu.com>

Use cc->get_arch_id as the cpu index to avoid the cpu index duplicated
issue in the QMP/HMP command output.

Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
---
 cpus.c    | 4 +++-
 monitor.c | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

Comments

Igor Mammedov Jan. 29, 2015, 2:12 p.m. UTC | #1
On Wed, 14 Jan 2015 15:27:27 +0800
Zhu Guihua <zhugh.fnst@cn.fujitsu.com> wrote:

> From: Gu Zheng <guz.fnst@cn.fujitsu.com>
> 
> Use cc->get_arch_id as the cpu index to avoid the cpu index duplicated
> issue in the QMP/HMP command output.
> 
> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
> ---
>  cpus.c    | 4 +++-
>  monitor.c | 4 +++-
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/cpus.c b/cpus.c
> index 2edb5cd..d5e35c0 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -1420,6 +1420,7 @@ CpuInfoList *qmp_query_cpus(Error **errp)
>  
>      CPU_FOREACH(cpu) {
>          CpuInfoList *info;
> +        CPUClass *cc;
>  #if defined(TARGET_I386)
>          X86CPU *x86_cpu = X86_CPU(cpu);
>          CPUX86State *env = &x86_cpu->env;
> @@ -1437,11 +1438,12 @@ CpuInfoList *qmp_query_cpus(Error **errp)
>          CPUTriCoreState *env = &tricore_cpu->env;
>  #endif
>  
> +        cc = CPU_GET_CLASS(cpu);
>          cpu_synchronize_state(cpu);
>  
>          info = g_malloc0(sizeof(*info));
>          info->value = g_malloc0(sizeof(*info->value));
> -        info->value->CPU = cpu->cpu_index;
> +        info->value->CPU = cc->get_arch_id(cpu);
I'm not sure what impact sparse ID numbering would be on libvirt
CCing libvirt folks so they could check it.

>          info->value->current = (cpu == first_cpu);
>          info->value->halted = cpu->halted;
>          info->value->thread_id = cpu->thread_id;
> diff --git a/monitor.c b/monitor.c
> index 1808e41..2283461 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -1024,7 +1024,9 @@ static CPUArchState *mon_get_cpu(void)
>  int monitor_get_cpu_index(void)
>  {
>      CPUState *cpu = ENV_GET_CPU(mon_get_cpu());
> -    return cpu->cpu_index;
> +    CPUClass *cc = CPU_GET_CLASS(cpu);
> +
> +    return cc->get_arch_id(cpu);
>  }
>  
>  static void do_info_registers(Monitor *mon, const QDict *qdict)
Peter Krempa Jan. 29, 2015, 2:21 p.m. UTC | #2
On Thu, Jan 29, 2015 at 15:12:49 +0100, Igor Mammedov wrote:
> On Wed, 14 Jan 2015 15:27:27 +0800
> Zhu Guihua <zhugh.fnst@cn.fujitsu.com> wrote:
> 
> > From: Gu Zheng <guz.fnst@cn.fujitsu.com>
> > 
> > Use cc->get_arch_id as the cpu index to avoid the cpu index duplicated
> > issue in the QMP/HMP command output.
> > 
> > Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
> > Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
> > ---
> >  cpus.c    | 4 +++-
> >  monitor.c | 4 +++-
> >  2 files changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/cpus.c b/cpus.c
> > index 2edb5cd..d5e35c0 100644
> > --- a/cpus.c
> > +++ b/cpus.c
> > @@ -1420,6 +1420,7 @@ CpuInfoList *qmp_query_cpus(Error **errp)
> >  
> >      CPU_FOREACH(cpu) {
> >          CpuInfoList *info;
> > +        CPUClass *cc;
> >  #if defined(TARGET_I386)
> >          X86CPU *x86_cpu = X86_CPU(cpu);
> >          CPUX86State *env = &x86_cpu->env;
> > @@ -1437,11 +1438,12 @@ CpuInfoList *qmp_query_cpus(Error **errp)
> >          CPUTriCoreState *env = &tricore_cpu->env;
> >  #endif
> >  
> > +        cc = CPU_GET_CLASS(cpu);
> >          cpu_synchronize_state(cpu);
> >  
> >          info = g_malloc0(sizeof(*info));
> >          info->value = g_malloc0(sizeof(*info->value));
> > -        info->value->CPU = cpu->cpu_index;
> > +        info->value->CPU = cc->get_arch_id(cpu);
> I'm not sure what impact sparse ID numbering would be on libvirt
> CCing libvirt folks so they could check it.

Libvirt is currently using only the "thread_id" field of the data
returned by the query-cpus QMP command.

One place where we currently treat the cpu ID space as continuous is in
the CPU hotplug and unplug API, but the unplug part is currently
obsolete as it uses only the very old HMP command.

At any rate, changing the "CPU" field shouldn't change anything that
libvirt relies on.

Peter
diff mbox

Patch

diff --git a/cpus.c b/cpus.c
index 2edb5cd..d5e35c0 100644
--- a/cpus.c
+++ b/cpus.c
@@ -1420,6 +1420,7 @@  CpuInfoList *qmp_query_cpus(Error **errp)
 
     CPU_FOREACH(cpu) {
         CpuInfoList *info;
+        CPUClass *cc;
 #if defined(TARGET_I386)
         X86CPU *x86_cpu = X86_CPU(cpu);
         CPUX86State *env = &x86_cpu->env;
@@ -1437,11 +1438,12 @@  CpuInfoList *qmp_query_cpus(Error **errp)
         CPUTriCoreState *env = &tricore_cpu->env;
 #endif
 
+        cc = CPU_GET_CLASS(cpu);
         cpu_synchronize_state(cpu);
 
         info = g_malloc0(sizeof(*info));
         info->value = g_malloc0(sizeof(*info->value));
-        info->value->CPU = cpu->cpu_index;
+        info->value->CPU = cc->get_arch_id(cpu);
         info->value->current = (cpu == first_cpu);
         info->value->halted = cpu->halted;
         info->value->thread_id = cpu->thread_id;
diff --git a/monitor.c b/monitor.c
index 1808e41..2283461 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1024,7 +1024,9 @@  static CPUArchState *mon_get_cpu(void)
 int monitor_get_cpu_index(void)
 {
     CPUState *cpu = ENV_GET_CPU(mon_get_cpu());
-    return cpu->cpu_index;
+    CPUClass *cc = CPU_GET_CLASS(cpu);
+
+    return cc->get_arch_id(cpu);
 }
 
 static void do_info_registers(Monitor *mon, const QDict *qdict)