linux/debian/patches-rt/0201-net-dev-always-take-qd...

43 lines
1.5 KiB
Diff
Raw Normal View History

2020-03-06 11:44:27 +00:00
From 136dfe4108059e637cdcc04f03dbca6637386429 Mon Sep 17 00:00:00 2001
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 30 Mar 2016 13:36:29 +0200
2020-03-28 12:59:50 +00:00
Subject: [PATCH 201/326] net: dev: always take qdisc's busylock in
2019-04-08 23:49:20 +00:00
__dev_xmit_skb()
2020-03-28 12:59:50 +00:00
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.106-rt45.tar.xz
The root-lock is dropped before dev_hard_start_xmit() is invoked and after
setting the __QDISC___STATE_RUNNING bit. If this task is now pushed away
by a task with a higher priority then the task with the higher priority
won't be able to submit packets to the NIC directly instead they will be
enqueued into the Qdisc. The NIC will remain idle until the task(s) with
higher priority leave the CPU and the task with lower priority gets back
and finishes the job.
If we take always the busylock we ensure that the RT task can boost the
low-prio task and submit the packet.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
2019-04-08 23:49:20 +00:00
net/core/dev.c | 4 ++++
1 file changed, 4 insertions(+)
2019-04-08 23:49:20 +00:00
diff --git a/net/core/dev.c b/net/core/dev.c
2020-03-06 11:44:27 +00:00
index ecdf7534ef13..6c6c1c6d534b 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3466,7 +3466,11 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
* This permits qdisc->running owner to get the lock more
* often and dequeue packets faster.
*/
+#ifdef CONFIG_PREEMPT_RT_FULL
+ contended = true;
+#else
contended = qdisc_is_running(q);
+#endif
if (unlikely(contended))
spin_lock(&q->busylock);
2020-01-03 23:36:11 +00:00
--
2020-02-21 18:07:43 +00:00
2.25.0
2020-01-03 23:36:11 +00:00