From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:50952) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUEFW-0006LG-HQ for qemu-devel@nongnu.org; Mon, 22 Apr 2013 06:45:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UUEFV-0002ac-BG for qemu-devel@nongnu.org; Mon, 22 Apr 2013 06:45:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:2579) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUEFV-0002aW-44 for qemu-devel@nongnu.org; Mon, 22 Apr 2013 06:45:29 -0400 Date: Mon, 22 Apr 2013 12:45:06 +0200 From: Igor Mammedov Message-ID: <20130422124506.25464965@nial.usersys.redhat.com> In-Reply-To: <20130422102812.GD3808@redhat.com> References: <1366063976-4909-1-git-send-email-imammedo@redhat.com> <1366063976-4909-9-git-send-email-imammedo@redhat.com> <20130422102812.GD3808@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 08/16] cpu: add helper cpu_exists(), to check if CPU with specified id exists List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: aliguori@us.ibm.com, ehabkost@redhat.com, jan.kiszka@siemens.com, claudio.fontana@huawei.com, qemu-devel@nongnu.org, aderumier@odiso.com, lcapitulino@redhat.com, jfrei@linux.vnet.ibm.com, yang.z.zhang@intel.com, pbonzini@redhat.com, afaerber@suse.de, lig.fnst@cn.fujitsu.com, rth@twiddle.net On Mon, 22 Apr 2013 13:28:12 +0300 "Michael S. Tsirkin" wrote: > On Tue, Apr 16, 2013 at 12:12:48AM +0200, Igor Mammedov wrote: > > ... it should be used only on slow path since it does recursive search > > on /machine QOM tree for objects of TYPE_CPU > > > > Signed-off-by: Igor Mammedov > > Reviewed-by: Paolo Bonzini > > I would prefer qemu_for_each_cpu, that is also useful for ACPI. And do > we need to scan all QOM? This will take a while to repeat if there are > many devices. > How about the below? You can add a wrapper that sets > a bit if CPU exists. qemu_for_each_cpu looks usefull, it could replace a lot of place that do open-coded exactly this operation and hide open-codded access to next_cpu pointer. I can easily change to using it, and take it this patch into this series. > > > commit 4ff1332ff56069574f450bb44819156bd91bd105 > Author: Michael S. Tsirkin > Date: Sun Apr 21 15:44:47 2013 +0300 > > exec: add qemu_for_each_cpu > > Will be used by ACPI table generation. > > Signed-off-by: Michael S. Tsirkin > > diff --git a/exec.c b/exec.c > index fa1e0c3..2b44cbe 100644 > --- a/exec.c > +++ b/exec.c > @@ -265,6 +265,19 @@ CPUState *qemu_get_cpu(int index) > return env ? cpu : NULL; > } > > +void qemu_for_each_cpu( void (*func)( CPUState *c, void *arg), void *arg) > +{ > + CPUArchState *env = first_cpu; > + CPUState *cpu; > + > + while (env) { > + cpu = ENV_GET_CPU(env); > + func(cpu, arg); > + env = env->next_cpu; > + } > +} > + > + > void cpu_exec_init(CPUArchState *env) > { > CPUState *cpu = ENV_GET_CPU(env); > diff --git a/include/qom/cpu.h b/include/qom/cpu.h > index 3664a1b..db857e3 100644 > --- a/include/qom/cpu.h > +++ b/include/qom/cpu.h > @@ -223,6 +223,8 @@ void run_on_cpu(CPUState *cpu, void (*func)(void > *data), void *data); */ > CPUState *qemu_get_cpu(int index); > > +void qemu_for_each_cpu( void (*func)( CPUState *c, void *arg), void *arg); > + > #ifndef CONFIG_USER_ONLY > > typedef void (*CPUInterruptHandler)(CPUState *, int); >