Linux PARISC architecture development
 help / color / mirror / Atom feed
* [PATCH 01/12] parisc: Switch from GENERIC_CPU_DEVICES to GENERIC_ARCH_TOPOLOGY
@ 2022-03-25 14:38 Helge Deller
  2022-03-25 14:38 ` [PATCH 02/12] parisc: Add __cpuinit section for HOTPLUG_CPU Helge Deller
                   ` (12 more replies)
  0 siblings, 13 replies; 23+ messages in thread
From: Helge Deller @ 2022-03-25 14:38 UTC (permalink / raw)
  To: linux-parisc; +Cc: James Bottomley, John David Anglin

Switch away from the own cpu topology code to common code which is used
by ARM64 and RISCV. That allows us to enable hotplug later on too.

Signed-off-by: Helge Deller <deller@gmx.de>
---
 arch/parisc/Kconfig                |  2 +-
 arch/parisc/include/asm/topology.h | 20 +--------
 arch/parisc/kernel/processor.c     |  2 +
 arch/parisc/kernel/topology.c      | 72 +++++++-----------------------
 4 files changed, 19 insertions(+), 77 deletions(-)

diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index 00cb889bd9a6..6bd42c82a019 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -37,7 +37,7 @@ config PARISC
 	select GENERIC_PCI_IOMAP
 	select ARCH_HAVE_NMI_SAFE_CMPXCHG
 	select GENERIC_SMP_IDLE_THREAD
-	select GENERIC_CPU_DEVICES
+	select GENERIC_ARCH_TOPOLOGY
 	select GENERIC_LIB_DEVMEM_IS_ALLOWED
 	select SYSCTL_ARCH_UNALIGN_ALLOW
 	select SYSCTL_EXCEPTION_TRACE
diff --git a/arch/parisc/include/asm/topology.h b/arch/parisc/include/asm/topology.h
index 6f0750c74e47..734eddf096f7 100644
--- a/arch/parisc/include/asm/topology.h
+++ b/arch/parisc/include/asm/topology.h
@@ -4,25 +4,7 @@
 #ifdef CONFIG_PARISC_CPU_TOPOLOGY

 #include <linux/cpumask.h>
-
-struct cputopo_parisc {
-	int thread_id;
-	int core_id;
-	int socket_id;
-	cpumask_t thread_sibling;
-	cpumask_t core_sibling;
-};
-
-extern struct cputopo_parisc cpu_topology[NR_CPUS];
-
-#define topology_physical_package_id(cpu)	(cpu_topology[cpu].socket_id)
-#define topology_core_id(cpu)		(cpu_topology[cpu].core_id)
-#define topology_core_cpumask(cpu)	(&cpu_topology[cpu].core_sibling)
-#define topology_sibling_cpumask(cpu)	(&cpu_topology[cpu].thread_sibling)
-
-void init_cpu_topology(void);
-void store_cpu_topology(unsigned int cpuid);
-const struct cpumask *cpu_coregroup_mask(int cpu);
+#include <linux/arch_topology.h>

 #else

diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c
index ccaf075d0750..d0bfd61a4623 100644
--- a/arch/parisc/kernel/processor.c
+++ b/arch/parisc/kernel/processor.c
@@ -19,6 +19,7 @@
 #include <linux/random.h>
 #include <linux/slab.h>
 #include <linux/cpu.h>
+#include <asm/topology.h>
 #include <asm/param.h>
 #include <asm/cache.h>
 #include <asm/hardware.h>	/* for register_parisc_driver() stuff */
@@ -459,5 +460,6 @@ static struct parisc_driver cpu_driver __refdata = {
  */
 void __init processor_init(void)
 {
+	reset_cpu_topology();
 	register_parisc_driver(&cpu_driver);
 }
diff --git a/arch/parisc/kernel/topology.c b/arch/parisc/kernel/topology.c
index e88a6ce7c96d..72d9aeb54fbe 100644
--- a/arch/parisc/kernel/topology.c
+++ b/arch/parisc/kernel/topology.c
@@ -13,45 +13,11 @@
 #include <linux/percpu.h>
 #include <linux/sched.h>
 #include <linux/sched/topology.h>
+#include <linux/cpu.h>

 #include <asm/topology.h>

- /*
-  * cpu topology table
-  */
-struct cputopo_parisc cpu_topology[NR_CPUS] __read_mostly;
-EXPORT_SYMBOL_GPL(cpu_topology);
-
-const struct cpumask *cpu_coregroup_mask(int cpu)
-{
-	return &cpu_topology[cpu].core_sibling;
-}
-
-static void update_siblings_masks(unsigned int cpuid)
-{
-	struct cputopo_parisc *cpu_topo, *cpuid_topo = &cpu_topology[cpuid];
-	int cpu;
-
-	/* update core and thread sibling masks */
-	for_each_possible_cpu(cpu) {
-		cpu_topo = &cpu_topology[cpu];
-
-		if (cpuid_topo->socket_id != cpu_topo->socket_id)
-			continue;
-
-		cpumask_set_cpu(cpuid, &cpu_topo->core_sibling);
-		if (cpu != cpuid)
-			cpumask_set_cpu(cpu, &cpuid_topo->core_sibling);
-
-		if (cpuid_topo->core_id != cpu_topo->core_id)
-			continue;
-
-		cpumask_set_cpu(cpuid, &cpu_topo->thread_sibling);
-		if (cpu != cpuid)
-			cpumask_set_cpu(cpu, &cpuid_topo->thread_sibling);
-	}
-	smp_wmb();
-}
+static DEFINE_PER_CPU(struct cpu, cpu_devices);

 static int dualcores_found __initdata;

@@ -62,7 +28,7 @@ static int dualcores_found __initdata;
  */
 void __init store_cpu_topology(unsigned int cpuid)
 {
-	struct cputopo_parisc *cpuid_topo = &cpu_topology[cpuid];
+	struct cpu_topology *cpuid_topo = &cpu_topology[cpuid];
 	struct cpuinfo_parisc *p;
 	int max_socket = -1;
 	unsigned long cpu;
@@ -71,6 +37,12 @@ void __init store_cpu_topology(unsigned int cpuid)
 	if (cpuid_topo->core_id != -1)
 		return;

+#ifdef CONFIG_HOTPLUG_CPU
+	per_cpu(cpu_devices, cpuid).hotpluggable = 1;
+#endif
+	if (register_cpu(&per_cpu(cpu_devices, cpuid), cpuid))
+		printk("Failed to register CPU device");
+
 	/* create cpu topology mapping */
 	cpuid_topo->thread_id = -1;
 	cpuid_topo->core_id = 0;
@@ -86,25 +58,25 @@ void __init store_cpu_topology(unsigned int cpuid)
 			cpuid_topo->core_id = cpu_topology[cpu].core_id;
 			if (p->cpu_loc) {
 				cpuid_topo->core_id++;
-				cpuid_topo->socket_id = cpu_topology[cpu].socket_id;
+				cpuid_topo->package_id = cpu_topology[cpu].package_id;
 				dualcores_found = 1;
 				continue;
 			}
 		}

-		if (cpuid_topo->socket_id == -1)
-			max_socket = max(max_socket, cpu_topology[cpu].socket_id);
+		if (cpuid_topo->package_id == -1)
+			max_socket = max(max_socket, cpu_topology[cpu].package_id);
 	}

