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 <lorenzo.pieral...@arm.com> > Signed-off-by: Vincent Guittot <vincent.guit...@linaro.org>
Reviewed-by: Namhyung Kim <namhy...@kernel.org> > --- > 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, _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev