From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41844) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VJMs0-0006Xs-20 for qemu-devel@nongnu.org; Tue, 10 Sep 2013 08:16:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VJMru-00084U-8f for qemu-devel@nongnu.org; Tue, 10 Sep 2013 08:16:35 -0400 Received: from cantor2.suse.de ([195.135.220.15]:36510 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VJMrt-000849-O1 for qemu-devel@nongnu.org; Tue, 10 Sep 2013 08:16:29 -0400 Message-ID: <522F0D99.5050508@suse.de> Date: Tue, 10 Sep 2013 14:16:25 +0200 From: =?ISO-8859-1?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <20130910140926.091ea307@nial.usersys.redhat.com> In-Reply-To: <20130910140926.091ea307@nial.usersys.redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [RFC qom-cpu v2 1/8] apic: remove apic_no from apic_init_common() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Igor Mammedov Cc: Chen Fan , qemu-devel@nongnu.org Am 10.09.2013 14:09, schrieb Igor Mammedov: > On Tue, 10 Sep 2013 17:43:41 +0800 > Chen Fan wrote: >=20 >> the 'apic_no' is increased by one when initialize/create a vCPU each t= ime, >> which causes APICCommonState s->idx always is increased. >> but if we want to re-add a vCPU after removing a vCPU, we need to re-u= se the >> vacant s->idx which the corresponding vCPU had been removed.=20 >> so we could use the unique cpu apic_id instead of the progressive s->i= dx. >> >> Signed-off-by: Chen Fan >> --- >> hw/intc/apic_common.c | 4 +--- >> target-i386/cpu.c | 1 + >> 2 files changed, 2 insertions(+), 3 deletions(-) >> >> diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c >> index a0beb10..5568621 100644 >> --- a/hw/intc/apic_common.c >> +++ b/hw/intc/apic_common.c >> @@ -289,13 +289,11 @@ static int apic_init_common(ICCDevice *dev) >> APICCommonState *s =3D APIC_COMMON(dev); >> APICCommonClass *info; >> static DeviceState *vapic; >> - static int apic_no; >> static bool mmio_registered; >> =20 >> - if (apic_no >=3D MAX_APICS) { >> + if (s->idx >=3D MAX_APICS) { >> return -1; >> } >> - s->idx =3D apic_no++; >> =20 >> info =3D APIC_COMMON_GET_CLASS(s); >> info->init(s); >> diff --git a/target-i386/cpu.c b/target-i386/cpu.c >> index 42c5de0..2b99683 100644 >> --- a/target-i386/cpu.c >> +++ b/target-i386/cpu.c >> @@ -2322,6 +2322,7 @@ static void x86_cpu_apic_create(X86CPU *cpu, Err= or **errp) >> /* TODO: convert to link<> */ >> apic =3D APIC_COMMON(env->apic_state); >> apic->cpu =3D cpu; >> + apic->idx =3D env->cpuid_apic_id; > earlier here we set: > qdev_prop_set_uint8(env->apic_state, "id", env->cpuid_apic_id); > so apic->idx =3D env->cpuid_apic_id is redundant. >=20 > it would be better to search by apic->id and preferably replace O(MAX_A= PIC) scans with > a faster approach since for TCG iqr delivery might be a hot path, dropp= ing MAX_APIC > altogether and using dynamic present APICs list. Independent of that, the recent removal of X86_CPU() cast from x86_env_get_cpu() should allow us to finally tackle the TODO above, moving apic_state field from CPUX86State to X86CPU. Andreas >=20 >> } >> =20 >> static void x86_cpu_apic_realize(X86CPU *cpu, Error **errp) >=20 --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg