Linux中断描述符分析

Linux 2.6.19中,中断描述符结构体irq_desc在include/linux/irq.h文件中定义,其源代码如下:
 
struct irq_desc {
irq_flow_handler_t handle_irq;
struct irq_chip *chip;
void *handler_data;
void *chip_data;
struct irqaction *action;
unsigned int status;

unsigned int depth;
unsigned int wake_depth;
unsigned int irq_count;
unsigned int irqs_unhandled;
spinlock_t lock;
#ifdef CONFIG_SMP
cpumask_t affinity;
unsigned int cpu;
#endif
#if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE)
cpumask_t pending_mask;
#endif
#ifdef CONFIG_PROC_FS
struct proc_dir_entry *dir;
#endif
const char *name;
} ____cacheline_aligned;
 

其中,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输出项的目录。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f99e5b4033a81597114417f72e46a845.html