Linux中断 -- 中断路由、优先级、数据和标识

目录

1.中断路由

2.中断优先级

3.中断平衡

4.Linux内核中重要的数据结构

5.中断标识


        承前文,本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。

1.中断路由

Aset affinity flow

       GIC文中有提到SPI类型中断的路由控制器寄存器为GICD_IROUTER,设置该寄存器即配置了中断的路由方式。内核中irq_set_affinity_hint、__irq_set_affinity、irq_set_affinity_locked等都可以设置对应的中断的路由即affinity,以irq_set_affinity_hint为例来说明affinity设置的过程,对应代码流程中如上图。

        irq_set_affinity_hint 最终会调用到GIC的中的gic_set_affinity函数,通过该函数将系统需要设置的中断的affinity值设置到该中断对应的GICD_IROUTER寄存器;当该中断触发时GIC会根据该中断对应的GICD_IROUTER寄存器值,将该中断路由到指定的PE去处理。

        affinify值即CPU对应的MPIDR_EL1(关于MPIDR_EL1寄存器解释,看一查看另一文章 CSDARM处理器 -- ARM64 MPIDR_EL1寄存器-CSDN博客CSD),Linux系统中有多处记录该中断affinify值对应的cpu number,如上图的三处:

                irq_desc->affinity_hint    系统要设置的该中断可路由到的CPU,可以是某个特定的

                        CPU或者是CPU的集合,该CPU可以是unpluged state。

                irq_data->irq_common_data->effective_affinity    最终设置到该中断

                        GICD_IROUTER寄存器的affnity值对应的CPU,特定某个CPU,该CPU

                        是系统要设置的该中断可以路由的CPU集合的中的一个。

                irq_data->irq_common_data->affinity    同irq_desc->affinity_hint,系统要设

                        置的该中断可路由到的CPU。

        gic_set_affinity函数负责中断对应的GICD_IROUTER寄存器的最终设置。其中有两种设置方式:强制和非强制方式。强制方式时,会取系统要设置的可路由的CPU集合中第一个(有地位到高位)为1的bit所对应CPU的MPIDR_EL1值;非强制时,会取系统要设置的可路由的CPU集合中任意一个online CPU的MPIDR_EL1值。

2.中断优先级

        kernel-5.10内核,除虚拟化相关逻辑外,仅对NMI中断的处理优先级进行了配置,其他如SPI类型的中断都没有设置对应的中断优先级,即这些中断的优先级为GIC寄存器中的默认值0,这些SPI的中断具有相同的优先级,所以这些中断不存在中断竞态问题(关于中断竞态问题查看ARM处理器 -- 中断控制器GICv3_interrupt_routing_mode-CSDN博客 的3.4 运行优先级和竞态)。

                                                        ARM GICD_IPRIORITYn寄存器

3.中断平衡

        中断平衡服务运行在用户态,非内核态,目前高通方案中有此服务。对此不做详细介绍,感兴趣可参考该服务代码:

https://github.com/Irqbalance/irqbalance

4.Linux内核中重要的数据结构

