[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linaro-acpi
Subject:    [Linaro-acpi] [PATCH 3/5] ARM:ACPI: introduce arch_register_cpu() and arch_unregister_cpu()
From:       graeme.gregory () linaro ! org (Graeme Gregory)
Date:       2013-06-25 14:38:43
Message-ID: 1372171126-28214-4-git-send-email-gg () slimlogic ! co ! uk
[Download RAW message or body]

From: Hanjun Guo <hanjun.guo at linaro.org>

Introduce arch_register_cpu() and arch_unregister_cpu() for ACPI
processor driver.

Signed-off-by: Hanjun Guo <hanjun.guo at linaro.org>
---
 arch/arm/include/asm/cpu.h |    6 ++++++
 arch/arm/kernel/topology.c |   33 ++++++++++++++++++++++++++++-----
 2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/arch/arm/include/asm/cpu.h b/arch/arm/include/asm/cpu.h
index 2744f06..a72f974 100644
--- a/arch/arm/include/asm/cpu.h
+++ b/arch/arm/include/asm/cpu.h
@@ -12,6 +12,7 @@
 
 #include <linux/percpu.h>
 #include <linux/cpu.h>
+#include <linux/topology.h>
 
 struct cpuinfo_arm {
 	struct cpu	cpu;
@@ -21,6 +22,11 @@ struct cpuinfo_arm {
 #endif
 };
 
+#ifdef CONFIG_HOTPLUG_CPU
+extern int arch_register_cpu(int cpu);
+extern void arch_unregister_cpu(int cpu);
+#endif
+
 DECLARE_PER_CPU(struct cpuinfo_arm, cpu_data);
 
 #endif
diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c
index 0444325..4c54fb0 100644
--- a/arch/arm/kernel/topology.c
+++ b/arch/arm/kernel/topology.c
@@ -326,15 +326,38 @@ void __init init_cpu_topology(void)
 	parse_dt_topology();
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
+int __ref arch_register_cpu(int cpu)
+{
+	struct cpuinfo_arm *cpuinfo = &per_cpu(cpu_data, cpu);
+
+	/* BSP cann't be taken down on arm */
+	if (cpu)
+		cpuinfo->cpu.hotpluggable = 1;
+
+	return register_cpu(&cpuinfo->cpu, cpu);
+}
+EXPORT_SYMBOL(arch_register_cpu);
+
+void arch_unregister_cpu(int cpu)
+{
+	unregister_cpu(&per_cpu(cpu_data, cpu).cpu);
+}
+EXPORT_SYMBOL(arch_unregister_cpu);
+#else /* CONFIG_HOTPLUG_CPU */
+
+static int __init arch_register_cpu(int cpu)
+{
+	return register_cpu(&per_cpu(cpu_data, cpu).cpu, cpu);
+}
+#endif /* CONFIG_HOTPLUG_CPU */
+
 static int __init topology_init(void)
 {
 	int cpu;
 
-	for_each_possible_cpu(cpu) {
-		struct cpuinfo_arm *cpuinfo = &per_cpu(cpu_data, cpu);
-		cpuinfo->cpu.hotpluggable = 1;
-		register_cpu(&cpuinfo->cpu, cpu);
-	}
+	for_each_present_cpu(cpu)
+		arch_register_cpu(cpu);
 
 	return 0;
 }
-- 
1.7.10.4



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic