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#if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_TRACE_IRQFLAGS) 8extern void __local_bh_disable_ip(unsigned long ip, unsigned int cnt); 9#else 10static __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 17static inline void local_bh_disable(void) 18{ 19 __local_bh_disable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); 20} 21 22extern void _local_bh_enable(void); 23extern void __local_bh_enable_ip(unsigned long ip, unsigned int cnt); 24 25static inline void local_bh_enable_ip(unsigned long ip) 26{ 27 __local_bh_enable_ip(ip, SOFTIRQ_DISABLE_OFFSET); 28} 29 30static inline void local_bh_enable(void) 31{ 32 __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); 33} 34 35#ifdef CONFIG_PREEMPT_RT 36extern bool local_bh_blocked(void); 37#else 38static inline bool local_bh_blocked(void) { return false; } 39#endif 40 41#endif /* _LINUX_BH_H */ 42