xref: /linux/include/linux/cpuhplock.h (revision 195fb517ee25bfefde9c74ecd86348eccbd6d2e4)
1*195fb517STony Luck /* SPDX-License-Identifier: GPL-2.0 */
2*195fb517STony Luck /*
3*195fb517STony Luck  * include/linux/cpuhplock.h - CPU hotplug locking
4*195fb517STony Luck  *
5*195fb517STony Luck  * Locking functions for CPU hotplug.
6*195fb517STony Luck  */
7*195fb517STony Luck #ifndef _LINUX_CPUHPLOCK_H_
8*195fb517STony Luck #define _LINUX_CPUHPLOCK_H_
9*195fb517STony Luck 
10*195fb517STony Luck #include <linux/cleanup.h>
11*195fb517STony Luck #include <linux/errno.h>
12*195fb517STony Luck 
13*195fb517STony Luck struct device;
14*195fb517STony Luck 
15*195fb517STony Luck extern int lockdep_is_cpus_held(void);
16*195fb517STony Luck 
17*195fb517STony Luck #ifdef CONFIG_HOTPLUG_CPU
18*195fb517STony Luck extern void cpus_write_lock(void);
19*195fb517STony Luck extern void cpus_write_unlock(void);
20*195fb517STony Luck extern void cpus_read_lock(void);
21*195fb517STony Luck extern void cpus_read_unlock(void);
22*195fb517STony Luck extern int  cpus_read_trylock(void);
23*195fb517STony Luck extern void lockdep_assert_cpus_held(void);
24*195fb517STony Luck extern void cpu_hotplug_disable(void);
25*195fb517STony Luck extern void cpu_hotplug_enable(void);
26*195fb517STony Luck void clear_tasks_mm_cpumask(int cpu);
27*195fb517STony Luck int remove_cpu(unsigned int cpu);
28*195fb517STony Luck int cpu_device_down(struct device *dev);
29*195fb517STony Luck extern void smp_shutdown_nonboot_cpus(unsigned int primary_cpu);
30*195fb517STony Luck 
31*195fb517STony Luck #else /* CONFIG_HOTPLUG_CPU */
32*195fb517STony Luck 
33*195fb517STony Luck static inline void cpus_write_lock(void) { }
34*195fb517STony Luck static inline void cpus_write_unlock(void) { }
35*195fb517STony Luck static inline void cpus_read_lock(void) { }
36*195fb517STony Luck static inline void cpus_read_unlock(void) { }
37*195fb517STony Luck static inline int  cpus_read_trylock(void) { return true; }
38*195fb517STony Luck static inline void lockdep_assert_cpus_held(void) { }
39*195fb517STony Luck static inline void cpu_hotplug_disable(void) { }
40*195fb517STony Luck static inline void cpu_hotplug_enable(void) { }
41*195fb517STony Luck static inline int remove_cpu(unsigned int cpu) { return -EPERM; }
42*195fb517STony Luck static inline void smp_shutdown_nonboot_cpus(unsigned int primary_cpu) { }
43*195fb517STony Luck #endif	/* !CONFIG_HOTPLUG_CPU */
44*195fb517STony Luck 
45*195fb517STony Luck DEFINE_LOCK_GUARD_0(cpus_read_lock, cpus_read_lock(), cpus_read_unlock())
46*195fb517STony Luck 
47*195fb517STony Luck #endif /* _LINUX_CPUHPLOCK_H_ */
48