desc->handle(desc - irq_desc, desc, regs); 
desc_handle_irq(desc - irq_desc, desc, regs); 
static void do_pending_irqs(struct pt_regs *regs){	struct list_head head, *l, *n;	do {		struct irqdesc *desc;		/*		 * First, take the pending interrupts off the list.		 * The act of calling the handlers may add some IRQs		 * back onto the list.		 */		head = irq_pending;		INIT_LIST_HEAD(&irq_pending);		head.next->prev = &head;		head.prev->next = &head;		/*		 * Now run each entry.  We must delete it from our		 * list before calling the handler.		 */		list_for_each_safe(l, n, &head) {			desc = list_entry(l, struct irqdesc, pend);			list_del_init(&desc->pend);			desc->handle(desc - irq_desc, desc, regs);		}		/*		 * The list must be empty.		 */		BUG_ON(!list_empty(&head));	} while (!list_empty(&irq_pending));}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/664399e1fbdceb18da9c9c5534dedd62327c63e8/irq.c/clean/arch/arm/kernel/irq.c