xref: /linux-6.15/include/linux/bottom_half.h (revision e52340de)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2676dcb8bSAndrew Morton #ifndef _LINUX_BH_H
3676dcb8bSAndrew Morton #define _LINUX_BH_H
4676dcb8bSAndrew Morton 
5*e52340deSStephen Rothwell #include <linux/instruction_pointer.h>
60bd3a173SPeter Zijlstra #include <linux/preempt.h>
70bd3a173SPeter Zijlstra 
88b1c04acSThomas Gleixner #if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_TRACE_IRQFLAGS)
90bd3a173SPeter Zijlstra extern void __local_bh_disable_ip(unsigned long ip, unsigned int cnt);
100bd3a173SPeter Zijlstra #else
__local_bh_disable_ip(unsigned long ip,unsigned int cnt)110bd3a173SPeter Zijlstra static __always_inline void __local_bh_disable_ip(unsigned long ip, unsigned int cnt)
120bd3a173SPeter Zijlstra {
130bd3a173SPeter Zijlstra 	preempt_count_add(cnt);
140bd3a173SPeter Zijlstra 	barrier();
150bd3a173SPeter Zijlstra }
160bd3a173SPeter Zijlstra #endif
170bd3a173SPeter Zijlstra 
local_bh_disable(void)180bd3a173SPeter Zijlstra static inline void local_bh_disable(void)
190bd3a173SPeter Zijlstra {
200bd3a173SPeter Zijlstra 	__local_bh_disable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET);
210bd3a173SPeter Zijlstra }
220bd3a173SPeter Zijlstra 
23676dcb8bSAndrew Morton extern void _local_bh_enable(void);
240bd3a173SPeter Zijlstra extern void __local_bh_enable_ip(unsigned long ip, unsigned int cnt);
250bd3a173SPeter Zijlstra 
local_bh_enable_ip(unsigned long ip)260bd3a173SPeter Zijlstra static inline void local_bh_enable_ip(unsigned long ip)
270bd3a173SPeter Zijlstra {
280bd3a173SPeter Zijlstra 	__local_bh_enable_ip(ip, SOFTIRQ_DISABLE_OFFSET);
290bd3a173SPeter Zijlstra }
300bd3a173SPeter Zijlstra 
local_bh_enable(void)310bd3a173SPeter Zijlstra static inline void local_bh_enable(void)
320bd3a173SPeter Zijlstra {
330bd3a173SPeter Zijlstra 	__local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET);
340bd3a173SPeter Zijlstra }
35676dcb8bSAndrew Morton 
3647c218dcSThomas Gleixner #ifdef CONFIG_PREEMPT_RT
3747c218dcSThomas Gleixner extern bool local_bh_blocked(void);
3847c218dcSThomas Gleixner #else
local_bh_blocked(void)3947c218dcSThomas Gleixner static inline bool local_bh_blocked(void) { return false; }
4047c218dcSThomas Gleixner #endif
4147c218dcSThomas Gleixner 
42676dcb8bSAndrew Morton #endif /* _LINUX_BH_H */
43