chip,handle_level_irq,name);//设置irq_desc的chip、handle、name,x86默认使用legacy irq chip 8259...
if (action_ret & IRQ_WAKE_THREAD) {//caq:如果返回结果包含需要唤醒中断处理线程 /* * There is a thread woken. Check whether one of the * shared primary handlers returned IRQ_HANDLED. If * not we defer the spurious detection to the next * interrupt. */ if (action_ret == IRQ_WAKE_TH...
弄到中断线程中运行*/if(new->handler != irq_default_primary_handler &&new->thread_fn) {/*Allocate the secondary action*/new->secondary = kzalloc(sizeof(structirqaction), GFP_KERNEL);if(!new->secondary)return-ENOMEM;new->secondary->handler =irq_forced_secondary_handler;new->secondary->thread...
__setup_irq是用于设置和注册中断的核心函数,它是request_threaded_irq等函数的内部实现。 1.1. irqaction handler和thread_fn是struct irqaction的两个重要成员,由程序员指定或在__setup_irq中自动设置, 在中断发生后的处理函数被调用。 /// include/linux/interrupt.h /** * struct irqaction - per interrup...
CONFIG_IRQ_DOMAIN_DEBUG 通过debugfs中的irq_domain_mapping文件向用户显示硬件IRQ号/Linux IRQ号之间的对应关系.仅用于开发调试. Support sparse irq numberingCONFIG_SPARSE_IRQ 稀疏IRQ号支持.它允许在小型设备上(例如嵌入式设备)定义一个很高的CONFIG_NR_CPUS值,但仍然不希望占用太多内核"memory footprint"(一段...
向系统中注册一个 irq domain 的数据结构,irq_domain 主要作用是将硬件中断号映射到 irq number,后面会做详细的介绍。 设定arch 相关的 irq handler。gic_irq_handle 是内核 gic 中断处理的入口函数,后面会做详细的介绍。 gic 虚拟化相关的内容。 初始化 ITS。 设置SMP 核间交互的回调函数,用于 IPI,回到函数为...
void*irq_request_opaque; intoutput; /* intr from master PIC */ structkvm_io_device dev; }; 1片8259A只能连接最多8个外设,如果需要支持更多外设,需要多片8259A级联。在结构体kvm_pic中,我们看到有2片8259A:pic[0]和pic[1]。KVM定义了结构体kvm_kpic_state记录8259A的状态,其中包括我们之前提到的IRR、...
irq_handler_t handler, unsigned long flags, const char *name, void *dev) { return request_threaded_irq(irq, handler, NULL, flags, name, dev); } extern void disable_irq_nosync(unsigned int irq); extern void disable_irq(unsigned int irq); extern void enable_irq(unsigned int irq); etc...
handle_arch_irq是一个全局的函数指针,在中断初始化时(以GIC为例),会被设置指向gic_handle_irq 。 gic_handle_irq非常简单,首先获取gic对象,循环读取GIC的寄存器,获取中断号,然后调用__handle_domain_irq处理中断,直到gic没有中断挂起...
Probing can be implemented in the driver itself without too much trouble. The short module performs do-it-yourself detection of the IRQ line if it is loaded with probe=2. The mechanism is the same as the one described earlier: enable all unused interrupts, then wait and see what happens...