中断类型标志
来源:互联网 发布:windows 10 mobile官网 编辑:程序博客网 时间:2024/05/04 00:23
在调用request_irq函数申请一个IRQ时,会传入相应的中断类型标志。对于这些标志新旧版本的内核实现是不完全相同的。
IRQF_DISABLED
3.16.7-ct7版本内核中此标志是没有地方用到的。此标志表示中断在处理的时候是关中断的,不能被另外的中断所打断。(http://lwn.net/Articles/380931/)这篇文章里有讲到此标志在新内核中被废弃的原因。
之前老的内核中,按照中断处理快慢,分为快速中断和慢速的中断。对于慢速的中断,在处理的时候是不能关中断的,能够被其他的中断所中断,这样能够防止处理耗时过长。快速中断在处理的时候是关中断的,不能被其他中断所中断,因为认为它处理的够快。
在老的内核版本(我参考的内核版本是2.6.12.6)中SA_INTERRUPT标志起到和IRQF_DISABLED一样的作用。
fastcall int handle_IRQ_event(unsigned int irq, struct pt_regs *regs,
struct irqaction *action)
{
if (!(action->flags & SA_INTERRUPT))
local_irq_enable();
do {
ret = action->handler(irq, action->dev_id, regs); //执行注册的handler
if (ret == IRQ_HANDLED)
status |= action->flags;
retval |= ret;
action = action->next;
} while (action);
handle_IRQ_event在do_IRQ中调用,在执行注册的handler之前,会判断注册时有没有设置SA_INTERRUPT标志。如果没有设置此标志,就调用local_irq_enable函数开中断。
之前由于硬件的问题、慢速的处理器以及开发人员能力的差异,导致慢速的中断处理在现实情况中大量存在。现在随着硬件的快速发展,已经能够越来越快的处理中断了。并且中断的延迟处理机制,如下半部、中断线程化都使得能够将大量的工作从中断处理程序中移出来。
IRQF_SHARED
此标志用来表示一个IRQ是否允许在多个设备间共享。在之前使用8259中断控制器是,一个8259只有8个pin,2个级联也只能支持15个外部设备中断,外设很多的情况下可能会需要多个设备共享一个IRQ。
现在普遍使用的是APIC(高级可编程的中断控制器),由IO APIC和Local APIC组成。每个IO APIC支持24个IRQ Line,多个IO APIC可以级联。现在不推荐使用此标志来注册中断。
- 中断类型标志
- 关于中断请求标志位
- 磁盘分区类型标志表
- 中断类型
- stm32 USART中断标志位什么时候清除
- ISR中清中断标志的时机
- IF标志位与中断的关系
- STM32中发送中断标志位
- 中断中判断状态标志位
- C#枚举类型 标志枚举
- 文献类型和标志代码
- 文献类型和标志代码
- 枚举类型和位标志
- 枚举类型和位标志
- 并发编程<二>线程中断和线程中断标志
- 基本类型--枚举类型和位标志
- 中断的类型
- dos 中断类型
- 小字典系统
- jquery checkbox radio
- 【Java】JavaIO类图
- Debug与Release版本的区别 总结
- [web安全] 基本概念(持续更新)
- 中断类型标志
- 黑马程序员-java基础-反射
- tcpdump一些选项的使用
- 22. Generate Parentheses
- 成员变量和局部变量的区别
- 图书管理源程序
- Libevent 学习笔记 (1)——Libevent 2.0安装与简单示例
- 面试题29:数组中出现次数超过一半的数字
- 格式化输出