From: Andre Guedes Date: Tue, 23 Apr 2019 19:44:23 +0000 (-0700) Subject: net: sched: taprio: Fix taprio_peek() X-Git-Tag: v5.15~6431^2~113^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2684d1b75f215bdf521064bcbc0015dfca9156e7;p=platform%2Fkernel%2Flinux-starfive.git net: sched: taprio: Fix taprio_peek() While traversing taprio's children qdisc list, if the gate is closed for a given traffic class, we should continue traversing the list since the remaining qdiscs may have skb ready for transmission. This patch also takes this opportunity and changes the function to use the TAPRIO_ALL_GATES_OPEN macro instead of the magic number '-1'. Fixes: 5a781ccbd19e (“tc: Add support for configuring the taprio scheduler”) Signed-off-by: Andre Guedes Signed-off-by: David S. Miller --- diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c index 77cca99..0df924f 100644 --- a/net/sched/sch_taprio.c +++ b/net/sched/sch_taprio.c @@ -90,7 +90,7 @@ static struct sk_buff *taprio_peek(struct Qdisc *sch) rcu_read_lock(); entry = rcu_dereference(q->current_entry); - gate_mask = entry ? entry->gate_mask : -1; + gate_mask = entry ? entry->gate_mask : TAPRIO_ALL_GATES_OPEN; rcu_read_unlock(); if (!gate_mask) @@ -112,7 +112,7 @@ static struct sk_buff *taprio_peek(struct Qdisc *sch) tc = netdev_get_prio_tc_map(dev, prio); if (!(gate_mask & BIT(tc))) - return NULL; + continue; return skb; }