忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2539 | 回复: 0

[中断] IRQD_IRQ_MAKSED 和 IRQD_IRQ_DISABLED 的区别 [复制链接]

论坛徽章:
0
发表于 2018-05-20 08:14 |显示全部楼层
本帖最后由 zhangku0 于 2018-05-20 08:21 编辑
  1. void handle_level_irq(unsigned int irq, struct irq_desc *desc)
  2. {
  3.     raw_spin_lock(&desc->lock);
  4.     mask_ack_irq(desc);

  5.     if (unlikely(irqd_irq_inprogress(&desc->irq_data)))
  6.     if (!irq_check_poll(desc))
  7.     goto out_unlock;

  8.     desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
  9.     kstat_incr_irqs_this_cpu(irq, desc);

  10.         /*
  11.          * If its disabled or no action available
  12.          * keep it masked and get out of here
  13.          */
  14.     if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data)))
  15.         goto out_unlock;

  16.     handle_irq_event(desc);

  17.     if (!irqd_irq_disabled(&desc->irq_data) && !(desc->istate & IRQS_ONESHOT))
  18.         unmask_irq(desc);
  19.     out_unlock:
  20.     raw_spin_unlock(&desc->lock);
  21. }
复制代码
这个函数里有这样的逻辑:

获取自旋锁
屏蔽中断线(包括应答)
查看是否禁用中断线(如果禁用直接解锁退出)
恢复屏蔽的中断线
释放自旋锁

有三个问题:
1. 根据上边的逻辑屏蔽中断线与禁止中断线是两回事吧 他们有什么区别呢(屏蔽中断线作用于中断控制器 关中断作用于cpu的IF标记 禁用中断线要怎么理解)
2. 可能的中断线被禁用的时间点 (上边的执行逻辑作用于自旋锁上 理论上此时不应该有其他cpu禁用中断线 在中断被触发时 应该也不会禁用中断线 那禁用中断线就是在这两个时间点之间?)
3. 既然可以屏蔽中短线 为什么还要禁用中断线(在中断的处理逻辑中 我只看到了判断是否禁用 没有看到禁用或者启用的动作)






您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP