kernel/kernel/softirq.c
/*
 * we cannot loop indefinitely here to avoid userspace starvation,
 * but we also don't want to introduce a worst case 1/HZ latency
 * to the pending events, so lets the scheduler to balance
 * the softirq load for us.
 */
we cannot loop indefinitely here to avoid userspace starvation,
but we also don't want to introduce a worst case 1/HZ latency
to the pending events, so lets the scheduler to balance
the softirq load for us.
we cannot loop indefinitely here to avoid userspace starvation but we also don ' t want to introduce a worst case 1 / HZ latency to the pending events so lets the scheduler to balance the softirq load for us .
static void wakeup_softirqd(void)
{
	struct task_struct *tsk = __this_cpu_read(ksoftirqd);
	if (tsk && tsk->state != TASK_RUNNING)
		wake_up_process(tsk);
}
static void wakeup_softirqd ( void ) { struct task_struct * tsk = __this_cpu_read ( ksoftirqd ) ; if ( tsk && tsk -> state != TASK_RUNNING ) wake_up_process ( tsk ) ; }
we cannot loop indefinitely here to avoid userspace starvation,
 but we also don't want to introduce a worst case 1/HZ latency
 to the pending events, so lets the scheduler to balance
 the softirq load for us.
we cannot loop indefinitely here to avoid userspace starvation but we also don ' t want to introduce a worst case 1 / HZ latency to the pending events so lets the scheduler to balance the softirq load for us .
/* Interrupts are disabled: no need to stop preemption */