Hi, As of 2.6.14, in include/linux/irq.h, there are two definitions as below. As you see, hw_interrupt_type accepts irq numbers for each irq, whereas irq_desc does not seem to keep a unique number. How are the two matched to each other then? Is it the irq_desc array offset that uniquely identifies each irq? I am asking because on some (e.g. smp) architectures, there are multiple irq controllers and each irq number does `not' represent a primary key for each irq, because there are multiple instances of the same irq number on the system, for different irqs. Thanks, Bahadir /* * Interrupt controller descriptor. This is all we need * to describe about the low-level hardware. */ struct hw_interrupt_type { const char * typename; unsigned int (*startup)(unsigned int irq); void (*shutdown)(unsigned int irq); void (*enable)(unsigned int irq); void (*disable)(unsigned int irq); void (*ack)(unsigned int irq); /*...*/ }; /* * This is the "IRQ descriptor", which contains various information * about the irq, including what kind of hardware handling it has, * whether it is disabled etc etc. */ typedef struct irq_desc { hw_irq_controller *handler; void *handler_data; struct irqaction *action; /* IRQ action list */ unsigned int status; /* IRQ status */ unsigned int depth; /* nested irq disables */ unsigned int irq_count; /* For detecting broken interrupts */ unsigned int irqs_unhandled; spinlock_t lock; /* ... */ } -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/