| 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()) { |