关于do_irq的疑问
2.4情景内核分析里面do_irq这部分216页提到对同一通道的中断处理会串行化,问一下会丢失中断么?因为它只靠一个irq_pending标志位来表示,而且没处理一次就会清一次这个标志,如果同一通道有多个中断,怎么办?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
2.4情景内核分析里面do_irq这部分216页提到对同一通道的中断处理会串行化,问一下会丢失中断么?因为它只靠一个irq_pending标志位来表示,而且没处理一次就会清一次这个标志,如果同一通道有多个中断,怎么办?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
1.不会丢,即使此轮没有处理,下轮也会处理,因为已经将irq_pending位置上了.
2.同一通道的多个中断,会在循环中处理,直到irq_pending位不为1退出.
2.6.10的__do_irq:
复制代码注意到设置irq_pending标志位是有锁保护的,也就是说就算有中断发生也不会马上设置这个标志。也是顺序等待响应过之后才设置。
如果在handle_irq_event的时候发生了不只一次的中断 怎么搞 这个函数执行前是解锁的 如果此时触发多个同通道中断 都是置为pending
回复 2# chishanmingshen
http://www.linuxforum.net/forum/ ... 260&type=thread 网上看到了这个
回复 4# 木叉叉木大
我的理解,如果不同CPU在这期间发生中断,那么就好几个CPU同时执行这里的代码,由于锁的保护,仍旧实现串形执行。
如果同一个CPU在这期间两个中断源同时发生中断,我就不知道了
多个cpu 如果一个cpu在handle_irq_event 那么这时是不持有锁得,如果cpu2发生同一通道的中断,只会简单的把irq_desc[irq]->status的pending位置1,然后返回,这期间也是spin_lock spin_unlock对吧 如果之后cpu3来个同一通道的中断,怎么搞? 第一个中断还没有退出handle_irq_event
回复 7# 木叉叉木大
发生中断到设置irq_pending还是要一步一步来,通过do_irq --> __do_irq,那么在设置irq_pending之前还是要上锁吧
我的理解也是这样的:
通过自旋锁来保护pending标志位(多核之间共享), 目的是将所有cpu的同一通道的中断都在第一个处理程序中
串行处理.
这个现在已经基本不用了