52 lines
1.7 KiB
Diff
52 lines
1.7 KiB
Diff
Subject: softirq-make-fifo.patch
|
|
From: Thomas Gleixner <tglx@linutronix.de>
|
|
Date: Thu, 21 Jul 2011 21:06:43 +0200
|
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/3.12/patches-3.12.1-rt4.tar.xz
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
---
|
|
kernel/softirq.c | 18 ++++++++++++++++++
|
|
1 file changed, 18 insertions(+)
|
|
|
|
--- a/kernel/softirq.c
|
|
+++ b/kernel/softirq.c
|
|
@@ -407,6 +407,8 @@ asmlinkage void do_softirq(void)
|
|
|
|
static inline void local_bh_disable_nort(void) { local_bh_disable(); }
|
|
static inline void _local_bh_enable_nort(void) { _local_bh_enable(); }
|
|
+static void ksoftirqd_set_sched_params(unsigned int cpu) { }
|
|
+static void ksoftirqd_clr_sched_params(unsigned int cpu, bool online) { }
|
|
|
|
#else /* !PREEMPT_RT_FULL */
|
|
|
|
@@ -561,6 +563,20 @@ static int ksoftirqd_do_softirq(int cpu)
|
|
static inline void local_bh_disable_nort(void) { }
|
|
static inline void _local_bh_enable_nort(void) { }
|
|
|
|
+static inline void ksoftirqd_set_sched_params(unsigned int cpu)
|
|
+{
|
|
+ struct sched_param param = { .sched_priority = 1 };
|
|
+
|
|
+ sched_setscheduler(current, SCHED_FIFO, ¶m);
|
|
+}
|
|
+
|
|
+static inline void ksoftirqd_clr_sched_params(unsigned int cpu, bool online)
|
|
+{
|
|
+ struct sched_param param = { .sched_priority = 0 };
|
|
+
|
|
+ sched_setscheduler(current, SCHED_NORMAL, ¶m);
|
|
+}
|
|
+
|
|
#endif /* PREEMPT_RT_FULL */
|
|
/*
|
|
* Enter an interrupt context.
|
|
@@ -1122,6 +1138,8 @@ static struct notifier_block cpu_nfb = {
|
|
|
|
static struct smp_hotplug_thread softirq_threads = {
|
|
.store = &ksoftirqd,
|
|
+ .setup = ksoftirqd_set_sched_params,
|
|
+ .cleanup = ksoftirqd_clr_sched_params,
|
|
.thread_should_run = ksoftirqd_should_run,
|
|
.thread_fn = run_ksoftirqd,
|
|
.thread_comm = "ksoftirqd/%u",
|