Re: [Qemu-devel] [PATCH] cpu: skip unpluged cpu when querying cpus

2018-04-13 Thread xuyandong
Yes, we should add it at qmp_query_cpus_fast() .
In this case, qmp_query_cpus() may kick a vcpu thread that has
stopped causing the qemu process to exit,  qmp_query_cpus_fast() does not 
interrupt vCPU threads, but may return invalid vCPU information.

> -Original Message-
> From: Igor Mammedov [mailto:imamm...@redhat.com]
> Sent: Wednesday, April 11, 2018 7:46 PM
> To: linzhecheng <linzhech...@huawei.com>
> Cc: qemu-devel@nongnu.org; xuyandong <xuyando...@huawei.com>;
> pbonz...@redhat.com; wangxin (U) <wangxinxin.w...@huawei.com>;
> r...@twiddle.net; crosthwaite.pe...@gmail.com
> Subject: Re: [Qemu-devel] [PATCH] cpu: skip unpluged cpu when querying
> cpus
> 
> On Wed, 11 Apr 2018 19:16:02 +0800
> linzhecheng <linzhech...@huawei.com> wrote:
> 
> > From: XuYandong <xuyando...@huawei.com>
> >
> > After vcpu1 thread exiting, vcpu0 thread (received notification) is
> > still waiting for holding qemu_global_mutex in cpu_remove_sync, at this
> moment, vcpu1 is still in global cpus list.
> > If main thread grab qemu_global_mutex in order to handle qmp command
> > "info cpus", qmp_query_cpus visit unpluged vcpu1 will lead qemu process
> to exit.
> Add here exact error or better stack trace in case it crashes.
> 
> 
> > Signed-off-by: XuYandong <xuyando...@huawei.com>
> > ---
> >  cpus.c | 5 +
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/cpus.c b/cpus.c
> > index 2cb0af9..9b3a6c4 100644
> > --- a/cpus.c
> > +++ b/cpus.c
> > @@ -2018,6 +2018,11 @@ CpuInfoList *qmp_query_cpus(Error **errp)
> >
> >  CPU_FOREACH(cpu) {
> >  CpuInfoList *info;
> > +
> > +if (cpu->unplug) {
> > +continue;
> > +}
> Shouldn't be it done for qmp_query_cpus_fast() as well?
> 
> > +
> >  #if defined(TARGET_I386)
> >  X86CPU *x86_cpu = X86_CPU(cpu);
> >  CPUX86State *env = _cpu->env;



Re: [Qemu-devel] [PATCH] cpu: skip unpluged cpu when querying cpus

2018-04-11 Thread Igor Mammedov
On Wed, 11 Apr 2018 19:16:02 +0800
linzhecheng  wrote:

> From: XuYandong 
> 
> After vcpu1 thread exiting, vcpu0 thread (received notification) is still 
> waiting for
> holding qemu_global_mutex in cpu_remove_sync, at this moment, vcpu1 is still 
> in global cpus list.
> If main thread grab qemu_global_mutex in order to handle qmp command "info 
> cpus",
> qmp_query_cpus visit unpluged vcpu1 will lead qemu process to exit.
Add here exact error or better stack trace in case it crashes.

 
> Signed-off-by: XuYandong 
> ---
>  cpus.c | 5 +
>  1 file changed, 5 insertions(+)
> 
> diff --git a/cpus.c b/cpus.c
> index 2cb0af9..9b3a6c4 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -2018,6 +2018,11 @@ CpuInfoList *qmp_query_cpus(Error **errp)
>  
>  CPU_FOREACH(cpu) {
>  CpuInfoList *info;
> +
> +if (cpu->unplug) {
> +continue;
> +}
Shouldn't be it done for qmp_query_cpus_fast() as well?

> +
>  #if defined(TARGET_I386)
>  X86CPU *x86_cpu = X86_CPU(cpu);
>  CPUX86State *env = _cpu->env;