Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6982c67 authored by Ashok Raj's avatar Ashok Raj Committed by Linus Torvalds
Browse files

[PATCH] x86_64: Change init sections for CPU hotplug support



This patch adds __cpuinit and __cpuinitdata sections that need to exist past
boot to support cpu hotplug.

Caveat: This is done *only* for EM64T CPU Hotplug support, on request from
Andi Kleen.  Much of the generic hotplug code in kernel, and none of the other
archs that support CPU hotplug today, i386, ia64, ppc64, s390 and parisc dont
mark sections with __cpuinit, but only mark them as __devinit, and
__devinitdata.

If someone is motivated to change generic code, we need to make sure all
existing hotplug code does not break, on other arch's that dont use __cpuinit,
and __cpudevinit.

Signed-off-by: default avatarAshok Raj <ashok.raj@intel.com>
Acked-by: default avatarAndi Kleen <ak@muc.de>
Acked-by: default avatarZwane Mwaikambo <zwane@arm.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 52a119fe
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -285,7 +285,7 @@ void __init init_bsp_APIC(void)
	apic_write_around(APIC_LVT1, value);
}

void __init setup_local_APIC (void)
void __cpuinit setup_local_APIC (void)
{
	unsigned int value, ver, maxlvt;

@@ -534,7 +534,7 @@ static struct sys_device device_lapic = {
	.cls		= &lapic_sysclass,
};

static void __init apic_pm_activate(void)
static void __cpuinit apic_pm_activate(void)
{
	apic_pm_state.active = 1;
}
@@ -774,14 +774,14 @@ void __init setup_boot_APIC_clock (void)
	local_irq_enable();
}

void __init setup_secondary_APIC_clock(void)
void __cpuinit setup_secondary_APIC_clock(void)
{
	local_irq_disable(); /* FIXME: Do we need this? --RR */
	setup_APIC_timer(calibration_result);
	local_irq_enable();
}

void __init disable_APIC_timer(void)
void __cpuinit disable_APIC_timer(void)
{
	if (using_apic_timer) {
		unsigned long v;
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ void mxcsr_feature_mask_init(void)
 * Called at bootup to set up the initial FPU state that is later cloned
 * into all processes.
 */
void __init fpu_init(void)
void __cpuinit fpu_init(void)
{
	unsigned long oldcr0 = read_cr0();
	extern void __bad_fxsave_alignment(void);
+4 −4
Original line number Diff line number Diff line
@@ -327,7 +327,7 @@ static void mce_init(void *dummy)
}

/* Add per CPU specific workarounds here */
static void __init mce_cpu_quirks(struct cpuinfo_x86 *c) 
static void __cpuinit mce_cpu_quirks(struct cpuinfo_x86 *c)
{ 
	/* This should be disabled by the BIOS, but isn't always */
	if (c->x86_vendor == X86_VENDOR_AMD && c->x86 == 15) {
@@ -337,7 +337,7 @@ static void __init mce_cpu_quirks(struct cpuinfo_x86 *c)
	}
}			

static void __init mce_cpu_features(struct cpuinfo_x86 *c)
static void __cpuinit mce_cpu_features(struct cpuinfo_x86 *c)
{
	switch (c->x86_vendor) {
	case X86_VENDOR_INTEL:
@@ -352,7 +352,7 @@ static void __init mce_cpu_features(struct cpuinfo_x86 *c)
 * Called for each booted CPU to set up machine checks.
 * Must be called with preempt off. 
 */
void __init mcheck_init(struct cpuinfo_x86 *c)
void __cpuinit mcheck_init(struct cpuinfo_x86 *c)
{
	static cpumask_t mce_cpus __initdata = CPU_MASK_NONE;

@@ -542,7 +542,7 @@ ACCESSOR(bank4ctl,bank[4],mce_restart())
ACCESSOR(tolerant,tolerant,)
ACCESSOR(check_interval,check_interval,mce_restart())

static __init int mce_init_device(void)
static __cpuinit int mce_init_device(void)
{
	int err;
	if (!mce_available(&boot_cpu_data))
+2 −2
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ asmlinkage void smp_thermal_interrupt(void)
	irq_exit();
}

static void __init intel_init_thermal(struct cpuinfo_x86 *c)
static void __cpuinit intel_init_thermal(struct cpuinfo_x86 *c)
{
	u32 l, h;
	int tm2 = 0;
@@ -93,7 +93,7 @@ static void __init intel_init_thermal(struct cpuinfo_x86 *c)
	return;
}

void __init mce_intel_feature_init(struct cpuinfo_x86 *c)
void __cpuinit mce_intel_feature_init(struct cpuinfo_x86 *c)
{
	intel_init_thermal(c);
}
+2 −2
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ static unsigned int nmi_p4_cccr_val;
	(P4_CCCR_OVF_PMI0|P4_CCCR_THRESHOLD(15)|P4_CCCR_COMPLEMENT|	\
	 P4_CCCR_COMPARE|P4_CCCR_REQUIRED|P4_CCCR_ESCR_SELECT(4)|P4_CCCR_ENABLE)

static __init inline int nmi_known_cpu(void)
static __cpuinit inline int nmi_known_cpu(void)
{
	switch (boot_cpu_data.x86_vendor) {
	case X86_VENDOR_AMD:
@@ -110,7 +110,7 @@ static __init inline int nmi_known_cpu(void)
}

/* Run after command line and cpu_init init, but before all other checks */
void __init nmi_watchdog_default(void)
void __cpuinit nmi_watchdog_default(void)
{
	if (nmi_watchdog != NMI_DEFAULT)
		return;
Loading