如上图Linux内核中有两个重要的irq相关数据 :

        4.1  struct irq_desc irq_desc[NR_IRQS] 用于存放系统所有irq的中断描述符,该数据在early_irq_init()时被初始化为默认值,在中断控制器和中断在注册时被进一步被设置为中断相关的属性和数据。irq_desc数组的index为linux系统对应的中断号(即软件中断号),struct irq_desc是在表述中断的自身的系统属性。而其irq_desc->irq_data 即struct irq_data更多的是在说明该中断硬件属性(如其对应的硬件中断、其所属的硬件中断控制器等)。irq_data->irq 即为irq_desc数组的index、也就是系统软件中断号;irq_data->hwirq该中断所属的中断控制器的硬件中断号。irq_data->irq 与 irq_data->hwirq在系统是一一对应的、能够相互指正,这种对应关系是中断控制器在注册时通过irq_create_mapping()函数完成的。

        irq_desc中还有一个重要的元素是action,对应的结构是struct  irqaction,该j结构中的数据会通过request_threaded_irq()等类似的中断注册函数进行填充。如图中所以基本与request irq函数中的入参相对应。

      4.2 irq_domain_list是内核中另一个中断相关的重要数据,是一个指向struct irq_domian结构的链表。irq_damain是在中断控制器注册时通过irq_domain_create_tree函数创建,其与系统中注册的中断控制器相对应,故irq_data->domain 与irq_data->chip相对应,irq_data->domain为中断控制器的系统属性,irq_data->chip为中断控制器的硬件特性。

        系统中正式因为有irq_desc数组,所以可以通过系统中断号遍历到该该中断对对对应的所有特性,如对应的中断控制器、硬件中断号、中断处理函数、中断状态等等。

        【从数据的角度看,初始类的函数是在为了完成数据结构的填充,其中数据代表状态;过程函数是在修改结构数据,也是在改变状态。】

5.中断标识

        中断注册时可设置的中断flag,这些flag影响中断chip及该中断irq_desc的属性。

中断注册标识意义
IRQF_SHARED多个外设共享一个中断信号;注册共享中断时,1.必须要传入注册设备的信息、否则无法设备哪个设备触发的中断; 2. 所有共享中断的中断触发类型必须相同; 3.共享同一硬件中断,如果有中断设置IRQF_ONESHOT/IRQF_PERCPU则共享该中断的其他中断也需要设置IRQF_ONESHOT/IRQF_PERCPU属性。 4.共享中断最好具有自动使能功能(即该中断不具备__IRQ_NOAUTOEN属性),否则该中断的使能可能不平衡;5.共享中断不能通过try_one_irq函数从秘书rounted状态恢复IRQF_COND_SUSPEND 仅对共享中断有意义,另IRQF_NO_SUSPEND 和 IRQF_COND_SUSPEND时不能同时存在的。
  
IRQF_PROBE_SHARED用于在IRQF_SHARED注册失败时打印异常的中断注册信息
__IRQF_TIMER用于标记为时钟中断
IRQF_PERCPU表示该中断可路由到任意CPU, 该标识的中断不能被强制设置为thread处理形式
IRQF_NOBALANCING表示该中断不支持 irq balancing
IRQF_ONESHOT用于支持thread的中断,当该中断的handler处理完成是不能使能的,直到该中断的thread_fn运行。
IRQF_NO_SUSPEND系统suspend时不会关闭此中断,但是并不保证此中断可以唤醒系统
IRQF_FORCE_RESUME当系统唤醒时,强制使能该中断;

        中断描述符的状态irq_desc -> status_use_accessors表示该该中的状态属性。

中断描述符的状态意义
IRQ_PER_CPU与注册中断时IRQF_PERCPU flag相对应,表示该中断可路由到任意CPU
IRQ_NOPROBE表示该中断不能被autoprobing,指设备自动探测中断号
IRQ_NOREQUEST标识该中断不能被 requst_irq() 申请
IRQ_NOAUTOEN表示该中断不具有自动使能能力,自动使能中断在完成注册后主动调用irq_startup(IRQ_RESEND)处理中断;IRQF_SHARED 共享中断要支持自动使能
IRQ_NO_BALANCING与注册中断时IRQF_NOBALANCINGflag对应,表示该中断不支持中断平衡、不能通过irq_set_affinity函数设置其亲和性。支持平衡也有另一个前提即支持 per cpu
IRQ_MOVE_PCNTXT支持migrated中断处理器上下文到其他处理器
IRQ_NESTED_THREAD表示该中断支持嵌套处理,当前Linux内核不支持中断嵌套
IRQ_NOTHREAD该中断不能通过thread处理
IRQ_PER_CPU_DEVID为PPI类型中断标识,具有该标识的中断有没有CPU独立变量percpu_dev_id,该类型中断通过request_precpu_irq函数进行注册
IRQ_IS_POLLED有此标识的中断会从suprious中断检测机制&core polling检测中剔除
IRQ_DISABLE_UNLAZY此标识时表示该中断控制器可能没有实现irq_disable函数,通过标识该中断desc中的中断状态来表示该中断disable

        中断要设置的或者反应中断对应的irqchip状态标识。

