Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */ 2 : #ifndef _LINUX_BH_H 3 : #define _LINUX_BH_H 4 : 5 : #include <linux/instruction_pointer.h> 6 : #include <linux/preempt.h> 7 : 8 : #if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_TRACE_IRQFLAGS) 9 : extern void __local_bh_disable_ip(unsigned long ip, unsigned int cnt); 10 : #else 11 : static __always_inline void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) 12 : { 13 1832 : preempt_count_add(cnt); 14 916 : barrier(); 15 : } 16 : #endif 17 : 18 : static inline void local_bh_disable(void) 19 : { 20 1510 : __local_bh_disable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); 21 : } 22 : 23 : extern void _local_bh_enable(void); 24 : extern void __local_bh_enable_ip(unsigned long ip, unsigned int cnt); 25 : 26 : static inline void local_bh_enable_ip(unsigned long ip) 27 : { 28 : __local_bh_enable_ip(ip, SOFTIRQ_DISABLE_OFFSET); 29 : } 30 : 31 : static inline void local_bh_enable(void) 32 : { 33 755 : __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); 34 : } 35 : 36 : #ifdef CONFIG_PREEMPT_RT 37 : extern bool local_bh_blocked(void); 38 : #else 39 : static inline bool local_bh_blocked(void) { return false; } 40 : #endif 41 : 42 : #endif /* _LINUX_BH_H */