LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: cyx__2006

请问linux2.6中硬件中断处理程序能否被新的硬件中断处理程序打断?我指的是顶半部,不是

[复制链接]
发表于 2007-7-26 21:20:26 | 显示全部楼层
Post by seskissinger
有的说可以中断,有的说不能,到底能不能呢?
回答是,要看具体的中断处理程序,中断处理程序在申请的时候,调用函数
int request_irq(unsigned int irq,irqreturn_t (*handler) (int,void *,struct pt_reg *),unsigned long irqflags,等等)
最重要的是irqflags参数,可以为0,也可以为SA_INTERUPT,如果定义为SA_INTERUPT,表示该中断处理程序是一个快中断处理程序,在该中断处理程序执行过程中是不允许中断的
但是如果定义为0,在通用的中断处理函数中,会对其进行检查,
if(!(action->flags&SA_INTERUPT))
__sti();
看,中断是打开的,也就是说,允许中断的nested,否则,中断是关闭着的
这表明,关中断是个既不可不用,又不可乱用的手段


我觉得也是这个意思,还有一点我想问的是,在中断上下文中,比如内核正在运行一个tasklet,被打断了以后,那么这个被打断的tasklet以后还能不能运行?
还有,如果中断处理程序没有设置SA_INTERUPT,那么被中断后还能不能继续运行?
还有,中断上下文中的上半部和下半部允不允许被其他进程抢占?
回复 支持 反对

使用道具 举报

发表于 2007-7-27 09:00:37 | 显示全部楼层
因为下半部(softirq)是采用kernel thread实现的,所以是有上下文的。所以被中断时肯定会保存上下文,ISR结束以后继续执行。
回复 支持 反对

使用道具 举报

发表于 2007-7-27 11:49:26 | 显示全部楼层
Post by realtang
因为下半部(softirq)是采用kernel thread实现的,所以是有上下文的。所以被中断时肯定会保存上下文,ISR结束以后继续执行。

谢谢!下半部是采用kernelthread实现的,那么中断上下文(在运行软中断和tasklet时)和内核进程上下文有什么区别呢?如果上半部(如果)被中断的话,会保存上下文吗?
回复 支持 反对

使用道具 举报

发表于 2007-7-27 13:35:45 | 显示全部楼层
what about NMI
回复 支持 反对

使用道具 举报

发表于 2007-7-27 18:55:38 | 显示全部楼层
Post by seafrog
谢谢!下半部是采用kernelthread实现的,那么中断上下文(在运行软中断和tasklet时)和内核进程上下文有什么区别呢?如果上半部(如果)被中断的话,会保存上下文吗?

上半部被中断也会保存一些当前寄存器包括返回地址这些信息。
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表