lkml.org 
[lkml]   [2012]   [Jul]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 2/5] ARM: topology: factorize the update of sibling masks
    Date
    This factorization has also been proposed in another patch 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.pieralisi@arm.com>
    Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
    Reviewed-by: Namhyung Kim <namhyung@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,
    --
    1.7.9.5


    \
     
     \ /
      Last update: 2012-07-09 12:01    [W:0.026 / U:0.520 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site