xref: /linux/include/linux/cpuhplock.h (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
1195fb517STony Luck /* SPDX-License-Identifier: GPL-2.0 */
2195fb517STony Luck /*
3195fb517STony Luck  * include/linux/cpuhplock.h - CPU hotplug locking
4195fb517STony Luck  *
5195fb517STony Luck  * Locking functions for CPU hotplug.
6195fb517STony Luck  */
7195fb517STony Luck #ifndef _LINUX_CPUHPLOCK_H_
8195fb517STony Luck #define _LINUX_CPUHPLOCK_H_
9195fb517STony Luck 
10195fb517STony Luck #include <linux/cleanup.h>
11195fb517STony Luck #include <linux/errno.h>
12195fb517STony Luck 
13195fb517STony Luck struct device;
14195fb517STony Luck 
15195fb517STony Luck extern int lockdep_is_cpus_held(void);
16195fb517STony Luck 
17195fb517STony Luck #ifdef CONFIG_HOTPLUG_CPU
18ddefcfdeSTony Luck void cpus_write_lock(void);
19ddefcfdeSTony Luck void cpus_write_unlock(void);
20ddefcfdeSTony Luck void cpus_read_lock(void);
21ddefcfdeSTony Luck void cpus_read_unlock(void);
22ddefcfdeSTony Luck int  cpus_read_trylock(void);
23ddefcfdeSTony Luck void lockdep_assert_cpus_held(void);
24*1037e4c5SKirill A. Shutemov void cpu_hotplug_disable_offlining(void);
25ddefcfdeSTony Luck void cpu_hotplug_disable(void);
26ddefcfdeSTony Luck void cpu_hotplug_enable(void);
27195fb517STony Luck void clear_tasks_mm_cpumask(int cpu);
28195fb517STony Luck int remove_cpu(unsigned int cpu);
29195fb517STony Luck int cpu_device_down(struct device *dev);
30ddefcfdeSTony Luck void smp_shutdown_nonboot_cpus(unsigned int primary_cpu);
31195fb517STony Luck 
32195fb517STony Luck #else /* CONFIG_HOTPLUG_CPU */
33195fb517STony Luck 
cpus_write_lock(void)34195fb517STony Luck static inline void cpus_write_lock(void) { }
cpus_write_unlock(void)35195fb517STony Luck static inline void cpus_write_unlock(void) { }
cpus_read_lock(void)36195fb517STony Luck static inline void cpus_read_lock(void) { }
cpus_read_unlock(void)37195fb517STony Luck static inline void cpus_read_unlock(void) { }
cpus_read_trylock(void)38195fb517STony Luck static inline int  cpus_read_trylock(void) { return true; }
lockdep_assert_cpus_held(void)39195fb517STony Luck static inline void lockdep_assert_cpus_held(void) { }
cpu_hotplug_disable_offlining(void)40*1037e4c5SKirill A. Shutemov static inline void cpu_hotplug_disable_offlining(void) { }
cpu_hotplug_disable(void)41195fb517STony Luck static inline void cpu_hotplug_disable(void) { }
cpu_hotplug_enable(void)42195fb517STony Luck static inline void cpu_hotplug_enable(void) { }
remove_cpu(unsigned int cpu)43195fb517STony Luck static inline int remove_cpu(unsigned int cpu) { return -EPERM; }
smp_shutdown_nonboot_cpus(unsigned int primary_cpu)44195fb517STony Luck static inline void smp_shutdown_nonboot_cpus(unsigned int primary_cpu) { }
45195fb517STony Luck #endif	/* !CONFIG_HOTPLUG_CPU */
46195fb517STony Luck 
47195fb517STony Luck DEFINE_LOCK_GUARD_0(cpus_read_lock, cpus_read_lock(), cpus_read_unlock())
48195fb517STony Luck 
49195fb517STony Luck #endif /* _LINUX_CPUHPLOCK_H_ */
50