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