gpt4 book ai didi

linux - 什么是 linux 中的链式 irq,什么时候需要使用它们?

转载 作者:IT王子 更新时间:2023-10-29 00:24:37 26 4
gpt4 key购买 nike

什么是链式 IRQ? chained_irq_enterchained_irq_exit 是做什么的,因为在中断产生后,IRQ 线被禁用,但是chained_irq_enter 正在调用与屏蔽中断相关的函数。如果线路已被禁用,为什么要屏蔽中断?

最佳答案

what is chained irq ?

如何在父(中断 Controller )设备的 IRQ 处理程序中调用子设备的中断处理程序有两种方法。

  1. 链式中断:

    • “链式”意味着那些中断只是函数调用链(例如,从 GIC 中断处理程序调用 SoC 的 GPIO 模块中断处理程序,就像函数调用一样)
    • generic_handle_irq() 用于中断链接
    • 在父 HW IRQ 处理程序内部调用子 IRQ 处理程序
    • 您不能调用可能在链式(子)中断处理程序中休眠的函数,因为它们仍在原子上下文(HW 中断)中
    • 这种方法通常用于 SoC 内部 GPIO 模块的驱动程序
  2. 嵌套中断

    • “嵌套”意味着那些中断可以被另一个中断打断;但它们并不是真正的 HW IRQ,而是线程 IRQ
    • handle_nested_irq() 用于创建嵌套中断
    • 子 IRQ 处理程序在 handle_nested_irq() 函数创建的新线程 中被调用;我们需要它们在进程上下文中运行,以便我们可以调用休眠总线函数(如可能休眠的 I2C 函数)
    • 您可以调用可能在嵌套(子)中断处理程序中休眠的函数
    • 这种方法常用于外部芯片的驱动程序,如GPIO扩展器,因为它们通常通过I2C总线连接到SoC,而I2C功能可能会休眠

说到上面讨论的驱动程序:

  • irq-gic 驱动程序使用 CHAINED GPIO irqchips 方法来处理具有多个 GIC 的系统; this提交添加该功能
  • gpio-omap 驱动程序(如上所述)使用GENERIC CHAINED GPIO irqchips 方法。参见 this犯罪。它是从使用常规 CHAINED GPIO irqchips 转换而来的,因此在实时内核上它将线程化 IRQ 处理程序,但在非 RT 内核上它将是硬 IRQ 处理程序
  • 'gpio-max732x' 驱动使用NESTED THREADED GPIO irqchips方法

what does chained_irq_enter and chained_irq_exit do

这些函数实现了硬件中断流控制,即通知中断 Controller 芯片何时屏蔽和取消屏蔽当前中断。

  1. FastEOI中断 Controller (最现代的方式):

    • chained_irq_enter() 什么都不做
    • chained_irq_exit()调用irq_eoi()回调告诉中断 Controller 中断处理完成
  2. 对于具有屏蔽/取消屏蔽/确认功能的中断 Controller

    • chained_irq_enter() 屏蔽当前中断,如果设置了 ack 回调则确认它
    • chained_irq_exit() 取消屏蔽中断

because after an interrupt is arised the irq line is disabled, but chained_irq_enter is calling functions related to masking interrupts if the line is already disabled why to mask the interrupt ?

IRQ 线被禁用。但是我们在中断处理的最后还需要写入EOI寄存器。或者为边沿级中断发送 ACK。

This解释了为什么在中断处理程序中禁用中断。

关于linux - 什么是 linux 中的链式 irq,什么时候需要使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com