免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2929 | 回复: 8

外部中断处理中的几个问题 [复制链接]

论坛徽章:
0
发表于 2011-10-30 14:09 |显示全部楼层

1 当有外部中断时,硬件自动关闭了cpu的中断,并保存关键的上下文,那么是不是在执行我们用request_irq()注册的中断函数是也是在关中断的情况下进行的?因为我再源代码中没有找到开中断的代码啊!
2 在外部中断处理完成后,要调用irq_exit()进行软终端的处理,软终端处理不会也是在关中断情况下进行的吧?没有看到开中断的代码啊!
   在irq_exit()函数中的代码
     if (!in_interrupt() && local_softirq_pending())
                invoke_softirq();
     只有不在中断中时才执行软终端处理,如果之前没有开中断的话,那不就是在中断状态了,就不可能执行软终端处理了?
   
    找不到开中断到底在什么时候,想找到代码作证。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
发表于 2011-10-30 16:09 |显示全部楼层
看看desc->chip->... 做了什么吧

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2011-10-30 20:20 |显示全部楼层
回复 1# q631951221


    这一行是判断有没有嵌套。

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-10-30 20:46 |显示全部楼层
楼上2位说得没错.都比较靠里层.

那外层呢?
进中断门后关中断,出中断门时开中断么?

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
发表于 2011-10-31 09:07 |显示全部楼层
本帖最后由 tempname2 于 2011-10-31 09:15 编辑

1。老版本在__do_IRQ -->  handle_IRQ_event里打开了。新版本的Generic IRQ调用irq_desc->handle_irq,比如边沿触发中断对应的就是handle_edge_irq,这个里面再滑到handle_IRQ_event。

2。那个是说,如果当前中断打断的是另一个中断或者是已在执行softirq我就不处理softirq了。最后的效果是softirq不会抢占softirq或者中断。

__do_softirq里会打开中断。

论坛徽章:
0
发表于 2011-11-02 00:01 |显示全部楼层
回复 2# amarant


    这里面的函数是先开中断,然后在执行完成中断处理函数后又关中断了,问题就是后面还要执行软终端啊,为什么就关中断了,应该一直开着啊?

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
发表于 2011-11-02 07:55 |显示全部楼层
回复 6# q631951221


    5楼说的明白 多跟跟代码就知道了。觉得疑惑就继续跟到__do_softirq里面去

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2011-11-02 08:18 |显示全部楼层
回复 6# q631951221
问题就是后面还要执行软终端啊,为什么就关中断了,应该一直开着啊


软中断执行的时候,会重新打开中断的。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
发表于 2011-11-02 11:37 |显示全部楼层
回复 1# q631951221

现在中断线程化了,执行中断处理函数前不会开中断了,在处理函数里开了中断,出来后还会发出警告。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP