diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-07-21 21:06:43 +0200 |
---|---|---|
committer | Clark Williams <williams@redhat.com> | 2012-01-16 13:00:27 -0600 |
commit | e359b2edd645bd2af0216513b4d78471b60fdf37 (patch) | |
tree | 4d28fedaca1c4b4f4b58022721ce8be83145879e /kernel/softirq.c | |
parent | 411ff0d30ca0402cf71e5c9ee78298af8a118e97 (diff) |
softirq-make-fifo.patch
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/softirq.c')
-rw-r--r-- | kernel/softirq.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index 56de566b06f6..dd80cb45e058 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -372,6 +372,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 */ @@ -526,6 +528,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. @@ -985,6 +1001,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()) { @@ -1010,6 +1028,7 @@ static int run_ksoftirqd(void * __bind_cpu) wait_to_die: preempt_enable(); + ksoftirqd_clr_sched_params(); /* Wait for kthread_stop */ set_current_state(TASK_INTERRUPTIBLE); while (!kthread_should_stop()) { |