--- x/net/sched/sch_fq_pie.c
+++ s/net/sched/sch_fq_pie.c
@@ -372,9 +372,11 @@ 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);
+	if (!spin_trylock(root_lock))
+		return;
 
 	for (idx = 0; idx < q->flows_cnt; idx++)
 		pie_calculate_probability(&q->p_params, &q->flows[idx].vars,
@@ -385,6 +387,7 @@ static void fq_pie_timer(struct timer_li
 		mod_timer(&q->adapt_timer, jiffies + q->p_params.tupdate);
 
 	spin_unlock(root_lock);
+	WARN_ON_ONCE(time_after(jiffies, ts));
 }
 
 static int fq_pie_init(struct Qdisc *sch, struct nlattr *opt,