summaryrefslogtreecommitdiff
path: root/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/003.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/003.patch')
-rw-r--r--recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/003.patch39
1 files changed, 39 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/003.patch b/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/003.patch
new file mode 100644
index 0000000..a385ea0
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-rt-4.9-2.3.x/003.patch
@@ -0,0 +1,39 @@
+--- b/kernel/softirq.c
++++ a/kernel/softirq.c
+@@ -79,16 +79,12 @@
+
+ /*
+ * 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.
+- * right now. Let ksoftirqd handle this at its own rate, to get fairness,
+- * unless we're doing some of the synchronous softirqs.
+ */
++static bool ksoftirqd_running(void)
+-#define SOFTIRQ_NOW_MASK ((1 << HI_SOFTIRQ) | (1 << TASKLET_SOFTIRQ))
+-static bool ksoftirqd_running(unsigned long pending)
+ {
+ struct task_struct *tsk = __this_cpu_read(ksoftirqd);
+
+- if (pending & SOFTIRQ_NOW_MASK)
+- return false;
+ return tsk && (tsk->state == TASK_RUNNING);
+ }
+
+@@ -328,7 +324,7 @@
+
+ pending = local_softirq_pending();
+
++ if (pending && !ksoftirqd_running())
+- if (pending && !ksoftirqd_running(pending))
+ do_softirq_own_stack();
+
+ local_irq_restore(flags);
+@@ -355,7 +351,7 @@
+
+ static inline void invoke_softirq(void)
+ {
++ if (ksoftirqd_running())
+- if (ksoftirqd_running(local_softirq_pending()))
+ return;
+
+ if (!force_irqthreads) {