diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2019-07-10 17:11:01 +0200 |
---|---|---|
committer | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2019-07-10 17:11:01 +0200 |
commit | 72190d8535612c54d056dd5916b77995e93d0268 (patch) | |
tree | 568a2b68d025e874c3e103c8b9e6827b3556269b | |
parent | 21503db4d134a232e487f26c1b3f4d1486920a1a (diff) | |
download | linux-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.patch | 2 | ||||
-rw-r--r-- | patches/series | 1 | ||||
-rw-r--r-- | patches/softirq-Don-t-do-softirq-if-ksoftird-is-pending.patch | 49 |
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 |