]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
net: sched: taprio: Fix taprio_peek()
authorAndre Guedes <andre.guedes@intel.com>
Tue, 23 Apr 2019 19:44:23 +0000 (12:44 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 Apr 2019 02:52:32 +0000 (19:52 -0700)
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 <andre.guedes@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_taprio.c

index 77cca993710a79811bceed54a01eae0dd035bb75..0df924f87f3eb5dde67d38bdd0db15a4df6fd571 100644 (file)
@@ -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;
        }