免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1847 | 回复: 3
打印 上一主题 下一主题

关于Linux中断的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-21 15:55 |只看该作者 |倒序浏览
asm_do_irq==>hanle_level_irq==>handle_IRQ_event中断处理函数:
irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
{
irqreturn_t ret, retval = IRQ_NONE;
unsigned int status = 0;

handle_dynamic_tick(action);

if (!(action->flags & IRQF_DISABLED))
  local_irq_enable_in_hardirq();

do {
  ret = action->handler(irq, action->dev_id);  
  if (ret == IRQ_HANDLED)
   status |= action->flags;
  retval |= ret;
  action = action->next;
} while (action);

if (status & IRQF_SAMPLE_RANDOM)
  add_interrupt_randomness(irq);
local_irq_disable();   //关全局中断

return retval;
}
这里local_irq_disable(),为什么在退出中断时候还需要关闭CPU中断?
linux进入中断时候,是不是默认CPU中断禁止?

论坛徽章:
0
2 [报告]
发表于 2012-02-26 19:55 |只看该作者
因为中断处理例程ISR归设备驱动程序管,属于非内核可控范围。本来CPU接收到外部中断时,会自动屏蔽外部中断的,但是ISR中有人可能试图打开中断,可能会造成中断嵌套等问题。所以内核在ISR处理完之后再用local_irq_disable把中断给关了,直到进入softirq阶段,才会再次打开中断。具体的你到我CU博客里看看有关帖子...

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
3 [报告]
发表于 2012-03-02 11:41 |只看该作者
回复 2# MagicBoy2010
开中断关中断有一定原则:在实时系统里,为了增加系统响应速度,尽早开放中断。我们自己在设计中断处理程序时, 基本上一条一条汇编指令地扣,只要开中断后,不影响中断子程序的运行,能正确地回到被中断的程序,就尽量缩小关中断的window; linux这么做有点草率。

   

论坛徽章:
0
4 [报告]
发表于 2012-03-27 10:58 |只看该作者
多谢,楼上兄弟们的指教。明白了。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP