目前是在mips体系下。
设备驱动上,对disable_irq和local_irq_disable的解释模棱两可,点到为止而已:
LDD 中文第三版 P273
禁用单个中断:
“调用disable_irq(int irq),将会使中断控制器PIC中,指定中断的掩码被设置,于是所有的处理器都禁用该IRQ”
那么该句的潜在意思就是,一旦PIC把该屏蔽位恢复,CPU会重新检测到该中断,也就是说,通过disable_irq屏蔽的中断,并没有丢失,而只是暂时不发送到CPU去
[color=Blue]总体的讲,disable_irq(int irq),在mips上的实现,实际就是desc->chip->disable(irq); [/color]
禁用所有的中断:
“local_irq_disable() , 关闭当前处理器上的中断发送”
这句的意思就是,将CPU的标志寄存器中的使能中断位关闭。那么该中断便不可挽回的丢失了。
local_irq_disable做的事,就是先把状态寄存器最后5位置0(最后一位是CPU中断屏蔽位)
然后,mfc0 , $2, 1 或者 mfc0 , $12
阅读(1060) | 评论(0) | 转发(0) |