mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	x86/topology: Switch over to GENERIC_CPU_DEVICES
Now that GENERIC_CPU_DEVICES calls arch_register_cpu(), which can be overridden by the arch code, switch over to this to allow common code to choose when the register_cpu() call is made. x86's struct cpus come from struct x86_cpu, which has no other members or users. Remove this and use the version defined by common code. This is an intermediate step to the logic being moved to drivers/acpi, where GENERIC_CPU_DEVICES will do the work when booting with acpi=off. This patch also has the effect of moving the registration of CPUs from subsys to driver core initialisation, prior to any initcalls running. ---- Changes since RFC: * Fixed the second copy of arch_register_cpu() used for non-hotplug Changes since RFC v2: * Remove duplicate of the weak generic arch_register_cpu(), spotted by Jonathan Cameron. Add note about initialisation order change. Changes since RFC v3: * Adapt to removal of EXPORT_SYMBOL()s Signed-off-by: James Morse <james.morse@arm.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Signed-off-by: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/E1r5R3l-00Cszm-UA@rmk-PC.armlinux.org.uk Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									092cfbc6b5
								
							
						
					
					
						commit
						5b95f94c3b
					
				
					 3 changed files with 5 additions and 27 deletions
				
			
		| 
						 | 
				
			
			@ -148,6 +148,7 @@ config X86
 | 
			
		|||
	select GENERIC_CLOCKEVENTS_MIN_ADJUST
 | 
			
		||||
	select GENERIC_CMOS_UPDATE
 | 
			
		||||
	select GENERIC_CPU_AUTOPROBE
 | 
			
		||||
	select GENERIC_CPU_DEVICES
 | 
			
		||||
	select GENERIC_CPU_VULNERABILITIES
 | 
			
		||||
	select GENERIC_EARLY_IOREMAP
 | 
			
		||||
	select GENERIC_ENTRY
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,10 +23,6 @@ static inline void prefill_possible_map(void) {}
 | 
			
		|||
 | 
			
		||||
#endif /* CONFIG_SMP */
 | 
			
		||||
 | 
			
		||||
struct x86_cpu {
 | 
			
		||||
	struct cpu cpu;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_HOTPLUG_CPU
 | 
			
		||||
extern void soft_restart_cpu(void);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,36 +35,17 @@
 | 
			
		|||
#include <asm/io_apic.h>
 | 
			
		||||
#include <asm/cpu.h>
 | 
			
		||||
 | 
			
		||||
static DEFINE_PER_CPU(struct x86_cpu, cpu_devices);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_HOTPLUG_CPU
 | 
			
		||||
int arch_register_cpu(int cpu)
 | 
			
		||||
{
 | 
			
		||||
	struct x86_cpu *xc = per_cpu_ptr(&cpu_devices, cpu);
 | 
			
		||||
	struct cpu *c = per_cpu_ptr(&cpu_devices, cpu);
 | 
			
		||||
 | 
			
		||||
	xc->cpu.hotpluggable = cpu > 0;
 | 
			
		||||
	return register_cpu(&xc->cpu, cpu);
 | 
			
		||||
	c->hotpluggable = cpu > 0;
 | 
			
		||||
	return register_cpu(c, cpu);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void arch_unregister_cpu(int num)
 | 
			
		||||
{
 | 
			
		||||
	unregister_cpu(&per_cpu(cpu_devices, num).cpu);
 | 
			
		||||
}
 | 
			
		||||
#else /* CONFIG_HOTPLUG_CPU */
 | 
			
		||||
 | 
			
		||||
int __init arch_register_cpu(int num)
 | 
			
		||||
{
 | 
			
		||||
	return register_cpu(&per_cpu(cpu_devices, num).cpu, num);
 | 
			
		||||
	unregister_cpu(&per_cpu(cpu_devices, num));
 | 
			
		||||
}
 | 
			
		||||
#endif /* CONFIG_HOTPLUG_CPU */
 | 
			
		||||
 | 
			
		||||
static int __init topology_init(void)
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	for_each_present_cpu(i)
 | 
			
		||||
		arch_register_cpu(i);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
subsys_initcall(topology_init);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue