[PATCH 01/12] workqueue: add WORKER_RESCUER

2012-09-26 Thread Lai Jiangshan
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

2012-09-26 Thread Tejun Heo
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

2012-09-28 Thread Lai Jiangshan
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/