分类: LINUX
2011-08-15 16:04:23
linux-2.6.21.5/include/linux/irq.h irq_desc[224] |------------------------------------| | | | | | | | | | | | struct--irq_desc | |------------------------------------| |irq_flow_handler_t handle_irq |handle_edge_irq() |struct irq_chip *chip | |void *handler_data | |void *chip_data | struct--irqaction |struct irqaction *action |--->|-----------------------------| |unsigned int status | |irq_handler_t handler| |unsigned int depth | |unsigned long flags -| |unsigned int wake_depth | |cpumask_t mask | |unsigned int irq_count | |const char *name -| |unsigned int irqs_unhandled| |void *dev_id| |spinlock_t lock | |struct irqaction *next -| |cpumask_t affinity | |int irq | |unsigned int cpu | |struct proc_dir_entry *dir | |cpumask_t pending_mask -| |-----------------------------| |struct proc_dir_entry *dir | |const char *name | |------------------------------------| | | | | | | | | |------------------------------------| handle_irq 指向该中断请求的处理函数; chip、handler_data、chip_data 用以访问发出中断请求的硬件; action 指向响应该IRQ的动作链表中的第一项; status 用以描述IRQ线的状态; depth、wake_depth 指出该IRQ线上的中断嵌套深度; irq_count、irqs_unhandled 指出该IRQ线上中断请求的数目和未处理的中断数目,如果最近10万个中断中仅处理了不超过100个,则内核会自动禁止来自该线的所有中断请求; lock 为访问PIC的同步锁; affinity、cpu 在多处理器上使用,用以实现负载均衡; pending_mask 用以挂起被负载均衡的中断; dir 指向/proc/irq目录项; name 为/proc/interrupts输出项的目录。 |