--- l/net/sched/sch_fq_pie.c +++ n/net/sched/sch_fq_pie.c @@ -372,13 +372,16 @@ static void fq_pie_timer(struct timer_li struct Qdisc *sch = q->sch; spinlock_t *root_lock; /* to lock qdisc for probability calculations */ u32 idx; + unsigned long ts = jiffies + 2; root_lock = qdisc_lock(qdisc_root_sleeping(sch)); spin_lock(root_lock); - for (idx = 0; idx < q->flows_cnt; idx++) + for (idx = 0; idx < q->flows_cnt; idx++) { pie_calculate_probability(&q->p_params, &q->flows[idx].vars, q->flows[idx].backlog); + WARN_ON_ONCE(time_after(jiffies, ts)); + } /* reset the timer to fire after 'tupdate' jiffies. */ if (q->p_params.tupdate)