软中断的重入

一般情况下,在硬件中断处理程序后都会试图调用do_softirq执行软中断,
但是如果发现现在已经有中断在运行,或者已经有软中断在运行,则
不再运行自己调用的中断。也就是说,软中断是不能进入硬件中断部分的,并且软?br>卸显谝桓鯿pu上是不可重入的,或者说是串行化的(serialize)

其目的是避免访问同样的变量导致竞争条件的出现。在开中断的中断处理程序中不
允许调用软中断可能是希望这个中断处理程序尽快结束。

这是由do_softirq中的


if (in_interrupt())

return;


保证的.

其中,
#define in_interrupt() ({ int __cpu = smp_processor_id(); /
(local_irq_count(__cpu) + local_bh_count(__cpu) != 0); })

前者local_irq_count(_cpu)

当进入硬件中断处理程序时,handle_IRQ_event中的irq_enter(cpu,
irq)会将它加1,表明又进入一个硬件中断
退出则调用irq_exit(cpu, irq)

后者local_bh_count(__cpu)

当进入软中断处理程序时,do_softirq中的local_bh_disable()会将它加1,表明处于软中断中
local_bh_disable();

一个例子:

当内核正在执行处理定时器的软中断时,这期间可能会发生多个时钟中断,这些时钟中断的处理程序都试图再次运行处理定时器的软中断,但是由于
已经有个软中断在运行了,于是就放弃返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值