Signed-off-by: Christian Pellegrin --- diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 4048e92..bfeeee2 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -974,3 +974,36 @@ void __init init_workqueues(void) keventd_wq = create_workqueue("events"); BUG_ON(!keventd_wq); } + +void set_workqueue_max_prio(struct workqueue_struct *wq, int rt) +{ + struct task_struct *p; + int cpu; + int r = 0; + struct sched_param param = { + .sched_priority = MAX_RT_PRIO - 1, + }; + + if (is_single_threaded(wq)) { + p = wq->cpu_wq->thread; + if (rt) + r = sched_setscheduler(wq->cpu_wq->thread, SCHED_FIFO, ¶m); + else + set_user_nice(p, -20); + if (r) + printk("maxprio setting failed: %d\n", r); + } else { + for_each_online_cpu(cpu) { + struct cpu_workqueue_struct *cwq = wq->cpu_wq + cpu; + + p = cwq->thread; + if (rt) + r = sched_setscheduler(wq->cpu_wq->thread, SCHED_FIFO, ¶m); + else + set_user_nice(p, -20); + if (r) + printk("maxprio setting failed: %d\n", r); + } + } +} +EXPORT_SYMBOL_GPL(set_workqueue_max_prio); -- 1.5.6.5