免费注册 查看新帖 |

Chinaunix

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

继续讨论中断 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-01 09:58 |只看该作者 |倒序浏览
不要扯远了,就以8259/x86/up为例

1.为什么在处理中断过程中需要mask对应的中断?
  因为在处理中断过程中,IE位是关闭的。mask有必要么?

2.linux在处理完中断后,在什么位置打开的中断使能位,直觉应该在do_IRQ之后,softirq之前吧,找了半天没找到

论坛徽章:
0
2 [报告]
发表于 2008-04-01 10:06 |只看该作者

回复 #1 bluesky_jxc 的帖子

对于1我能想到的就是,在中断处理过程中可能打开中断,如果一些设备不停发送中断,可能会造成中断重入问题。
除此之外还有其他原因么?

论坛徽章:
0
3 [报告]
发表于 2008-04-01 11:03 |只看该作者
在__do_IRQ 函数中释放被禁止的中断线。
代码摘录:
  fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs)
{
        irq_desc_t *desc = irq_desc + irq;
        struct irqaction * action;
        unsigned int status;

        kstat_this_cpu.irqs[irq]++;
        if (desc->status & IRQ_PER_CPU) {
                irqreturn_t action_ret;

                /*
                 * No locking required for CPU-local interrupts:
                 */
                desc->handler->ack(irq);
                action_ret = handle_IRQ_event(irq, regs, desc->action);
                if (!noirqdebug)
                        note_interrupt(irq, desc, action_ret);
                desc->handler->end(irq);//对应8259执行end_8259A_irq( ),释放中断线                return 1;
        }

论坛徽章:
0
4 [报告]
发表于 2008-04-01 11:08 |只看该作者

回复 #3 dengcainiao 的帖子

sorry,可能是我没有说清楚。
我想问的是什么时候打开CPU的中断使能位,IE

你贴的代码是打开前面屏蔽的一个中断线而已

论坛徽章:
0
5 [报告]
发表于 2008-04-01 11:13 |只看该作者
至于第一点,我记得对于非SA_INTERRUPT中断,IF位被打开

[ 本帖最后由 dengcainiao 于 2008-4-1 11:14 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-04-01 11:16 |只看该作者
handle_IRQ_event中有代码如下:
fastcall int handle_IRQ_event(unsigned int irq, struct pt_regs *regs,
                                struct irqaction *action)
{
        int ret, retval = 0, status = 0;

        if (!(action->flags & SA_INTERRUPT))
                local_irq_enable();

论坛徽章:
0
7 [报告]
发表于 2008-04-01 11:20 |只看该作者

回复 #6 dengcainiao 的帖子

这也只是一种情形下打开,如果我设置了SA_INTERRUPT呢?那中断又在哪里打开呢?

论坛徽章:
0
8 [报告]
发表于 2008-04-01 11:23 |只看该作者

回复 #5 dengcainiao 的帖子

如果没有设置SA_INTERRUPT,那么isr就是允许该中断服务程序被打断了。
仅仅因为重入问题吗?

论坛徽章:
0
9 [报告]
发表于 2008-04-01 11:27 |只看该作者
Linux的中断确实是可以嵌套执行的,对于SA_INTERRUPT的情况我感觉应该是在中断返回前开中断操作,具体的可以看看代码

[ 本帖最后由 dengcainiao 于 2008-4-1 11:29 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-04-01 11:34 |只看该作者

回复 #9 dengcainiao 的帖子

如果找到了我就不会来发帖子了,sigh
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP