linux/arch/sh/kernel/topology.c
<<
>>
Prefs
   1/*
   2 * arch/sh/kernel/topology.c
   3 *
   4 *  Copyright (C) 2007  Paul Mundt
   5 *
   6 * This file is subject to the terms and conditions of the GNU General Public
   7 * License.  See the file "COPYING" in the main directory of this archive
   8 * for more details.
   9 */
  10#include <linux/cpu.h>
  11#include <linux/cpumask.h>
  12#include <linux/init.h>
  13#include <linux/percpu.h>
  14#include <linux/topology.h>
  15#include <linux/node.h>
  16#include <linux/nodemask.h>
  17#include <linux/export.h>
  18
  19static DEFINE_PER_CPU(struct cpu, cpu_devices);
  20
  21cpumask_t cpu_core_map[NR_CPUS];
  22EXPORT_SYMBOL(cpu_core_map);
  23
  24static cpumask_t cpu_coregroup_map(int cpu)
  25{
  26        /*
  27         * Presently all SH-X3 SMP cores are multi-cores, so just keep it
  28         * simple until we have a method for determining topology..
  29         */
  30        return *cpu_possible_mask;
  31}
  32
  33const struct cpumask *cpu_coregroup_mask(int cpu)
  34{
  35        return &cpu_core_map[cpu];
  36}
  37
  38int arch_update_cpu_topology(void)
  39{
  40        unsigned int cpu;
  41
  42        for_each_possible_cpu(cpu)
  43                cpu_core_map[cpu] = cpu_coregroup_map(cpu);
  44
  45        return 0;
  46}
  47
  48static int __init topology_init(void)
  49{
  50        int i, ret;
  51
  52#ifdef CONFIG_NEED_MULTIPLE_NODES
  53        for_each_online_node(i)
  54                register_one_node(i);
  55#endif
  56
  57        for_each_present_cpu(i) {
  58                struct cpu *c = &per_cpu(cpu_devices, i);
  59
  60                c->hotpluggable = 1;
  61
  62                ret = register_cpu(c, i);
  63                if (unlikely(ret))
  64                        printk(KERN_WARNING "%s: register_cpu %d failed (%d)\n",
  65                               __func__, i, ret);
  66        }
  67
  68#if defined(CONFIG_NUMA) && !defined(CONFIG_SMP)
  69        /*
  70         * In the UP case, make sure the CPU association is still
  71         * registered under each node. Without this, sysfs fails
  72         * to make the connection between nodes other than node0
  73         * and cpu0.
  74         */
  75        for_each_online_node(i)
  76                if (i != numa_node_id())
  77                        register_cpu_under_node(raw_smp_processor_id(), i);
  78#endif
  79
  80        return 0;
  81}
  82subsys_initcall(topology_init);
  83