request threaded-only IRQs with IRQF_ONESHOT

Linux中断子系统(四)之中断申请注册 Linux中断子系统(四)之中断申请注册 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux中断子系统(一)中断控制器及驱动分析 Linux中断子系统(二)-通用框架处理 吐血整理 | 肝翻Linux中断所有知识点 Linux kernel中断子系统之(五):驱动申请中断API 前言   中断的处理主要有以下几个功能模块:硬件中断号到Linux irq中断号的映射,并创建好irq_desc中断描述符;中断注册时,先获取设备的 阅读详情

Gitweb:     http://git.kernel.org/linus/;a=commit;h=9b7e31bbf4bb58b12e11a7f24b7c3e48bbd2f4da
Commit:     9b7e31bbf4bb58b12e11a7f24b7c3e48bbd2f4da
Parent:     1cecc5cc0658e128bcad0b29edb96f286066571d
Author:     Lars-Peter Clausen <lars <at> metafoo.de>
AuthorDate: Wed Jul 4 13:02:56 2012 -0700
Committer:  Dmitry Torokhov <dmitry.torokhov <at> gmail.com>
CommitDate: Wed Jul 4 13:12:19 2012 -0700

    Input: request threaded-only IRQs with IRQF_ONESHOT

    Since commit 1c6c69525b ("genirq: Reject bogus threaded irq requests")
    threaded IRQs without a primary handler need to be requested with
    IRQF_ONESHOT, otherwise the request will fail.

.......

 

在linux里,中断处理分为顶半(top half),底半(bottom half),在顶半里处理优先级比较高的事情,要求占用中断时间尽量的短,在处理完成后,就激活底半,有底半处理其余任务。底半的处理方式主要有soft_irq, tasklet, workqueue三种,他们在使用方式和适用情况上各有不同。soft_irq用在对底半执行时间要求比较紧急或者非常重要的场合,主要为一些subsystem用,一般driver基本上用不上。 tasklet和work queue在普通的driver里用的相对较多,主要区别是tasklet是在中断上下文执行,而work queue是在process上下文,因此可以执行可能sleep的操作。
2.6.30里,在ingo molnar的RT tree里存在有一段时间的interrupt thread终于merge到mainline了。此时如果使用request_threaded_irq申请的中断,handler不是在中断上下文里执行,而是在新创建的线程里执行,这样,该handler非常像执行workqueue,拥有所有work queue的特性,但是省掉了创建,初始化,调度workqueue的繁多步骤。处理起来非常简单。让我们看看这个接口:

int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long irqflags, const char *devname, void *dev_id)
和request_irq非常类似,irq是中断号, handler是在发生中断时,首先要执行的code,非常类似于顶半,该函数最后会return IRQ_WAKE_THREAD来唤醒中断线程,一般设为NULL,用系统提供的默认处理。thread_fn,是要在线程里执行的handler,非常类似于底半。 后三个参数基本和request_irq相同。irqsflags新增加了一个标志,IRQF_ONESHOT,用来标明是在中断线程执行完后在打开该中断,该标志非常有用,否则中断有可能一直在顶半执行,而不能处理中断线程。例如对于gpio level中断,如果不设置该位,在顶半执行完成后,会打开中断,此时由于电平没有变化,马上有执行中断,永远没有机会处理线程。
下边一个实际例子来说明它的应用。在手机平台中,检测耳机的插入一般是通过耳机插孔中机械变化导致一个baseband gpio的电平的变化,在该gpio中断里进行耳机插入处理。但是耳机插入一般都有个抖动的过程,需要消抖处理。最简单的办法是在中断发生后,延时一段时间(例如200ms),然后再检查GPIO状态是否稳定来确定是否有效插入。如果用老的中断方式,不得不用workqueue的方式,你需要在顶半里激活一个delay 200ms的workqueue,然后在workqueue里检查。用线程化的处理方式,你仅仅需要在thread_fn里sleep 200ms,然后在检查即可。看,事情就这么简单!

 

