summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2019-07-10 17:11:01 +0200
committerSebastian Andrzej Siewior <bigeasy@linutronix.de>2019-07-10 17:11:01 +0200
commit72190d8535612c54d056dd5916b77995e93d0268 (patch)
tree568a2b68d025e874c3e103c8b9e6827b3556269b
parent21503db4d134a232e487f26c1b3f4d1486920a1a (diff)
downloadlinux-rt-72190d8535612c54d056dd5916b77995e93d0268.tar.gz
[ANNOUNCE] v5.0.21-rt16v5.0.21-rt16-patches
Dear RT folks! I'm pleased to announce the v5.0.21-rt16 patch set. Changes since v5.0.21-rt15: - Do not invoke softirq if ksoftirqd has been scheduled. This change aligns softirq handling closer with mainline. A busy network driver will now handover further processing to ksoftirqd. This wasn't the case since the recent softirq rework. Known issues - rcutorture is currently broken on -RT. Reported by Juri Lelli. The delta patch against v5.0.21-rt15 is appended below and can be found here: https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.0/incr/patch-5.0.21-rt15-rt16.patch.xz You can get this release via the git tree at: git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git v5.0.21-rt16 The RT patch against v5.0.21 can be found here: https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.0/older/patch-5.0.21-rt16.patch.xz The split quilt queue is available at: https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.0/older/patches-5.0.21-rt16.tar.xz Sebastian Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-rw-r--r--patches/localversion.patch2
-rw-r--r--patches/series1
-rw-r--r--patches/softirq-Don-t-do-softirq-if-ksoftird-is-pending.patch49
3 files changed, 51 insertions, 1 deletions
diff --git a/patches/localversion.patch b/patches/localversion.patch
index 340816c8febc..0cccc7790a5d 100644
--- a/patches/localversion.patch
+++ b/patches/localversion.patch
@@ -10,4 +10,4 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- /dev/null
+++ b/localversion-rt
@@ -0,0 +1 @@
-+-rt15
++-rt16
diff --git a/patches/series b/patches/series
index d1b51ee5d06f..e1ca1ebe5a3d 100644
--- a/patches/series
+++ b/patches/series
@@ -132,6 +132,7 @@ x86-fpu-Update-kernel-s-FPU-state-before-using-for-t.patch
efi-Allow-efi-runtime.patch
softirq-Add-preemptible-softirq.patch
+softirq-Don-t-do-softirq-if-ksoftird-is-pending.patch
sched-swait-Add-swait_event_lock_irq.patch
# WORKQUEUE
workqueue-use-rcu.patch
diff --git a/patches/softirq-Don-t-do-softirq-if-ksoftird-is-pending.patch b/patches/softirq-Don-t-do-softirq-if-ksoftird-is-pending.patch
new file mode 100644
index 000000000000..a36c5c89c186
--- /dev/null
+++ b/patches/softirq-Don-t-do-softirq-if-ksoftird-is-pending.patch
@@ -0,0 +1,49 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 10 Jul 2019 12:32:04 +0200
+Subject: [PATCH] softirq: Don't do softirq if ksoftird is pending
+
+!RT does not invoke softirq on return from interrupt if ksoftirqd is
+scheduled. This for instance for networking: once the budget is used,
+napi will mark NET_RX pending and let ksoftird scheduled. This will
+ensure that further napi processing happens in ksoftirqd and the system
+can do something else.
+In RT we had "shortcut" for this once budget is used to ensure that
+further softirq handling happens in ksoftirqd. After the softirq rework
+I dropped that shortcut assuming that we would gain mainline behaviour
+here. The missing part piece is not to invoke softirqs if ksoftird is
+pending.
+
+Don't invoke softirqs on BH-enable if ksoftirqd is scheduled.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/softirq.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -78,7 +78,6 @@ static void wakeup_softirqd(void)
+ wake_up_process(tsk);
+ }
+
+-#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+ * If ksoftirqd is scheduled, we do not want to process pending softirqs
+ * right now. Let ksoftirqd handle this at its own rate, to get fairness,
+@@ -93,7 +92,6 @@ static bool ksoftirqd_running(unsigned l
+ return false;
+ return tsk && (tsk->state == TASK_RUNNING);
+ }
+-#endif
+
+ /*
+ * preempt_count and SOFTIRQ_OFFSET usage:
+@@ -173,7 +171,7 @@ void __local_bh_enable_ip(unsigned long
+
+ if (unlikely(count == 1)) {
+ pending = local_softirq_pending();
+- if (pending) {
++ if (pending && !ksoftirqd_running(pending)) {
+ if (!in_atomic())
+ __do_softirq();
+ else