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 Zijlstrastatic __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 Zijlstrastatic 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 Zijlstrastatic 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 Zijlstrastatic 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 Gleixnerstatic inline bool local_bh_blocked(void) { return false; } 4047c218dcSThomas Gleixner #endif 4147c218dcSThomas Gleixner 42676dcb8bSAndrew Morton #endif /* _LINUX_BH_H */ 43