-	if (cpuid_topo->socket_id == -1)
-		cpuid_topo->socket_id = max_socket + 1;
+	if (cpuid_topo->package_id == -1)
+		cpuid_topo->package_id = max_socket + 1;

 	update_siblings_masks(cpuid);

 	pr_info("CPU%u: cpu core %d of socket %d\n",
 		cpuid,
 		cpu_topology[cpuid].core_id,
-		cpu_topology[cpuid].socket_id);
+		cpu_topology[cpuid].package_id);
 }

 static struct sched_domain_topology_level parisc_mc_topology[] = {
@@ -122,20 +94,6 @@ static struct sched_domain_topology_level parisc_mc_topology[] = {
  */
 void __init init_cpu_topology(void)
 {
-	unsigned int cpu;
-
-	/* init core mask and capacity */
-	for_each_possible_cpu(cpu) {
-		struct cputopo_parisc *cpu_topo = &(cpu_topology[cpu]);
-
-		cpu_topo->thread_id = -1;
-		cpu_topo->core_id =  -1;
-		cpu_topo->socket_id = -1;
-		cpumask_clear(&cpu_topo->core_sibling);
-		cpumask_clear(&cpu_topo->thread_sibling);
-	}
-	smp_wmb();
-
 	/* Set scheduler topology descriptor */
 	if (dualcores_found)
 		set_sched_topology(parisc_mc_topology);
--
2.35.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2022-03-26  8:58 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-25 14:38 [PATCH 01/12] parisc: Switch from GENERIC_CPU_DEVICES to GENERIC_ARCH_TOPOLOGY Helge Deller
2022-03-25 14:38 ` [PATCH 02/12] parisc: Add __cpuinit section for HOTPLUG_CPU Helge Deller
2022-03-25 14:38 ` [PATCH 03/12] parisc: Move store_cpu_topology() into __cpuinit section Helge Deller
2022-03-25 16:52   ` Rolf Eike Beer
2022-03-25 17:12     ` Helge Deller
2022-03-25 14:38 ` [PATCH 04/12] parisc: Move start_cpu_itimer() " Helge Deller
2022-03-25 16:53   ` Rolf Eike Beer
2022-03-25 17:13     ` Helge Deller
2022-03-25 14:38 ` [PATCH 05/12] parisc: Move init_per_cpu() init " Helge Deller
2022-03-25 14:38 ` [PATCH 06/12] parisc: Move disable_sr_hashing_asm() into " Helge Deller
2022-03-25 14:38 ` [PATCH 07/12] parisc: Move disable_sr_hashing() " Helge Deller
2022-03-25 14:38 ` [PATCH 08/12] parisc: Move init_IRQ() " Helge Deller
2022-03-25 14:38 ` [PATCH 09/12] parisc: Ensure set_firmware_width() is called only once Helge Deller
2022-03-26  8:58   ` Rolf Eike Beer
2022-03-25 14:38 ` [PATCH 10/12] parisc: Move common_stext into text section when CONFIG_HOTPLUG_CPU=y Helge Deller
2022-03-25 14:38 ` [PATCH 11/12] parisc: Rewrite arch_cpu_idle_dead() for CPU hotplugging Helge Deller
2022-03-25 16:56   ` Rolf Eike Beer
2022-03-25 17:14     ` Helge Deller
2022-03-25 14:38 ` [PATCH 12/12] parisc: Implement __cpu_die() and __cpu_disable() " Helge Deller
2022-03-25 17:10   ` Rolf Eike Beer
2022-03-25 18:00     ` Helge Deller
2022-03-25 14:53 ` [PATCH 01/12] parisc: Switch from GENERIC_CPU_DEVICES to GENERIC_ARCH_TOPOLOGY Helge Deller
2022-03-25 16:46 ` Rolf Eike Beer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox