|
发表于 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,那么被中断后还能不能继续运行?
还有,中断上下文中的上半部和下半部允不允许被其他进程抢占? |
|