linux中什么是chained irq,什么时候需要使用它们?

2023-11-23

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


什么是链式中断?

有两种方法可以在父(中断控制器)设备的 IRQ 处理程序中调用子设备的中断处理程序。

  1. 连锁中断:

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

    • “嵌套”意味着这些中断可以被另一个中断打断;但它们并不是真正的硬件 IRQ,而是线程 IRQ
    • handle_nested_irq()用于创建嵌套中断
    • 子 IRQ 处理程序在 new 内部被调用thread由...制作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方法

什么是chained_irq_enter and chained_irq_exit do

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

  1. For FastEOI中断控制器(最现代的方式):

    • chained_irq_enter()没做什么
    • chained_irq_exit() calls irq_eoi()回调通知中断控制器中断处理完成
  2. 对于具有屏蔽/取消屏蔽/确认功能的中断控制器

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

因为在中断发生后,irq线被禁用,但是chained_irq_enter如果线路已经被禁用,那么调用与屏蔽中断相关的函数为什么要屏蔽中断?

IRQ 线被禁用。但我们仍然需要在中断处理结束时写入EOI寄存器。或者发送 ACK 以获取边沿级中断。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux中什么是chained irq,什么时候需要使用它们? 的相关文章

随机推荐

  • 是否可以指定等待代码运行的最长时间?

    我有一段代码需要从中获取输出 gps get gps data 虽然如果需要很长时间才能获得输出get gps data 我想取消该过程并设置gps to None 修改函数是不可能的 那么有没有办法指定等待某些代码运行的最大时间 并在达到
  • 自定义元素设置:构造函数与connectedCallback

    我是 Web 组件的新手 我注意到一些示例在自定义元素的构造函数中设置 dom 而其他示例则在connectedCallback 中设置 dom 由于两者似乎都工作正常 尽管我只尝试了 Chrome 我认为主要区别是用户在 js 中创建元素
  • 在 Safari 和 Mobile Chrome 上以编程方式播放有声视频

    随着 OSX High Sierra 的发布 Safari 中的新功能之一是网站上的视频将不再自动播放 脚本也无法启动它 就像在 iOS 上一样 作为用户 我喜欢该功能 但作为开发人员 它向我提出了一个问题 我有一个包含视频的浏览器内 HT
  • 将 Python 列表拆分为重叠块的列表

    这个问题类似于将列表切片为子列表列表 但就我而言 我想将每个先前子列表的最后一个元素作为下一个子列表中的第一个元素 我必须考虑到最后一个子列表始终必须至少有两个元素 例如 list a b c d e f g h 大小为 3 的子列表的结果
  • ASP.NET MVC 3 动态控件

    我是 MVC 新手 想知道如何在 MVC3 中动态创建控件 就我而言 情况是有一个表格 候选人可以在其中输入他的工作经历 他可以根据他之前工作过的公司数量添加多个条目 因此 当用户说 添加另一个 时 需要动态添加用户输入详细信息的控件集 我
  • 使用 jstree ui 时,如何让 jstree 中的叶节点在单击时打开其超链接?

    我使用jtree显示一个层次结构 数据如下 div ul li a href C a ul li a href Music a ul li a href Z a ul li a href Hans Zimmer a ul li a href
  • 在javascript中获取矩阵的所有可能选项

    我在 JavaScript 中有一个 item 对象 该项目可以具有如下设置 颜色 尺寸等 我需要在数组中获取所有可能的组合 假设我们有一个看起来像这样的项目 var newItem name new item Settings name
  • 为什么函数调用中的尾随逗号不是语法错误?

    我希望这段代码会失败 因为逗号充当参数分隔符 没有第二个参数并且foo只接受一个参数 fn foo a u8 fn main foo 3 大多数语言接受逗号分隔列表中的尾随逗号 例如参数列表或元组或数组文字 如果您将列表拆分为多行 这会很有
  • Java中的字符串初始化

    String str1 String str2 null String str3 String str4 new String String str5 new String 我知道对于上面的第三次初始化 字符串对象是在字符串池中初始化的 第
  • 取消引用空指针

    希望对答案有更好的理解 给出this帖子 有人可以向我解释一下吗 以下循环缓冲区实现是可能的 并且如果 不 为什么不 define CB TYPE CHAR 0 define CB TYPE FLOAT 1 typedef struct C
  • 拒绝所有不阻止返回重定向

    Nginx 的表现对我来说出乎意料 这是两个简化的位置块 这按预期工作 返回 403 错误 location deny all root var www test 我预计会出现 403 错误 然而 这会返回 301 并重定向 locatio
  • 我应该在所有 iOS 项目的其他链接器标志中包含“-ObjC 和 -all_load”吗? [复制]

    这个问题在这里已经有答案了 可能的重复 all load 链接器标志有什么作用 我看到大多数静态库都要求你这样做 所以我将它们添加到我的所有项目中 添加这个似乎没有副作用 有一个副作用 构建阶段需要很多时间 ObjC 允许静态库使用 Obj
  • 在 TypeScript 中扩展基本类型,错误:“_this 未定义...”

    我正在尝试用 TypeScript 重写一些 JavaScript 代码 其中一些代码引用了我添加到字符串对象原型中的扩展 String prototype format function var formatted this for va
  • Python将numpy数组插入sqlite3数据库

    我试图在 sqlite3 数据库中存储大约 1000 个浮点的 numpy 数组 但我不断收到错误 InterfaceError 绑定参数 1 错误 可能不受支持的类型 我的印象是 BLOB 数据类型可以是任何类型 但它绝对不适用于 num
  • 在表的所有列中搜索某个值?

    我一直在寻找这个问题的答案 但我所能找到的只是人们询问如何在数据库中的所有表的所有列中搜索值 我只想搜索特定表的所有列 人们为所有表问题提出的代码很复杂 我很难弄清楚它到底在哪里搜索特定的表 有人可以帮我吗 谢谢 只需使用一些第三方工具即可
  • Eclipse 不一致:资源泄漏:“<未分配的可关闭值>”从未关闭

    如果我有以下代码 public OutputStream test boolean condition throws FileNotFoundException return condition null new FileOutputStr
  • 如何以编程方式知道 Grails 中是否存在视图或布局文件

    我想以编程方式知道 grails 中是否存在视图或布局 我正在考虑获取绝对路径并要求 File exists 但我不知道如何为每个环境获取此路径 我曾尝试过groovyPagesTemplateEngine getUriWithinGrai
  • 将 PHP 对象存储在会话变量中

    我是面向对象编程的新手 正在编写我的第一门课程 我为一家保险经纪人工作 并尝试使用类来存储有关报价的信息 并将对象存储为会话变量 问题是 当我查看会话变量时 我得到 sessionName PHP Incomplete Class Obje
  • 这是 Files.lines() 中的错误,还是我误解了并行流的某些内容?

    环境 Ubuntu x86 64 14 10 Oracle JDK 1 8u25 我尝试使用并行流Files lines 但是我要 skip 第一行 它是一个带有标题的 CSV 文件 因此我尝试这样做 try final Stream
  • linux中什么是chained irq,什么时候需要使用它们?

    什么是链式IRQ 什么是chained irq enter and chained irq exit这样做 因为在中断发生后 IRQ 线被禁用 但是chained irq enter正在调用与屏蔽中断相关的函数 如果线路已经被禁用 为什么要