中断小笔记
1.中断处理函数可以被其他中断线上的中断处理函数所中断
2.如果中断线是共享的,那么当该中断线上有中断发生时,cpu将响应该中断,并依次调用该中断线上的所有已注册的中断处理函数,每个中断处理函数将进行判断,是否是自己对应的硬件设备发生的中断,不是则返还IRQ_NONE,否则返回IRQ_HANDLE,并响应该中断。
3.在内核中执行do_IRQ()响应中断,首先判断该线上是否有中断处理程序,然后在该线上运行所有的中断处理程序。
4.总的来说中断是属于大家的,所有在同一个中断号内的需要处理的例程(同一中断号内的处理例程可能有多个)都将调用这个中断处理程序,然而在释放中断处理程序的最后一个参数中的dev_id(注册中断函数中也有这个参数,它的作用是为后来删除的时候提供唯一标志)来区分到底要删除那个处理程序.而确定到底是那个设备的则通过读取硬件设备的状态寄存器,以便中断处理程序进行检查
5.共享一个中断线的中断处理程序被挂在一个与中断线有关的队列中,当中断发生时,中断处理程序负责循环执行相应队列中的action,而与设备对应的处理程序会检测是不是它要服务的设备产生的中断,如果不是马上返回,如果是就接着进行服务。每一IRQ都于一个list相关联,如果IRQ是共享的,那么list里会有多个action,每一个action代表已经注册到该IRQ上的ISR。所以所有这些ISR都被执行了一次。所以,为了区分中断发生在什么设备,ISR通常都需要查询设备状态。
6.中断处理函数不能阻塞