public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Con Kolivas <kernel@kolivas.org>
To: Block Device <blockdevice@gmail.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: Increase priority of a workqueue thread ?
Date: Fri, 21 Oct 2005 01:05:20 +1000	[thread overview]
Message-ID: <200510210105.20307.kernel@kolivas.org> (raw)
In-Reply-To: <64c763540510200612s1e3aa7dvefdac28dd8d24106@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 866 bytes --]

On Thu, 20 Oct 2005 23:12, Block Device wrote:
> Hi,
>     I am using a custom workqueue thread in my module. How do I increase
> the priority of the workqueue threads ?
> I've seen that each workqueue contains an array of per-cpu structures
> which has a
> task_struct of the thread on a particular cpu. Since these threads are
> created from keventd
> I think they'll have the same priority as keventd.  Also the per-cpu
> structure is something which is private to the workqueue
> implementation. Directly using it (from my driver) to increase the
> priority of the workqueue doesnt seem correct to me. Is there any
> interface or standard way of changing the priority of a workqueue.

By strange coincidence I was working on a patch to do this. Here's what I have 
so far - I know the code is safe but I don't know if it does as advertised  
yet ;)

Cheers,
Con

[-- Attachment #2: set_workqueue_nice.patch --]
[-- Type: text/x-diff, Size: 1643 bytes --]

Index: linux-2.6.14-rc4-ck1/include/linux/workqueue.h
===================================================================
--- linux-2.6.14-rc4-ck1.orig/include/linux/workqueue.h	2005-06-18 23:59:46.000000000 +1000
+++ linux-2.6.14-rc4-ck1/include/linux/workqueue.h	2005-10-11 16:03:09.000000000 +1000
@@ -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-rc4-ck1/kernel/workqueue.c
===================================================================
--- linux-2.6.14-rc4-ck1.orig/kernel/workqueue.c	2005-10-11 15:56:13.000000000 +1000
+++ linux-2.6.14-rc4-ck1/kernel/workqueue.c	2005-10-11 16:03:09.000000000 +1000
@@ -383,6 +383,26 @@ 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();
+}
+
 static struct workqueue_struct *keventd_wq;
 
 int fastcall schedule_work(struct work_struct *work)

  parent reply	other threads:[~2005-10-20 15:05 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-20 13:12 Increase priority of a workqueue thread ? Block Device
2005-10-20 13:36 ` linux-os (Dick Johnson)
2005-10-20 15:05 ` Con Kolivas [this message]
2005-10-21  6:55   ` Block Device

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200510210105.20307.kernel@kolivas.org \
    --to=kernel@kolivas.org \
    --cc=blockdevice@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox