| From foo@baz Sun 09 Feb 2020 10:49:30 PM CET |
| From: Vinicius Costa Gomes <vinicius.gomes@intel.com> |
| Date: Thu, 6 Feb 2020 13:46:10 -0800 |
| Subject: taprio: Fix dropping packets when using taprio + ETF offloading |
| |
| From: Vinicius Costa Gomes <vinicius.gomes@intel.com> |
| |
| [ Upstream commit bfabd41da34180d05382312533a3adc2e012dee0 ] |
| |
| When using taprio offloading together with ETF offloading, configured |
| like this, for example: |
| |
| $ tc qdisc replace dev $IFACE parent root handle 100 taprio \ |
| num_tc 4 \ |
| map 2 2 1 0 3 2 2 2 2 2 2 2 2 2 2 2 \ |
| queues 1@0 1@1 1@2 1@3 \ |
| base-time $BASE_TIME \ |
| sched-entry S 01 1000000 \ |
| sched-entry S 0e 1000000 \ |
| flags 0x2 |
| |
| $ tc qdisc replace dev $IFACE parent 100:1 etf \ |
| offload delta 300000 clockid CLOCK_TAI |
| |
| During enqueue, it works out that the verification added for the |
| "txtime" assisted mode is run when using taprio + ETF offloading, the |
| only thing missing is initializing the 'next_txtime' of all the cycle |
| entries. (if we don't set 'next_txtime' all packets from SO_TXTIME |
| sockets are dropped) |
| |
| Fixes: 4cfd5779bd6e ("taprio: Add support for txtime-assist mode") |
| Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/sched/sch_taprio.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/net/sched/sch_taprio.c |
| +++ b/net/sched/sch_taprio.c |
| @@ -1522,9 +1522,9 @@ static int taprio_change(struct Qdisc *s |
| goto unlock; |
| } |
| |
| - if (TXTIME_ASSIST_IS_ENABLED(q->flags)) { |
| - setup_txtime(q, new_admin, start); |
| + setup_txtime(q, new_admin, start); |
| |
| + if (TXTIME_ASSIST_IS_ENABLED(q->flags)) { |
| if (!oper) { |
| rcu_assign_pointer(q->oper_sched, new_admin); |
| err = 0; |