linux/kernel/softirq.c
/*
 * Exit an interrupt context. Process softirqs if needed and possible:
 */
Exit an interrupt context. Process softirqs if needed and possible.
Exit an interrupt context . Process softirqs if needed and possible .
void irq_exit(void)
{
#ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED
	local_irq_disable();
#else
	lockdep_assert_irqs_disabled();
#endif
	account_irq_exit_time(current);
	preempt_count_sub(HARDIRQ_OFFSET);
	if (!in_interrupt() && local_softirq_pending())
		invoke_softirq();
	tick_irq_exit();
	rcu_irq_exit();
	trace_hardirq_exit(); 
}
void irq_exit ( void ) { #ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED local_irq_disable ( ) ; #else lockdep_assert_irqs_disabled ( ) ; #endif account_irq_exit_time ( current ) ; preempt_count_sub ( HARDIRQ_OFFSET ) ; if ( ! in_interrupt ( ) && local_softirq_pending ( ) ) invoke_softirq ( ) ; tick_irq_exit ( ) ; rcu_irq_exit ( ) ; trace_hardirq_exit ( ) ; }
Exit an interrupt context.
Exit an interrupt context .
/* must be last! */