RE: [PATCH] workqueue: detect uninitated work_struct and BUG() if true

2015-03-10 Thread Du, Changbin
> -Original Message-
> From: Tejun Heo [mailto:hte...@gmail.com] On Behalf Of Tejun Heo
> Sent: Monday, March 9, 2015 2:23 PM
> To: Du, Changbin
> Cc: linux-kernel@vger.kernel.org
> Subject: Re: [PATCH] workqueue: detect uninitated work_struct and BUG() if
> true
> > @@ -1295,6 +1295,9 @@ static void __queue_work(int cpu, struct
> workqueue_struct *wq,
> >  */
> > WARN_ON_ONCE(!irqs_disabled());
> >
> > +   if (!work->func)
> > +   BUG();
> > +
> > debug_work_activate(work);
> 
> Can't this be part of the debug_work mechanism?  I'm a bit wary of adding
> essentially arbitrary checks.  I'd much prefer if it gets gated by debug 
> config
> somehow.
> 
> Thanks.
> Tejun

Yes, I found there already have this checking and print a warning in 
work_fixup_activate.
So this patch can be droped. Thanks for point out.

static int work_fixup_activate(void *addr, enum debug_obj_state state)
{
struct work_struct *work = addr;

switch (state) {

case ODEBUG_STATE_NOTAVAILABLE:
/*
 * This is not really a fixup. The work struct was
 * statically initialized. We just make sure that it
 * is tracked in the object tracker.
 */
if (test_bit(WORK_STRUCT_STATIC_BIT, work_data_bits(work))) {
debug_object_init(work, _debug_descr);
debug_object_activate(work, _debug_descr);
return 0;
}
WARN_ON_ONCE(1);
--
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] workqueue: detect uninitated work_struct and BUG() if true

2015-03-10 Thread Du, Changbin
 -Original Message-
 From: Tejun Heo [mailto:hte...@gmail.com] On Behalf Of Tejun Heo
 Sent: Monday, March 9, 2015 2:23 PM
 To: Du, Changbin
 Cc: linux-kernel@vger.kernel.org
 Subject: Re: [PATCH] workqueue: detect uninitated work_struct and BUG() if
 true
  @@ -1295,6 +1295,9 @@ static void __queue_work(int cpu, struct
 workqueue_struct *wq,
   */
  WARN_ON_ONCE(!irqs_disabled());
 
  +   if (!work-func)
  +   BUG();
  +
  debug_work_activate(work);
 
 Can't this be part of the debug_work mechanism?  I'm a bit wary of adding
 essentially arbitrary checks.  I'd much prefer if it gets gated by debug 
 config
 somehow.
 
 Thanks.
 Tejun

Yes, I found there already have this checking and print a warning in 
work_fixup_activate.
So this patch can be droped. Thanks for point out.

static int work_fixup_activate(void *addr, enum debug_obj_state state)
{
struct work_struct *work = addr;

switch (state) {

case ODEBUG_STATE_NOTAVAILABLE:
/*
 * This is not really a fixup. The work struct was
 * statically initialized. We just make sure that it
 * is tracked in the object tracker.
 */
if (test_bit(WORK_STRUCT_STATIC_BIT, work_data_bits(work))) {
debug_object_init(work, work_debug_descr);
debug_object_activate(work, work_debug_descr);
return 0;
}
WARN_ON_ONCE(1);
--
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] workqueue: detect uninitated work_struct and BUG() if true

2015-03-09 Thread Tejun Heo
On Mon, Mar 09, 2015 at 04:43:11AM +, Du, Changbin wrote:
> From cdebb88ac0fb3f900ef28f28ccb4a12159c295db Mon Sep 17 00:00:00 2001
> From: "Du, Changbin" 
> Date: Mon, 9 Mar 2015 12:06:43 +0800
> Subject: [PATCH] workqueue: detect uninitated work_struct and BUG() if true
> 
> Recently I encounter a driver issue that caused by missing initializing
> the work_struct. Then the work never get executed and stay in workqueue
> forever. This take me some time to locate the error. This issue can be
> seen early if detect it when queuing a work.
> 
> Signed-off-by: Du, Changbin 
> ---
>  kernel/workqueue.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/kernel/workqueue.c b/kernel/workqueue.c
> index f288493..5c1a5bc 100644
> --- a/kernel/workqueue.c
> +++ b/kernel/workqueue.c
> @@ -1295,6 +1295,9 @@ static void __queue_work(int cpu, struct 
> workqueue_struct *wq,
>*/
>   WARN_ON_ONCE(!irqs_disabled());
>  
> + if (!work->func)
> + BUG();
> +
>   debug_work_activate(work);

Can't this be part of the debug_work mechanism?  I'm a bit wary of
adding essentially arbitrary checks.  I'd much prefer if it gets gated
by debug config somehow.

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] workqueue: detect uninitated work_struct and BUG() if true

2015-03-09 Thread Tejun Heo
On Mon, Mar 09, 2015 at 04:43:11AM +, Du, Changbin wrote:
 From cdebb88ac0fb3f900ef28f28ccb4a12159c295db Mon Sep 17 00:00:00 2001
 From: Du, Changbin changbin...@gmail.com
 Date: Mon, 9 Mar 2015 12:06:43 +0800
 Subject: [PATCH] workqueue: detect uninitated work_struct and BUG() if true
 
 Recently I encounter a driver issue that caused by missing initializing
 the work_struct. Then the work never get executed and stay in workqueue
 forever. This take me some time to locate the error. This issue can be
 seen early if detect it when queuing a work.
 
 Signed-off-by: Du, Changbin changbin...@intel.com
 ---
  kernel/workqueue.c | 3 +++
  1 file changed, 3 insertions(+)
 
 diff --git a/kernel/workqueue.c b/kernel/workqueue.c
 index f288493..5c1a5bc 100644
 --- a/kernel/workqueue.c
 +++ b/kernel/workqueue.c
 @@ -1295,6 +1295,9 @@ static void __queue_work(int cpu, struct 
 workqueue_struct *wq,
*/
   WARN_ON_ONCE(!irqs_disabled());
  
 + if (!work-func)
 + BUG();
 +
   debug_work_activate(work);

Can't this be part of the debug_work mechanism?  I'm a bit wary of
adding essentially arbitrary checks.  I'd much prefer if it gets gated
by debug config somehow.

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/


[PATCH] workqueue: detect uninitated work_struct and BUG() if true

2015-03-08 Thread Du, Changbin
>From cdebb88ac0fb3f900ef28f28ccb4a12159c295db Mon Sep 17 00:00:00 2001
From: "Du, Changbin" 
Date: Mon, 9 Mar 2015 12:06:43 +0800
Subject: [PATCH] workqueue: detect uninitated work_struct and BUG() if true

Recently I encounter a driver issue that caused by missing initializing
the work_struct. Then the work never get executed and stay in workqueue
forever. This take me some time to locate the error. This issue can be
seen early if detect it when queuing a work.

Signed-off-by: Du, Changbin 
---
 kernel/workqueue.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index f288493..5c1a5bc 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -1295,6 +1295,9 @@ static void __queue_work(int cpu, struct workqueue_struct 
*wq,
 */
WARN_ON_ONCE(!irqs_disabled());
 
+   if (!work->func)
+   BUG();
+
debug_work_activate(work);
 
/* if draining, only works from the same workqueue are allowed */
-- 
1.9.1

--
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/


[PATCH] workqueue: detect uninitated work_struct and BUG() if true

2015-03-08 Thread Du, Changbin
From cdebb88ac0fb3f900ef28f28ccb4a12159c295db Mon Sep 17 00:00:00 2001
From: Du, Changbin changbin...@gmail.com
Date: Mon, 9 Mar 2015 12:06:43 +0800
Subject: [PATCH] workqueue: detect uninitated work_struct and BUG() if true

Recently I encounter a driver issue that caused by missing initializing
the work_struct. Then the work never get executed and stay in workqueue
forever. This take me some time to locate the error. This issue can be
seen early if detect it when queuing a work.

Signed-off-by: Du, Changbin changbin...@intel.com
---
 kernel/workqueue.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index f288493..5c1a5bc 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -1295,6 +1295,9 @@ static void __queue_work(int cpu, struct workqueue_struct 
*wq,
 */
WARN_ON_ONCE(!irqs_disabled());
 
+   if (!work-func)
+   BUG();
+
debug_work_activate(work);
 
/* if draining, only works from the same workqueue are allowed */
-- 
1.9.1

--
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/