1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_BH_H
3 #define _LINUX_BH_H
4 
5 #include <linux/preempt.h>
6 
7 #ifdef CONFIG_TRACE_IRQFLAGS
8 extern void __local_bh_disable_ip(unsigned long ip, unsigned int cnt);
9 #else
__local_bh_disable_ip(unsigned long ip,unsigned int cnt)10 static __always_inline void __local_bh_disable_ip(unsigned long ip, unsigned int cnt)
11 {
12 	preempt_count_add(cnt);
13 	barrier();
14 }
15 #endif
16 
local_bh_disable(void)17 static inline void local_bh_disable(void)
18 {
19 	__local_bh_disable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET);
20 }
21 
22 extern void _local_bh_enable(void);
23 extern void __local_bh_enable_ip(unsigned long ip, unsigned int cnt);
24 
local_bh_enable_ip(unsigned long ip)25 static inline void local_bh_enable_ip(unsigned long ip)
26 {
27 	__local_bh_enable_ip(ip, SOFTIRQ_DISABLE_OFFSET);
28 }
29 
local_bh_enable(void)30 static inline void local_bh_enable(void)
31 {
32 	__local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET);
33 }
34 
35 #endif /* _LINUX_BH_H */
36