kernels/linux-2.4.0/arch/mips64/sgi-ip27/ip27-irq.c
/*
 * do_IRQ handles all normal device IRQ's (the special SMP cross-CPU interrupts
 * have their own specific handlers).
 */
do_IRQ handles all normal device IRQ's (the special SMP cross-CPU interrupts
have their own specific handlers).
do_IRQ handles all normal device IRQ ' s ( the special SMP cross - CPU interrupts have their own specific handlers ) .
static void do_IRQ(cpuid_t thiscpu, int irq, struct pt_regs * regs)
{
	struct irqaction *action;
	int do_random;
	irq_enter(thiscpu, irq);
	kstat.irqs[thiscpu][irq]++;
	action = *(irq + irq_action);
	if (action) {
		if (!(action->flags & SA_INTERRUPT))
			__sti();
		do_random = 0;
        	do {
			do_random |= action->flags;
			action->handler(irq, action->dev_id, regs);
			action = action->next;
        	} while (action);
		if (do_random & SA_SAMPLE_RANDOM)
			add_interrupt_randomness(irq);
		__cli();
	}
	irq_exit(thiscpu, irq);
}
static void do_IRQ ( cpuid_t thiscpu , int irq , struct pt_regs * regs ) { struct irqaction * action ; int do_random ; irq_enter ( thiscpu , irq ) ; kstat . irqs [ thiscpu ] [ irq ] ++ ; action = * ( irq + irq_action ) ; if ( action ) { if ( ! ( action -> flags & SA_INTERRUPT ) ) __sti ( ) ; do_random = 0 ; do { do_random |= action -> flags ; action -> handler ( irq , action -> dev_id , regs ) ; action = action -> next ; } while ( action ) ; if ( do_random & SA_SAMPLE_RANDOM ) add_interrupt_randomness ( irq ) ; __cli ( ) ; } irq_exit ( thiscpu , irq ) ; }
do_IRQ handles all normal device IRQ's (the special SMP cross-CPU interrupts
 have their own specific handlers).
do_IRQ handles all normal device IRQ ' s ( the special SMP cross - CPU interrupts have their own specific handlers ) .
/* unmasking and bottom half handling is done magically for us. */