Re: WARNING: at kernel/workqueue.c [was: mmotm 2011-01-06-15-41 uploaded]

Hillf Danton
2011-01-12T01:34:42Z

On Tue, Jan 11, 2011 at 10:32 PM, Tejun Heo <tj@kernel.org> wrote:
> On Mon, Jan 10, 2011 at 03:36:09PM -0800, Tony Luck wrote:
>> > Here it is, too.
>> > mmotm-01-06
>>
>> Also in today's linux-next (tag: next-20110110) on ia64:
>>
>>
>> ------------[ cut here ]------------
>> WARNING: at kernel/workqueue.c:1202 worker_enter_idle+0x3f0/0x4a0()
>> Hardware name: server rx2620
>> Modules linked in:
>>
>> Call Trace:
>>  [<a000000100014cb0>] show_stack+0x50/0xa0
>>                                 sp=e0000040600d7c30 bsp=e0000040600d0dd0
>>  [<a000000100bcaa20>] dump_stack+0x30/0x50
>>                                 sp=e0000040600d7e00 bsp=e0000040600d0db8
>>  [<a000000100082260>] warn_slowpath_common+0xc0/0x100
>>                                 sp=e0000040600d7e00 bsp=e0000040600d0d78
>>  [<a0000001000822e0>] warn_slowpath_null+0x40/0x60
>>                                 sp=e0000040600d7e00 bsp=e0000040600d0d50
>>  [<a0000001000b0830>] worker_enter_idle+0x3f0/0x4a0
>>                                 sp=e0000040600d7e00 bsp=e0000040600d0d28
>>  [<a0000001000b2c80>] worker_thread+0x8c0/0x980
>>                                 sp=e0000040600d7e00 bsp=e0000040600d0c28
>>  [<a0000001000c08c0>] kthread+0x120/0x160
>>                                 sp=e0000040600d7e00 bsp=e0000040600d0be8
>>  [<a000000100012ef0>] kernel_thread_helper+0x30/0x60
>>                                 sp=e0000040600d7e30 bsp=e0000040600d0bc0
>>  [<a00000010000a0c0>] start_kernel_thread+0x20/0x40
>>                                 sp=e0000040600d7e30 bsp=e0000040600d0bc0
>> ---[ end trace 7e2fb881ec0622f8 ]---
>
> Ah, of course, it's commit 21ec12364bb78b72ad36b94269c64b3ee31b038f
> (workqueue: remove noop condition check in worker_clr_flags()).  The
> condition it removes is not a noop.  Reverting it.
>

Hey all

It looks that WORKER_NOT_RUNNING could be defined finer :/

thanks
Hillf
---

--- a/kernel/workqueue.c 2011-01-05 08:50:20.000000000 +0800
+++ b/kernel/workqueue.c 2011-01-12 09:40:56.000000000 +0800
@@ -62,8 +62,9 @@ enum {
WORKER_CPU_INTENSIVE = 1 << 6, /* cpu intensive */
WORKER_UNBOUND = 1 << 7, /* worker is unbound */

- WORKER_NOT_RUNNING = WORKER_PREP | WORKER_ROGUE | WORKER_REBIND |
- WORKER_CPU_INTENSIVE | WORKER_UNBOUND,
+ WORKER_NOT_RUNNING = (WORKER_PREP | WORKER_ROGUE |
+ WORKER_REBIND | WORKER_CPU_INTENSIVE |
+ WORKER_UNBOUND),

/* gcwq->trustee_state */
TRUSTEE_START = 0, /* start */