[PATCH 01/12] workqueue: add WORKER_RESCUER
rescuer thread must be a worker which is WORKER_NOT_RUNNING: If it is *not* WORKER_NOT_RUNNING, it will increase the nr_running and it disables the normal workers wrongly. So rescuer thread must be WORKER_NOT_RUNNING. Currently code implement it by always setting WORKER_PREP on rescuer thread, but this kind of implement is ugly: A) It reuses WORKER_PREP which is used for a different meaning. B) It does not told us rescuer thread is WORKER_NOT_RUNNING. So we add WORKER_RESCUER to fix these two sematic. Signed-off-by: Lai Jiangshan --- kernel/workqueue.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 737ab01..ec882a6 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -73,11 +73,12 @@ enum { WORKER_DIE = 1 << 1, /* die die die */ WORKER_IDLE = 1 << 2, /* is idle */ WORKER_PREP = 1 << 3, /* preparing to run works */ + WORKER_RESCUER = 1 << 4, /* rescuer thread */ WORKER_CPU_INTENSIVE= 1 << 6, /* cpu intensive */ WORKER_UNBOUND = 1 << 7, /* worker is unbound */ WORKER_NOT_RUNNING = WORKER_PREP | WORKER_UNBOUND | - WORKER_CPU_INTENSIVE, + WORKER_RESCUER | WORKER_CPU_INTENSIVE, NR_WORKER_POOLS = 2,/* # worker pools per gcwq */ @@ -2405,6 +2406,7 @@ static int rescuer_thread(void *__wq) bool is_unbound = wq->flags & WQ_UNBOUND; unsigned int cpu; + rescuer->flags |= WORKER_RESCUER; set_user_nice(current, RESCUER_NICE_LEVEL); repeat: set_current_state(TASK_INTERRUPTIBLE); -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 01/12] workqueue: add WORKER_RESCUER
On Thu, Sep 27, 2012 at 01:20:32AM +0800, Lai Jiangshan wrote: > rescuer thread must be a worker which is WORKER_NOT_RUNNING: > If it is *not* WORKER_NOT_RUNNING, it will increase the nr_running > and it disables the normal workers wrongly. > > So rescuer thread must be WORKER_NOT_RUNNING. > > Currently code implement it by always setting WORKER_PREP on rescuer thread, > but this kind of implement is ugly: > A)It reuses WORKER_PREP which is used for a different meaning. > B)It does not told us rescuer thread is WORKER_NOT_RUNNING. > > So we add WORKER_RESCUER to fix these two sematic. Ah, right, we always have WORKER_PREP set for rescuers. So, this doesn't actually change the behavior at all? I'm not necessarily against it but the commit message seems a bit misleading. Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 01/12] workqueue: add WORKER_RESCUER
On 09/27/2012 02:07 AM, Tejun Heo wrote: > On Thu, Sep 27, 2012 at 01:20:32AM +0800, Lai Jiangshan wrote: >> rescuer thread must be a worker which is WORKER_NOT_RUNNING: >> If it is *not* WORKER_NOT_RUNNING, it will increase the nr_running >> and it disables the normal workers wrongly. >> >> So rescuer thread must be WORKER_NOT_RUNNING. >> >> Currently code implement it by always setting WORKER_PREP on rescuer thread, >> but this kind of implement is ugly: >> A) It reuses WORKER_PREP which is used for a different meaning. >> B) It does not told us rescuer thread is WORKER_NOT_RUNNING. >> >> So we add WORKER_RESCUER to fix these two sematic. > > Ah, right, we always have WORKER_PREP set for rescuers. So, this > doesn't actually change the behavior at all? No, this doesn't change the behavior at all. > I'm not necessarily > against it but the commit message seems a bit misleading. > I just try my best to say" we need to add WORKER_RESCUER to told us rescuer is WORKER_NOT_RUNNING explicity, using WORKER_PREP only will hide this info" Thanks, Lai -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/