linux/arch/x86/kernel/topology.c
<<
>>
Prefs
   1/*
   2 * Populate sysfs with topology information
   3 *
   4 * Written by: Matthew Dobson, IBM Corporation
   5 * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
   6 *
   7 * Copyright (C) 2002, IBM Corp.
   8 *
   9 * All rights reserved.
  10 *
  11 * This program is free software; you can redistribute it and/or modify
  12 * it under the terms of the GNU General Public License as published by
  13 * the Free Software Foundation; either version 2 of the License, or
  14 * (at your option) any later version.
  15 *
  16 * This program is distributed in the hope that it will be useful, but
  17 * WITHOUT ANY WARRANTY; without even the implied warranty of
  18 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  19 * NON INFRINGEMENT.  See the GNU General Public License for more
  20 * details.
  21 *
  22 * You should have received a copy of the GNU General Public License
  23 * along with this program; if not, write to the Free Software
  24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25 *
  26 * Send feedback to <colpatch@us.ibm.com>
  27 */
  28#include <linux/nodemask.h>
  29#include <linux/mmzone.h>
  30#include <linux/init.h>
  31#include <linux/smp.h>
  32#include <asm/cpu.h>
  33
  34static DEFINE_PER_CPU(struct x86_cpu, cpu_devices);
  35
  36#ifdef CONFIG_HOTPLUG_CPU
  37int __ref arch_register_cpu(int num)
  38{
  39        /*
  40         * CPU0 cannot be offlined due to several
  41         * restrictions and assumptions in kernel. This basically
  42         * doesnt add a control file, one cannot attempt to offline
  43         * BSP.
  44         *
  45         * Also certain PCI quirks require not to enable hotplug control
  46         * for all CPU's.
  47         */
  48        if (num)
  49                per_cpu(cpu_devices, num).cpu.hotpluggable = 1;
  50
  51        return register_cpu(&per_cpu(cpu_devices, num).cpu, num);
  52}
  53EXPORT_SYMBOL(arch_register_cpu);
  54
  55void arch_unregister_cpu(int num)
  56{
  57        unregister_cpu(&per_cpu(cpu_devices, num).cpu);
  58}
  59EXPORT_SYMBOL(arch_unregister_cpu);
  60#else /* CONFIG_HOTPLUG_CPU */
  61
  62static int __init arch_register_cpu(int num)
  63{
  64        return register_cpu(&per_cpu(cpu_devices, num).cpu, num);
  65}
  66#endif /* CONFIG_HOTPLUG_CPU */
  67
  68static int __init topology_init(void)
  69{
  70        int i;
  71
  72#ifdef CONFIG_NUMA
  73        for_each_online_node(i)
  74                register_one_node(i);
  75#endif
  76
  77        for_each_present_cpu(i)
  78                arch_register_cpu(i);
  79
  80        return 0;
  81}
  82subsys_initcall(topology_init);
  83
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.