中断irqchip状态标识意义
IRQD_ACTIVATED表示该中断为active状态,代表该中断的irqchip链路已经OK;是 IRQD_IRQ_STARTED 的前一个状态。
IRQD_WAKEUP_STATE表示该中断具有唤醒系统能力
IRQD_IRQ_DISABLED与IRQD_IRQ_MASKED表示一致:代表该中断被关闭或者掩住;对应的函数为irq_disable/irq_enable
IRQD_IRQ_MASKED与IRQD_IRQ_DISABLED表示一致:代表该中断被关闭或者掩住;对应的函数为irq_mask/irq_unmask
IRQD_IRQ_INPROGRESS该中断正在被处理,即正执行该中断的处理函数
IRQD_WAKEUP_ARMED支持IRQD_WAKEUP_STATE属性的中断在系统待机时,该中中断会被IRQD_WAKEUP_ARMED标记表示该中不可休眠、该中断可以唤醒系统,
IRQD_AFFINITY_MANAGEDaffinity 是由kernel自动管理
IRQD_IRQ_STARTED表示该中断是started

        至此,对内核中断的学习、介绍就告一段落。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为HCIP Datacom H12-831 卷14

多选题 1、以下哪些Community属性可以保证BGP路由条目的传播范围只在AS内? A No_Export B No_Export_Subconfed C Interne D No_Advertise 正确答案 A,B 解析:Internet:缺省情况下,所有的路由都属于internet团体。具有此属性的路由…

回归预测 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于SSA-SVR麻雀算法优化支持向量机的数据…

Kong: Services and Routes 等基本属性

Services 在Kong Gateway中,服务是现有上游应用程序的抽象。服务可以存储插件配置和策略等对象的集合,并且可以与路由相关联。 定义服务时,管理员会提供名称和上游应用程序连接信息。连接详细信息可以在 url 字段中以单个字符串的形式提供…

RCC——使用HSE/HSI配置时钟

RCC 文章目录 前言一、背景二、仿真计算周期 2.1 2.2 三、MCO引脚输出时钟总结 前言 前期疑问:1、RCC是什么意思。 2、最终配好的72M是系统时钟吗? 3、一共有哪些时钟 本文目标:将PLL时钟配置成72M 疑问解答:最终配好的时钟是…

网上零食销售系统

技术架构: Servlet MySQL JSP 功能描述: 1.浏览商品 (1) 商品详细资料 (2) 商品编号 2.订购商品 3.购物车 4.用户信息维护 (1) 用户注册 (2) 用户…

嵌入式——实时时钟(RTC)

