mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	driver-core/cpu: Expose hotpluggability to the rest of the kernel
When architectures register CPUs, they indicate whether the CPU allows hotplugging; notably, x86 and ARM don't allow hotplugging CPU 0. Userspace can easily query the hotpluggability of a CPU via sysfs; however, the kernel has no convenient way of accessing that property in an architecture-independent way. While the kernel can simply try it and see, some code needs to distinguish between "hotplug failed" and "hotplug has no hope of working on this CPU"; for example, rcutorture's CPU hotplug tests want to avoid drowning out real hotplug failures with expected failures. Expose this property via a new cpu_is_hotpluggable function, so that the rest of the kernel can access it in an architecture-independent way. Signed-off-by: Josh Triplett <josh@joshtriplett.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									2d1dc9a600
								
							
						
					
					
						commit
						2987557f52
					
				
					 2 changed files with 8 additions and 0 deletions
				
			
		| 
						 | 
					@ -247,6 +247,13 @@ struct sys_device *get_cpu_sysdev(unsigned cpu)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(get_cpu_sysdev);
 | 
					EXPORT_SYMBOL_GPL(get_cpu_sysdev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool cpu_is_hotpluggable(unsigned cpu)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct sys_device *dev = get_cpu_sysdev(cpu);
 | 
				
			||||||
 | 
						return dev && container_of(dev, struct cpu, sysdev)->hotpluggable;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					EXPORT_SYMBOL_GPL(cpu_is_hotpluggable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int __init cpu_dev_init(void)
 | 
					int __init cpu_dev_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int err;
 | 
						int err;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@ struct cpu {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int register_cpu(struct cpu *cpu, int num);
 | 
					extern int register_cpu(struct cpu *cpu, int num);
 | 
				
			||||||
extern struct sys_device *get_cpu_sysdev(unsigned cpu);
 | 
					extern struct sys_device *get_cpu_sysdev(unsigned cpu);
 | 
				
			||||||
 | 
					extern bool cpu_is_hotpluggable(unsigned cpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int cpu_add_sysdev_attr(struct sysdev_attribute *attr);
 | 
					extern int cpu_add_sysdev_attr(struct sysdev_attribute *attr);
 | 
				
			||||||
extern void cpu_remove_sysdev_attr(struct sysdev_attribute *attr);
 | 
					extern void cpu_remove_sysdev_attr(struct sysdev_attribute *attr);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue