- 论坛徽章:
- 1
|
关于中断上下文的问题,内核里有一个宏定义in_interrupt
但是in_interrupt主要用意是根据当前preempt_count变量,来判断当前代码是否在一个中断上下文中执行。
#define in_interrupt() (irq_count())
#define irq_count() (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK \
| NMI_MASK))
那么,如果我在我的代码前面加上一句:
local_bh_disable(void)
因为local_bh_disable会将当前preempt_count()+SOFTIRQ_OFFSET,所以会导致in_interrupt返回1
那是不是说我的代码在执行
local_bh_disable之后就进入中断上下文了?
求高手解疑,谢谢
附:
void local_bh_disable(void)
{
__local_bh_disable((unsigned long)__builtin_return_address(0));
}
static inline void __local_bh_disable(unsigned long ip)
{
add_preempt_count(SOFTIRQ_OFFSET);
barrier();
} |
|