From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40331) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bwRwh-0002nN-Ix for qemu-devel@nongnu.org; Tue, 18 Oct 2016 06:48:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bwRwg-0003Ip-Lo for qemu-devel@nongnu.org; Tue, 18 Oct 2016 06:48:35 -0400 Date: Tue, 18 Oct 2016 12:48:16 +0200 From: Igor Mammedov Message-ID: <20161018124816.1b88dc80@nial.brq.redhat.com> In-Reply-To: <20161017192022.GA3275@thinpad.lan.raisama.net> References: <1476485569-6744-1-git-send-email-lvivier@redhat.com> <1476485569-6744-3-git-send-email-lvivier@redhat.com> <20161017192022.GA3275@thinpad.lan.raisama.net> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 2/3] exec: rename cpu_exec_init() as cpu_exec_realizefn() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eduardo Habkost Cc: Laurent Vivier , Bharata B Rao , David Gibson , Peter Maydell , Paolo Bonzini , Alexander Graf , Matthew Rosato , qemu-devel@nongnu.org, Richard Henderson , qemu-arm@nongnu.org, Greg Ungerer , Guan Xuetao , Jia Liu , Markus Armbruster , Artyom Tarasenko , "Edgar E . Iglesias" , Michael Walle , Chen Gang , Aurelien Jarno , Anthony Green , qemu-ppc@nongnu.org, Bastian Koppelmann , Greg Kurz , Max Filippov , drjones@redhat.com On Mon, 17 Oct 2016 17:20:22 -0200 Eduardo Habkost wrote: > On Sat, Oct 15, 2016 at 12:52:48AM +0200, Laurent Vivier wrote: > > Modify all CPUs to call it from XXX_cpu_realizefn() function. > > > > Remove all the cannot_destroy_with_object_finalize_yet as > > unsafe references have been moved to cpu_exec_realizefn(). > > (tested with QOM command provided by commit 4c315c27) > > > > for arm: > > > > Setting of cpu->mp_affinity is moved from arm_cpu_initfn() > > to arm_cpu_realizefn() as setting of cpu_index is now done > > in cpu_exec_realizefn(). > > > > Signed-off-by: Laurent Vivier > [...] > > diff --git a/target-arm/cpu.c b/target-arm/cpu.c > > index 1b9540e..364a45d 100644 > > --- a/target-arm/cpu.c > > +++ b/target-arm/cpu.c > > @@ -441,22 +441,11 @@ static void arm_cpu_initfn(Object *obj) > > CPUState *cs = CPU(obj); > > ARMCPU *cpu = ARM_CPU(obj); > > static bool inited; > > - uint32_t Aff1, Aff0; > > > > cs->env_ptr = &cpu->env; > > - cpu_exec_init(cs, &error_abort); > > cpu->cp_regs = g_hash_table_new_full(g_int_hash, g_int_equal, > > g_free, g_free); > > > > - /* This cpu-id-to-MPIDR affinity is used only for TCG; KVM will override it. > > - * We don't support setting cluster ID ([16..23]) (known as Aff2 > > - * in later ARM ARM versions), or any of the higher affinity level fields, > > - * so these bits always RAZ. > > - */ > > - Aff1 = cs->cpu_index / ARM_CPUS_PER_CLUSTER; > > - Aff0 = cs->cpu_index % ARM_CPUS_PER_CLUSTER; > > - cpu->mp_affinity = (Aff1 << ARM_AFF1_SHIFT) | Aff0; > > - > > #ifndef CONFIG_USER_ONLY > > /* Our inbound IRQ and FIQ lines */ > > if (kvm_enabled()) { > [...] > > @@ -631,6 +628,15 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp) > > set_feature(env, ARM_FEATURE_THUMB_DSP); > > } > > > > + /* This cpu-id-to-MPIDR affinity is used only for TCG; KVM will override it. > > + * We don't support setting cluster ID ([16..23]) (known as Aff2 > > + * in later ARM ARM versions), or any of the higher affinity level fields, > > + * so these bits always RAZ. > > + */ > > + Aff1 = cs->cpu_index / ARM_CPUS_PER_CLUSTER; > > + Aff0 = cs->cpu_index % ARM_CPUS_PER_CLUSTER; > > + cpu->mp_affinity = (Aff1 << ARM_AFF1_SHIFT) | Aff0; > > + > > This will override any value set in the "mp-affinity" property, > The mp-affinity property can be set by the user in the > command-line, and it is also set by machvirt_init() in > hw/arm/virt.c. > > Considering that each CPU is supposed to have a different value, > I doubt there are existing use cases for mp-affinity being set > directly by the user. > > I suggest having a "cluster-size" property, instead of > "mp-affinity". This way the mp_affinity field can be calculated > on realize, based on the configured cluster-size. CCing Drew as he knows more about MPIDR stuff more. > > > if (cpu->reset_hivecs) { > > cpu->reset_sctlr |= (1 << 13); > > } > [...] >