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