目录 一、初识RTC 1.简介 2.特性 3.后备寄存器和RTC寄存器特性 二、RTC组成 1.相关寄存器 (1)控制寄存器高位(RTC_CRH) (2)控制寄存器低位(RTC_CRL) (3&#xf…

『建议收藏』OpenAI官方出的Prompt提示词教程中文版来了!

一些结论 六大策略: 写清晰的指令 提供参考文本 将复杂任务分解为更简单的子任务 给模型时间“思考” 使用外部工具 系统性测试变化 提高结果质量的六大策略 写清晰的指令 这些模型无法读懂你的想法。如果输出过长,要求简短回复;如果输出过于简单…

【python】argparse解析参数的过程

python基础知识 python文件解析if __name__ __main__的作用import到底导入了什么?argparse解析命令行参数的过程 python文件解析 Python和C语言的编译、执行过程有很大区别。我们先回顾一下c语言的执行过程,首先代码文件要编译,编译通过&am…

【C++杂货铺】详解类和对象 [上]

博主:代码菌-CSDN博客 专栏:C杂货铺_代码菌的博客-CSDN博客 目录 🌈前言🌈 📁 面向对象语言的特性 📁 类 📂 概念 📂 定义 📁 访问限定符 📂分类 &#x…

CMake 完整入门教程(一)

1 前言 每一次学习新东西都是很有乐趣的,虽然刚开始会花费时间用来学习,但是实践证明,虽然学习新东西可能会花费一些时间,但是它们带来的好处会远远超过这些花费的时间。学习新东西是值得的,也是很有乐趣的。 网络上…

【K8S 云原生】K8S的图形化工具——Rancher

目录 一、rancher概述 1、rancher概念 2、rancher和K8S的区别: 二、实验 1、安装部署 2、给集群添加监控: 3、创建命名空间: 4、创建deployment: 5、创建service: 6、创建ingress: 7、创建hpa 8…

基于高精度YOLOv8开发构建公共场景下行人人员姿态估计分析识别系统

姿态估计(PoseEstimation)在我们前面的相关项目中涉及到的并不多,CV数据场景下主要还是以目标检测、图像识别和分割居多,最近正好项目中在使用YOLO系列最新的模型开发项目,就想着抽时间基于YOLOv8也开发构建实现人体姿…

[UI5 常用控件] 02.Title,Link,Label

文章目录 前言1. Title1.1 结合Panel1.2 结合Table1.3 Title里嵌套Link 2. Link3. Label3.1 普通用法3.2 在Form里使用 前言 本章节记录常用控件Title,Link,Label。 其路径分别是: sap.m.Titlesap.m.Linksap.m.Label 1. Title Title可以结合其他控件一起使用 1.…

总结红包雨项目的所有代码,包括添加图片,分享按钮,红包雨,用户是否有抽奖逻辑判断

整体实现效果: 需要用的图片: html: <body><div id"app"><!-- <div class"share-box"><img src"./share_box.png" alt"share-button"></div> --><!-- img图片 --><div class"gif-…

JVM基础知识汇总篇

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一

随着 OpenAI 在多模态方面的最新进展&#xff0c;想象一下将这种能力与视觉理解相结合。 现在&#xff0c;您可以在 Streamlit 应用程序中使用 GPT-4 和 Vision&#xff0c;以&#xff1a; 从草图和静态图像构建 Streamlit 应用程序。帮助你优化应用的用户体验&#xff0c;包…

《合成孔径雷达成像算法与实现》Figure5.18

clc clear close all距离向参数 R_eta_c 20e3; % 景中心斜距 Tr 25e-6; % 发射脉冲时宽 Kr 0.25e12; % 距离向调频率 Fr 7.5e6; % 距离向采样率 Nrg 256; % 距离线采样点数 Bw abs(Kr*Tr); …

.NET绿色开源一键自动化下载、安装、激活Office的利器

前言 今天分享一款.NET开源、绿色、安全、无毒的支持一键自动化下载、安装、激活Microsoft Office的利器&#xff1a;LKY_OfficeTools。 工具介绍 一键自动化下载、安装、激活 Microsoft Office 的利器。绿色、开源、安全、无毒。 目前包含的功能&#xff1a; 一键快速下载、…

【机器学习300问】16、逻辑回归模型实现分类的原理?

在上一篇文章中&#xff0c;我初步介绍了什么是逻辑回归模型&#xff0c;从它能解决什么问题开始介绍&#xff0c;并讲到了它长什么样子的。如果有需要的小伙伴可以回顾一下&#xff0c;链接我放在下面啦&#xff1a; 【机器学习300问】15、什么是…

C#,计算几何,二维贝塞尔拟合曲线(Bézier Curve)参数点的计算代码

Pierre Bzier Bzier 算法用于曲线的拟合与插值。 插值是一个或一组函数计算的数值完全经过给定的点。 拟合是一个或一组函数计算的数值尽量路过给定的点。 这里给出 二维 Bzier 曲线拟合的参数点计算代码。 区别于另外一种读音接近的贝塞耳插值算法&#xff08;Bessels int…