Index: linux-2.6.14-ck2/include/linux/workqueue.h =================================================================== --- linux-2.6.14-ck2.orig/include/linux/workqueue.h 2005-11-02 20:31:14.000000000 +1100 +++ linux-2.6.14-ck2/include/linux/workqueue.h 2005-11-02 20:43:46.000000000 +1100 @@ -56,6 +56,7 @@ extern struct workqueue_struct *__create #define create_singlethread_workqueue(name) __create_workqueue((name), 1) extern void destroy_workqueue(struct workqueue_struct *wq); +extern void set_workqueue_nice(struct workqueue_struct *wq, long nice); extern int FASTCALL(queue_work(struct workqueue_struct *wq, struct work_struct *work)); extern int FASTCALL(queue_delayed_work(struct workqueue_struct *wq, struct work_struct *work, unsigned long delay)); Index: linux-2.6.14-ck2/kernel/workqueue.c =================================================================== --- linux-2.6.14-ck2.orig/kernel/workqueue.c 2005-11-02 20:31:14.000000000 +1100 +++ linux-2.6.14-ck2/kernel/workqueue.c 2005-11-02 20:43:46.000000000 +1100 @@ -383,6 +383,28 @@ void destroy_workqueue(struct workqueue_ kfree(wq); } +void set_workqueue_nice(struct workqueue_struct *wq, long nice) +{ + struct task_struct *p; + int cpu; + + lock_cpu_hotplug(); + if (is_single_threaded(wq)) { + p = wq->cpu_wq->thread; + set_user_nice(p, nice); + } else { + for_each_online_cpu(cpu) { + struct cpu_workqueue_struct *cwq = wq->cpu_wq + cpu; + + p = cwq->thread; + set_user_nice(p, nice); + } + } + unlock_cpu_hotplug(); +} + +EXPORT_SYMBOL_GPL(set_workqueue_nice); + static struct workqueue_struct *keventd_wq; int fastcall schedule_work(struct work_struct *work)