cregit-Linux how code gets into the kernel

Release 4.14 arch/x86/kernel/topology.c

Directory: arch/x86/kernel
/*
 * Populate sysfs with topology information
 *
 * Written by: Matthew Dobson, IBM Corporation
 * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
 *
 * Copyright (C) 2002, IBM Corp.
 *
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
 * NON INFRINGEMENT.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * Send feedback to <colpatch@us.ibm.com>
 */
#include <linux/nodemask.h>
#include <linux/export.h>
#include <linux/mmzone.h>
#include <linux/init.h>
#include <linux/smp.h>
#include <linux/irq.h>
#include <asm/cpu.h>

static DEFINE_PER_CPU(struct x86_cpu, cpu_devices);

#ifdef CONFIG_HOTPLUG_CPU

#ifdef CONFIG_BOOTPARAM_HOTPLUG_CPU0

static int cpu0_hotpluggable = 1;
#else

static int cpu0_hotpluggable;

static int __init enable_cpu0_hotplug(char *str) { cpu0_hotpluggable = 1; return 1; }

Contributors

PersonTokensPropCommitsCommitProp
Fenghua Yu18100.00%1100.00%
Total18100.00%1100.00%

__setup("cpu0_hotplug", enable_cpu0_hotplug); #endif #ifdef CONFIG_DEBUG_HOTPLUG_CPU0 /* * This function offlines a CPU as early as possible and allows userspace to * boot up without the CPU. The CPU can be onlined back by user after boot. * * This is only called for debugging CPU offline/online feature. */
int _debug_hotplug_cpu(int cpu, int action) { struct device *dev = get_cpu_device(cpu); int ret; if (!cpu_is_hotpluggable(cpu)) return -EINVAL; lock_device_hotplug(); switch (action) { case 0: ret = cpu_down(cpu); if (!ret) { pr_info("CPU %u is now offline\n", cpu); dev->offline = true; kobject_uevent(&dev->kobj, KOBJ_OFFLINE); } else pr_debug("Can't offline CPU%d.\n", cpu); break; case 1: ret = cpu_up(cpu); if (!ret) { dev->offline = false; kobject_uevent(&dev->kobj, KOBJ_ONLINE); } else { pr_debug("Can't online CPU%d.\n", cpu); } break; default: ret = -EINVAL; } unlock_device_hotplug(); return ret; }

Contributors

PersonTokensPropCommitsCommitProp
Fenghua Yu12885.33%133.33%
Toshi Kani2214.67%266.67%
Total150100.00%3100.00%


static int __init debug_hotplug_cpu(void) { _debug_hotplug_cpu(0, 0); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Fenghua Yu19100.00%1100.00%
Total19100.00%1100.00%

late_initcall_sync(debug_hotplug_cpu); #endif /* CONFIG_DEBUG_HOTPLUG_CPU0 */
int arch_register_cpu(int num) { struct cpuinfo_x86 *c = &cpu_data(num); /* * Currently CPU0 is only hotpluggable on Intel platforms. Other * vendors can add hotplug support later. */ if (c->x86_vendor != X86_VENDOR_INTEL) cpu0_hotpluggable = 0; /* * Two known BSP/CPU0 dependencies: Resume from suspend/hibernate * depends on BSP. PIC interrupts depend on BSP. * * If the BSP depencies are under control, one can tell kernel to * enable BSP hotplug. This basically adds a control file and * one can attempt to offline BSP. */ if (num == 0 && cpu0_hotpluggable) { unsigned int irq; /* * We won't take down the boot processor on i386 if some * interrupts only are able to be serviced by the BSP in PIC. */ for_each_active_irq(irq) { if (!IO_APIC_IRQ(irq) && irq_has_action(irq)) { cpu0_hotpluggable = 0; break; } } } if (num || cpu0_hotpluggable) per_cpu(cpu_devices, num).cpu.hotpluggable = 1; return register_cpu(&per_cpu(cpu_devices, num).cpu, num); }

Contributors

PersonTokensPropCommitsCommitProp
Fenghua Yu6862.39%120.00%
Len Brown2018.35%120.00%
Ashok Raj1211.01%120.00%
Mike Travis87.34%120.00%
Suresh B. Siddha10.92%120.00%
Total109100.00%5100.00%

EXPORT_SYMBOL(arch_register_cpu);
void arch_unregister_cpu(int num) { unregister_cpu(&per_cpu(cpu_devices, num).cpu); }

Contributors

PersonTokensPropCommitsCommitProp
Len Brown1676.19%133.33%
Mike Travis419.05%133.33%
Harvey Harrison14.76%133.33%
Total21100.00%3100.00%

EXPORT_SYMBOL(arch_unregister_cpu); #else /* CONFIG_HOTPLUG_CPU */
static int __init arch_register_cpu(int num) { return register_cpu(&per_cpu(cpu_devices, num).cpu, num); }

Contributors

PersonTokensPropCommitsCommitProp
Sam Ravnborg2492.31%150.00%
Alexander van Heukelum27.69%150.00%
Total26100.00%2100.00%

#endif /* CONFIG_HOTPLUG_CPU */
static int __init topology_init(void) { int i; #ifdef CONFIG_NUMA for_each_online_node(i) register_one_node(i); #endif for_each_present_cpu(i) arch_register_cpu(i); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton2668.42%116.67%
Magnus Damm513.16%116.67%
Ashok Raj410.53%233.33%
Andi Kleen25.26%116.67%
Yasunori Goto12.63%116.67%
Total38100.00%6100.00%

subsys_initcall(topology_init);

Overall Contributors

PersonTokensPropCommitsCommitProp
Fenghua Yu27257.63%28.70%
Len Brown428.90%14.35%
Andrew Morton377.84%14.35%
Sam Ravnborg357.42%14.35%
Toshi Kani224.66%28.70%
Mike Travis194.03%14.35%
Ashok Raj163.39%313.04%
Magnus Damm71.48%14.35%
Jaswinder Singh Rajput61.27%14.35%
Paul Gortmaker30.64%14.35%
Andi Kleen20.42%14.35%
Matthew Dobson20.42%14.35%
Matthew Wilcox20.42%14.35%
Alexander van Heukelum20.42%14.35%
Harvey Harrison10.21%14.35%
Adrian Bunk10.21%14.35%
Yasunori Goto10.21%14.35%
Suresh B. Siddha10.21%14.35%
Dave Jones10.21%14.35%
Total472100.00%23100.00%
Directory: arch/x86/kernel
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.