kernel 中断分析五——irq_thread 前言 在x86 kernel 中断分析三——中断处理流程中,对于线程化中断处理函数,handle_irq_event_percpu调用了irq_wake_thread唤醒action->thread,此处唤醒的thread创建于__setup_irq,代码如下: 947 t = kthread_create(irq_thread, new, "irq/%d-%s", ir 阅读详情

相关推荐

软件测试学习笔记(二)图覆盖

软件测试学习笔记(二)图覆盖 课程链接软件测试_中国大学MOOC 2.1 测试中的图 2.2 图覆盖准则 1、什么是图? 点的集合和边的集合。点或者结点,有穷非空的集合。边是点对。 2、图为什么在软件测试中具有重要地位? 所谓软件测试就是将软件变作一张图,然后覆盖它,不仅仅是软件,图更是计算机科学重要的结构。 3、软件测试中的图是如何得到的? 常见的图可以来自源代码,常见的是控制流图,还有各种各样...

DZFinder的博客 1420

IRQF_ONESHOT

IRQF_ONESHOT的作用

nabody的博客 3269

Nvidia Isaac Sim安装与配置 入门教程 2024(2)

Isaac Sim 安装和配置教程将指导用户完成从下载软件到设置和运行仿真的全过程。教程内容包括安装必要的依赖项、配置系统环境、配置Omniverse环境以及调试和优化仿真环境的步骤。通过详细的操作步骤和图文并茂的说明,用户可以快速上手 Isaac Sim,构建出高质量的机器人仿真环境,实现其研究和应用目标。

m0_56661101的博客 2万+

request_threaded_irq及IRQF_ONESHOT的简单研究

通过TP驱动的IRQ来做实验,中断为低有效,gpio默认状态为输入高电平,驱动内部代码为: ret =request_threaded_irq(touchdev->irq,NULL,zinitix_touch_work,IRQF_TRIGGER_FALLING| IRQF_ONESHOT , ZINITIX_DRIVER_NAME ,touch_dev)

szembed的博客 2907

从零搭建自动驾驶仿真环境:我的Nuplan-devkit实战笔记(含PyCharm配置技巧)

本文详细记录了从零搭建Nuplan-devkit自动驾驶仿真环境的完整流程,包括conda环境配置、pip版本控制、PyCharm专业版集成等关键步骤。特别针对Ubuntu系统下的依赖管理、数据目录优化和性能调优提供了实用技巧,帮助开发者高效构建稳定的自动驾驶仿真开发环境。

weixin_30505225的博客 480

基于51单片机的智能灌溉系统

基于51单片机的智能灌溉系统

jiejiezuishuai的博客 2102

抛弃中断bottom half,使用中断线程

http://blog.sina.com.cn/s/blog_5f6661380100qwpn.html 抛弃中断bottom half,使用中断线程吧 (2011-02-24 10:39:54) 转载▼ 标签: 杂谈   在linux里,中断处理分为顶半(top half),底半(bottom half),在顶半里处理优先级比较高的事

WINGCREATE的专栏 1171

C++笔试题整理

目录 1. 笔试题1 1.1 链表反转 1.2 String 2. 笔试题2 2.1 求下面函数的返回值(微软) 2.2 什么是“引用”?申明和使用“引用”要注意哪些问题? 2.3 将“引用”作为函数参数有哪些特点? 2.4 在什么时候需要使用“常引用”?  2.5 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则? 2.6 “引用”与多态的关系? 2.7 “引用”与指针的区别是什么? 2.8 什么时候需要“引用”? 2.9 结构与联合有和区别? 2.10 下面关于.

星月相随的专栏 2484

[笔记分享] [中断] 中断申请释放以及上下半部

1.1 介绍 Linux将中断分为中断上半部和下半部。上半部用来处理紧急的和硬件操作相关的,此时所有当前中断线都被禁止,包括其它CPU。下半部用来处理能够被允许推迟完成的中断处理部分,此时中断是开启的。上下半部之间的界限依情况划分。 而异常和中断不同,必须考虑时钟的同步,也称同步中断,如除0、缺页等。这里我们只讨论异步中断。 1.2 中断注册/释放 1.2.1 注册函数 request_

Kris Fei's blog 2027

海量数据 / Vastbase 深度研究笔记 v3.1

v3.1 重点修订:在 v3.0 审慎版基础上,新增“2026 新变量”章节,纳入 7 亿级定增、HTAP / 多模态时序数据库、G100 V3.0 Build 8 的 3CM+2DN 高可用补强、pgvector / V100 / AI 多模叙事,以及集成服务基因与标准软件 ARR 的拉扯。核心关注点是:Vastbase 能否把 openGauss 生态红利、数据库产品矩阵和行业交付能力,转化为可持续、可复购、低边际成本的标准软件收入。海量不是没有业务基本盘,也不是马上失血致死;客户越多,服务债越大。

喝醉酒的小白 566

GROMACS新手必看:从PDB文件到完整分子动力学模拟的保姆级教程

本文提供GROMACS分子动力学模拟的保姆级教程,从PDB文件处理到完整模拟流程全覆盖。详细讲解结构预处理、系统构建、能量最小化、生产模拟等关键步骤,并分享性能优化和结果分析技巧,帮助新手快速掌握分子动力学模拟的核心操作。

yhn456789的博客 763

Linux内核-中断知识汇总(重温)

TODO。

静虚待令,有物混成 3103

GitLab CI/CD .gitlab-ci.yml 关键词(十一):发布版本 release

本篇文章介绍使用GitLab CI/CD 发布一个版本,对外发布。并填写一些发布的信息。

知无涯 4720

request threaded-only IRQs with IRQF_ONESHOT【转】

转自:http://blog.youkuaiyun.com/bdc995/article/details/8697374 Gitweb:http://git.kernel.org/linus/;a=commit;h=9b7e31bbf4bb58b12e11a7f24b7c3e48bbd2f4daCommit: 9b7e31bbf4bb58b12e11a7f24b7c3e48bbd2f...

weixin_34309435的博客 96

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux request_threaded_irq线程化中断与handler_fn

request_threaded_irq是Linux内核中注册中断处理函数的主要接口,它将中断处理拆分为两个阶段:上半部(handler)在硬中断上下文执行,下半部(thread_fn)在专用内核线程中运行。对于频繁触发的中断,handler仅记录必要硬件状态并返回IRQ_WAKE_THREAD,耗时的数据处理由低优先级的irq线程完成。thread_fn是线程化回调,运行在可睡眠的进程上下文。当handler返回IRQ_WAKE_THREAD时,内核唤醒该中断对应的irq线程执行thread_fn。

raoxiaoz0425的博客 74

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux 中断 —— GIC (中断注册)

目录 1. 中断模型 2. 中断注册 2.1 标志位 2.1.1IRQF_* 类型 2.1.2IRQS_*类型 2.1.3IRQD_*类型 2.2注册接口 Linux 中断子系统为各个外设驱动提供注册中断的接口。 但如果希望更好的用这些接口进行内核代码的编写,则需要先了解相关的一些内容。 1. 中断模型 在所有关于 CPU 的底层编程中,无一例外的,都要求,...

StephenZhou 4220

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

中断管理基础学习笔记 - 4.注册中断

目录1. 前言2. 注册中断接口接口说明IRQF_*中断标志位IRQS_*中断标志位IRQD_*中断标志位3. request_threaded_irq|- -__setup_irq参考文档 1. 前言 本专题我们开始学习进程管理部分。本文主要参考了《奔跑吧, Linux内核》、ULA、ULK的相关内容。 本节记录ARM架构下中断是如何管理的,Linux内核中的中断管理机制是如何设计与实现的,以及常用的下半部机制,如软中断、tasklet、workqueue等。本文及后续中断相关笔记均以qemu 5.0.0

HZero 1409

Linux 中断上半部与下半部机制简析

本文先整体说明Linux 中断为什么要分两半,给出中断处理全景;再逐一分析上半部(request_irq、返回值与 IRQF 标志、genirq 框架、设备树时代的 irq_domain 中断映射)与下半部的四大机制(softirq、tasklet、工作队列、中断线程化);随后梳理从 2.4 到 6.12 的关键版本演进节点(genirq、threaded IRQ、cmwq、irq_domain、WQ_BH、PREEMPT_RT 主线化);最后给出机制对比表、选型决策树与调试观测手段。

smallerxuan的博客 1万+

Linux 6.6内核中断深度解析(四):中断注册与投递 — 从 request_irq 到 handler 的完整链路

本文解析 Linux 中断从「驱动注册」到「硬件投递」的完整链路。两条独立路径在 irq_desc 汇合:注册线 request_irq → request_threaded_irq → __setup_irq 把 irqaction 挂到 desc->action 链表;投递线 common_interrupt 经 per-CPU 的 vector_irq[vector] 把 vector 号翻译成 irq_desc,再走 desc->handle_irq 函数指针。

Ruiery的博客 345

CANN昇腾驱动框架深度解析:从Device注册到算子调度链路的内核态底层工作原理——hostdrv与ai_core双模块深度协同、PCIe之MSI-X中断处理及HBM内存管理机制

()方法是非常合理的。那就是下一节将介绍的元类。

qq_17776737的博客 245

Linux kernel中断子系统之(五):驱动申请中断API

Linux kernel中断子系统之(五):驱动申请中断API 作者:linuxer 发布于:2014-9-22 18:33 分类:Linux内核分析 一、前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threaded interrupt handl

M_O_Bz的专栏 2157
上一篇: USB UMS MTP设置过程
下一篇: http://www.linux-usb.org/usb.ids
bdc995
博客等级 码龄19年 8粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值