免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP