| Subject: softirq-make-fifo.patch |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Thu, 21 Jul 2011 21:06:43 +0200 |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| --- |
| kernel/softirq.c | 19 +++++++++++++++++++ |
| 1 file changed, 19 insertions(+) |
| |
| Index: linux-stable/kernel/softirq.c |
| =================================================================== |
| --- linux-stable.orig/kernel/softirq.c |
| +++ linux-stable/kernel/softirq.c |
| @@ -381,6 +381,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 inline void ksoftirqd_set_sched_params(void) { } |
| +static inline void ksoftirqd_clr_sched_params(void) { } |
| |
| #else /* !PREEMPT_RT_FULL */ |
| |
| @@ -535,6 +537,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(void) |
| +{ |
| + struct sched_param param = { .sched_priority = 1 }; |
| + |
| + sched_setscheduler(current, SCHED_FIFO, ¶m); |
| +} |
| + |
| +static inline void ksoftirqd_clr_sched_params(void) |
| +{ |
| + struct sched_param param = { .sched_priority = 0 }; |
| + |
| + sched_setscheduler(current, SCHED_NORMAL, ¶m); |
| +} |
| + |
| #endif /* PREEMPT_RT_FULL */ |
| /* |
| * Enter an interrupt context. |
| @@ -986,6 +1002,8 @@ void __init softirq_init(void) |
| |
| static int run_ksoftirqd(void * __bind_cpu) |
| { |
| + ksoftirqd_set_sched_params(); |
| + |
| set_current_state(TASK_INTERRUPTIBLE); |
| |
| while (!kthread_should_stop()) { |
| @@ -1011,6 +1029,7 @@ static int run_ksoftirqd(void * __bind_c |
| |
| wait_to_die: |
| preempt_enable(); |
| + ksoftirqd_clr_sched_params(); |
| /* Wait for kthread_stop */ |
| set_current_state(TASK_INTERRUPTIBLE); |
| while (!kthread_should_stop()) { |