--- x/net/sched/sch_fq_pie.c +++ y/net/sched/sch_fq_pie.c @@ -385,8 +385,7 @@ static void fq_pie_timer(struct timer_li root_lock = qdisc_lock(qdisc_root_sleeping(sch)); spin_lock(root_lock); - /* Limit this expensive loop to 2048 flows per round. */ - max_cnt = min_t(int, q->flows_cnt - q->flows_cursor, 2048); + max_cnt = min_t(int, q->flows_cnt - q->flows_cursor, 512); for (i = 0; i < max_cnt; i++) { pie_calculate_probability(&q->p_params, &q->flows[q->flows_cursor].vars, @@ -401,7 +400,7 @@ static void fq_pie_timer(struct timer_li next = tupdate; } if (tupdate) - mod_timer(&q->adapt_timer, jiffies + next); + mod_timer(&q->adapt_timer, jiffies + max(2, next)); spin_unlock(root_lock); rcu_read_unlock(); }