Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932171Ab3CLFSF (ORCPT ); Tue, 12 Mar 2013 01:18:05 -0400 Received: from mail-la0-f46.google.com ([209.85.215.46]:34510 "EHLO mail-la0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754071Ab3CLFSD (ORCPT ); Tue, 12 Mar 2013 01:18:03 -0400 MIME-Version: 1.0 In-Reply-To: <20130312051215.GU14556@mtj.dyndns.org> References: <20130305163228.GA12795@htj.dyndns.org> <20130306191408.GN1227@htj.dyndns.org> <20130307154907.GB29601@htj.dyndns.org> <20130312051215.GU14556@mtj.dyndns.org> Date: Tue, 12 Mar 2013 13:18:01 +0800 Message-ID: Subject: Re: workqueue panic in 3.4 kernel From: Lei Wen To: Tejun Heo Cc: Thomas Gleixner , linux-kernel@vger.kernel.org, leiwen@marvell.com, wwang27@marvell.com Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2046 Lines: 48 Tejun, On Tue, Mar 12, 2013 at 1:12 PM, Tejun Heo wrote: > Hello, > > On Tue, Mar 12, 2013 at 01:08:15PM +0800, Lei Wen wrote: >> diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h >> index 8afab27..425d5a2 100644 >> --- a/include/linux/workqueue.h >> +++ b/include/linux/workqueue.h >> @@ -189,12 +189,16 @@ static inline unsigned int work_static(struct >> work_struct *work) { return 0; } >> * NOTE! No point in using "atomic_long_set()": using a direct >> * assignment of the work data initializer allows the compiler >> * to generate better code. >> + * >> + * We take the assumption that work should not be inited if it already >> + * hold the pending bit, or bug would be reported. >> */ >> #ifdef CONFIG_LOCKDEP >> #define __INIT_WORK(_work, _func, _onstack) \ >> do { \ >> static struct lock_class_key __key; \ >> \ >> + BUG_ON(work_pending(_work)); \ > > You're initializing random piece of memory which may contain any > garbage and triggering BUG if some bit is set on it. No, you can't do > that. debugobj is the right tool for debugging object lifetime issues > and is already supported. The debugobj is not helping on this issue, I have enabled both CONFIG_DEBUG_OBJECTS_WORK and CONFIG_DEBUG_OBJECTS. But find they didn't report any issue at all. And I am not init random memory, original issue is call init multi-times for one structure and that piece of memory already been allocated. And __INIT_WORK shouldn't call over random memory, right? All this patch is adding a check here. Thanks, Lei -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/