From mboxrd@z Thu Jan 1 00:00:00 1970 From: namhyung@kernel.org (Namhyung Kim) Date: Thu, 21 Jun 2012 09:01:09 +0900 Subject: [PATCH v3 2/5] ARM: topology: factorize the update of sibling masks In-Reply-To: <1340205562-7653-3-git-send-email-vincent.guittot@linaro.org> (Vincent Guittot's message of "Wed, 20 Jun 2012 17:19:19 +0200") References: <1340205562-7653-1-git-send-email-vincent.guittot@linaro.org> <1340205562-7653-3-git-send-email-vincent.guittot@linaro.org> Message-ID: <87txy5fs8q.fsf@sejong.aot.lge.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wed, 20 Jun 2012 17:19:19 +0200, Vincent Guittot wrote: > This factorization has also been proposed in another patchset that has not been > merged yet: > http://lists.infradead.org/pipermail/linux-arm-kernel/2012-January/080873.html > So, this patch could be dropped depending of the state of the other one. > > Signed-off-by: Lorenzo Pieralisi > Signed-off-by: Vincent Guittot Reviewed-by: Namhyung Kim > --- > arch/arm/kernel/topology.c | 48 +++++++++++++++++++++++++------------------- > 1 file changed, 27 insertions(+), 21 deletions(-) > > diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c > index 51f23b3..eb5fc81 100644 > --- a/arch/arm/kernel/topology.c > +++ b/arch/arm/kernel/topology.c > @@ -82,6 +82,32 @@ const struct cpumask *cpu_coregroup_mask(int cpu) > return &cpu_topology[cpu].core_sibling; > } > > +void update_siblings_masks(unsigned int cpuid) > +{ > + struct cputopo_arm *cpu_topo, *cpuid_topo = &cpu_topology[cpuid]; > + int cpu; > + > + /* update core and thread sibling masks */ > + for_each_possible_cpu(cpu) { > + cpu_topo = &cpu_topology[cpu]; > + > + if (cpuid_topo->socket_id != cpu_topo->socket_id) > + continue; > + > + cpumask_set_cpu(cpuid, &cpu_topo->core_sibling); > + if (cpu != cpuid) > + cpumask_set_cpu(cpu, &cpuid_topo->core_sibling); > + > + if (cpuid_topo->core_id != cpu_topo->core_id) > + continue; > + > + cpumask_set_cpu(cpuid, &cpu_topo->thread_sibling); > + if (cpu != cpuid) > + cpumask_set_cpu(cpu, &cpuid_topo->thread_sibling); > + } > + smp_wmb(); > +} > + > /* > * store_cpu_topology is called at boot when only one cpu is running > * and with the mutex cpu_hotplug.lock locked, when several cpus have booted, > @@ -91,7 +117,6 @@ void store_cpu_topology(unsigned int cpuid) > { > struct cputopo_arm *cpuid_topo = &cpu_topology[cpuid]; > unsigned int mpidr; > - unsigned int cpu; > > /* If the cpu topology has been already set, just return */ > if (cpuid_topo->core_id != -1) > @@ -133,26 +158,7 @@ void store_cpu_topology(unsigned int cpuid) > cpuid_topo->socket_id = -1; > } > > - /* update core and thread sibling masks */ > - for_each_possible_cpu(cpu) { > - struct cputopo_arm *cpu_topo = &cpu_topology[cpu]; > - > - if (cpuid_topo->socket_id == cpu_topo->socket_id) { > - cpumask_set_cpu(cpuid, &cpu_topo->core_sibling); > - if (cpu != cpuid) > - cpumask_set_cpu(cpu, > - &cpuid_topo->core_sibling); > - > - if (cpuid_topo->core_id == cpu_topo->core_id) { > - cpumask_set_cpu(cpuid, > - &cpu_topo->thread_sibling); > - if (cpu != cpuid) > - cpumask_set_cpu(cpu, > - &cpuid_topo->thread_sibling); > - } > - } > - } > - smp_wmb(); > + update_siblings_masks(cpuid); > > printk(KERN_INFO "CPU%u: thread %d, cpu %d, socket %d, mpidr %x\n", > cpuid, cpu_topology[cpuid].thread_id,