diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2016-12-25 13:35:00 -0500 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2016-12-25 13:35:00 -0500 |
commit | 7edf5bac7d57a8440e7df5510b2ae4f827bf5b87 (patch) | |
tree | 20e8e1c7994a187a020715343bd63da577288173 | |
parent | cb9291bbd7bf8b1a3b3b2168928a0eff9f7bd1aa (diff) | |
download | 4.9-rt-patches-7edf5bac7d57a8440e7df5510b2ae4f827bf5b87.tar.gz |
softirq-split: temporary "un-refresh" ; trivial ctxt change
-rw-r--r-- | patches/softirq-split-timer-softirqs-out-of-ksoftirqd.patch | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/patches/softirq-split-timer-softirqs-out-of-ksoftirqd.patch b/patches/softirq-split-timer-softirqs-out-of-ksoftirqd.patch index 8428868af09ff..b41ffc487eaa3 100644 --- a/patches/softirq-split-timer-softirqs-out-of-ksoftirqd.patch +++ b/patches/softirq-split-timer-softirqs-out-of-ksoftirqd.patch @@ -1,6 +1,7 @@ +From b565588df8ed7f2412e6f46dca6182899008b1d7 Mon Sep 17 00:00:00 2001 From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Date: Wed, 20 Jan 2016 16:34:17 +0100 -Subject: softirq: split timer softirqs out of ksoftirqd +Subject: [PATCH] softirq: split timer softirqs out of ksoftirqd The softirqd runs in -RT with SCHED_FIFO (prio 1) and deals mostly with timer wakeup which can not happen in hardirq context. The prio has been @@ -22,9 +23,11 @@ SCHED_OTHER priority and it won't defer RCU anymore. Cc: stable-rt@vger.kernel.org Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- - kernel/softirq.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++-------- + kernel/softirq.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 12 deletions(-) +diff --git a/kernel/softirq.c b/kernel/softirq.c +index 6f24da3d09e3..6a5b9fb888b2 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -58,6 +58,10 @@ EXPORT_SYMBOL(irq_stat); @@ -37,7 +40,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +#endif const char * const softirq_to_name[NR_SOFTIRQS] = { - "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "IRQ_POLL", + "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "BLOCK_IOPOLL", @@ -171,6 +175,17 @@ static void wakeup_softirqd(void) wake_up_process(tsk); } @@ -56,7 +59,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> static void handle_softirq(unsigned int vec_nr) { struct softirq_action *h = softirq_vec + vec_nr; -@@ -484,7 +499,6 @@ void __raise_softirq_irqoff(unsigned int +@@ -484,7 +499,6 @@ void __raise_softirq_irqoff(unsigned int nr) 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) { } @@ -78,7 +81,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * If we are not in a hard interrupt and inside a bh disabled -@@ -641,16 +659,29 @@ static void do_raise_softirq_irqoff(unsi +@@ -641,16 +659,29 @@ static void do_raise_softirq_irqoff(unsigned int nr) * delegate it to ksoftirqd. */ if (!in_irq() && current->softirq_nestcnt) @@ -112,7 +115,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } /* -@@ -676,7 +707,7 @@ void raise_softirq_irqoff(unsigned int n +@@ -676,7 +707,7 @@ void raise_softirq_irqoff(unsigned int nr) * raise a WARN() if the condition is met. */ if (!current->softirq_nestcnt) @@ -121,7 +124,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } static inline int ksoftirqd_softirq_pending(void) -@@ -689,22 +720,37 @@ static inline void _local_bh_enable_nort +@@ -689,22 +720,37 @@ static inline void _local_bh_enable_nort(void) { } static inline void ksoftirqd_set_sched_params(unsigned int cpu) { @@ -172,7 +175,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> local_irq_restore(flags); #endif } -@@ -1176,18 +1225,30 @@ static int takeover_tasklets(unsigned in +@@ -1176,18 +1225,30 @@ static int takeover_tasklets(unsigned int cpu) static struct smp_hotplug_thread softirq_threads = { .store = &ksoftirqd, .setup = ksoftirqd_set_sched_params, @@ -205,3 +208,6 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> return 0; } early_initcall(spawn_ksoftirqd); +-- +2.10.1 + |