Linux kernel Linux中共享IRQ的并发中断处理
在处理程序的上半部分可以做或需要做什么。我看到中断首先被禁用,所以当这一操作完成后,我们是否会错过处理当前中断时可能到达的同一IRQ线上的其他中断Linux kernel Linux中共享IRQ的并发中断处理,linux-kernel,linux-device-driver,interrupt,interrupt-handling,irq,Linux Kernel,Linux Device Driver,Interrupt,Interrupt Handling,Irq,在处理程序的上半部分可以做或需要做什么。我看到中断首先被禁用,所以当这一操作完成后,我们是否会错过处理当前中断时可能到达的同一IRQ线上的其他中断 或者是否有任何实体跟踪丢失的中断,以便在当前运行的ISR结束时再次为该行启用中断后可以处理这些中断?中断处理程序应尽可能少 并不总是需要禁用中断。有些体系结构使用嵌套中断。无论如何,如果你禁用中断,你应该用一两个命令,而不是更多。这将造成延迟,并可能错过中断 当我处理中断时,我通常做两件事。一种是清除导致中断的标志。第二个是在tasklet、work
或者是否有任何实体跟踪丢失的中断,以便在当前运行的ISR结束时再次为该行启用中断后可以处理这些中断?中断处理程序应尽可能少 并不总是需要禁用中断。有些体系结构使用嵌套中断。无论如何,如果你禁用中断,你应该用一两个命令,而不是更多。这将造成延迟,并可能错过中断 当我处理中断时,我通常做两件事。一种是清除导致中断的标志。第二个是在tasklet、workqueue等之后触发一些函数
请注意,不要在中断处理程序中使用任何可能会休眠的方法,如printf或获取中断。中断处理程序应尽可能最小化 并不总是需要禁用中断。有些体系结构使用嵌套中断。无论如何,如果你禁用中断,你应该用一两个命令,而不是更多。这将造成延迟,并可能错过中断 当我处理中断时,我通常做两件事。一种是清除导致中断的标志。第二个是在tasklet、workqueue等之后触发一些函数
请注意,不要在中断处理程序中使用任何可能会休眠的方法,如printf或获取中断。您应该正确确认中断以避免IRQ风暴。 处理中断本身-如果你有一个大的工作要做,卸载到下半部分 禁用中断时会发生什么情况:在x86上,cli指令禁用当前ISR运行位置上的中断。一个IRQ被缓冲,因此当中断用sti恢复时,它被传递
当使用APIC中断时,缓冲发生在内核本身。内核确认APIC中断,并在调用enable_irq时再次触发它。您应该正确确认中断以避免irq风暴。 处理中断本身-如果你有一个大的工作要做,卸载到下半部分 禁用中断时会发生什么情况:在x86上,cli指令禁用当前ISR运行位置上的中断。一个IRQ被缓冲,因此当中断用sti恢复时,它被传递
当使用APIC中断时,缓冲发生在内核本身。内核确认APIC中断,并在调用enable_irq时再次触发它。关于共享中断的简要说明:共享中断线应始终使用电平敏感设备,这些设备也应具有相同的高电平和低电平。对于边缘触发中断,无法保证在一个设备触发后,但在其返回稳定状态之前,另一个设备不会触发。这成为一种无法避免的竞争状况
另一方面,电平触发中断保持激活状态,直到触发它的设备上的标志被清除。在处理第一个设备时,如果第二个设备触发,则它将等待IRQ线保持激活状态,直到处理程序再次启用IRQ线。关于共享中断的简要说明:共享中断线应始终使用电平敏感设备,这些设备也应具有相同的高电平和低电平。对于边缘触发中断,无法保证在一个设备触发后,但在其返回稳定状态之前,另一个设备不会触发。这成为一种无法避免的竞争状况 另一方面,电平触发中断保持激活状态,直到触发它的设备上的标志被清除。在处理第一个设备时,如果第二个设备触发,则它将等待IRQ行保持活动状态,直到处理程序再次启用IRQ行