linux-next.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>,
	linux-next@vger.kernel.org, linux-kernel@vger.kernel.org,
	Alexey Dobriyan <adobriyan@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: linux-next: build failure after merge of the driver-core tree
Date: Wed, 14 Dec 2011 11:24:55 -0800	[thread overview]
Message-ID: <20111214192455.GA4155@kroah.com> (raw)
In-Reply-To: <20111214170144.GA6933@kroah.com>

On Wed, Dec 14, 2011 at 09:01:44AM -0800, Greg KH wrote:
> On Wed, Dec 14, 2011 at 04:13:05PM +0100, Peter Zijlstra wrote:
> > On Wed, 2011-12-14 at 07:03 -0800, Greg KH wrote:
> > 
> > > I'll remove the use of kfree in the WARN_ON(), which should solve this
> > > problem.
> > 
> > The alternative is that we introduce something like CONFIG_KREF_DEBUG
> > and out-of-line the functions in that case while also adding more debug
> > checks. Alexey recently proposed a refcnt.h thing that almost does what
> > kref does but has different debug checks.
> 
> That might be nice to have, but the kfree check was there to catch
> people who were trying to be "tricky", and they will not be running with
> that debug option enabled.
> 
> I'll just remove it, and rely on the documentation and public
> humiliation instead of kernel warnings to try to enforce this rule.
> It's worked pretty good so far with the kobject rules :)

Here's the patch I just applied to the driver-core-next tree, which
should resolve this build problem.

>From 6261ddee70174372d6a75601f40719b7a5392f3f Mon Sep 17 00:00:00 2001
From: Greg Kroah-Hartman <gregkh@suse.de>
Date: Wed, 14 Dec 2011 11:19:07 -0800
Subject: kref: fix up the kfree build problems

It turns out that some memory allocators use kobjects, which use krefs,
and kref.h was wanting to figure out the address of kfree(), which ended
up in a loop.

kfree was only being needed for a warning to tell the caller that they
were doing something stupid.  Now we just move that warning into the
comments for the functions, which results in a bit more fun as everyone
enjoys digging for people to mock at times of boredom.

So, remove the dependancy of slab.h on kref.h, and fix up the other
include file as well (we really only need bug.h and atomic.h, not
types.h).

Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
 include/linux/kref.h |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/include/linux/kref.h b/include/linux/kref.h
index d66c88a..abc0120 100644
--- a/include/linux/kref.h
+++ b/include/linux/kref.h
@@ -15,8 +15,8 @@
 #ifndef _KREF_H_
 #define _KREF_H_
 
-#include <linux/types.h>
-#include <linux/slab.h>
+#include <linux/bug.h>
+#include <linux/atomic.h>
 
 struct kref {
 	atomic_t refcount;
@@ -48,7 +48,10 @@ static inline void kref_get(struct kref *kref)
  * @release: pointer to the function that will clean up the object when the
  *	     last reference to the object is released.
  *	     This pointer is required, and it is not acceptable to pass kfree
- *	     in as this function.
+ *	     in as this function.  If the caller does pass kfree to this
+ *	     function, you will be publicly mocked mercilessly by the kref
+ *	     maintainer, and anyone else who happens to notice it.  You have
+ *	     been warned.
  *
  * Subtract @count from the refcount, and if 0, call release().
  * Return 1 if the object was removed, otherwise return 0.  Beware, if this
@@ -60,7 +63,6 @@ static inline int kref_sub(struct kref *kref, unsigned int count,
 	     void (*release)(struct kref *kref))
 {
 	WARN_ON(release == NULL);
-	WARN_ON(release == (void (*)(struct kref *))kfree);
 
 	if (atomic_sub_and_test((int) count, &kref->refcount)) {
 		release(kref);
@@ -75,7 +77,10 @@ static inline int kref_sub(struct kref *kref, unsigned int count,
  * @release: pointer to the function that will clean up the object when the
  *	     last reference to the object is released.
  *	     This pointer is required, and it is not acceptable to pass kfree
- *	     in as this function.
+ *	     in as this function.  If the caller does pass kfree to this
+ *	     function, you will be publicly mocked mercilessly by the kref
+ *	     maintainer, and anyone else who happens to notice it.  You have
+ *	     been warned.
  *
  * Decrement the refcount, and if 0, call release().
  * Return 1 if the object was removed, otherwise return 0.  Beware, if this
-- 
1.7.7.3

  reply	other threads:[~2011-12-14 19:25 UTC|newest]

Thread overview: 181+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-14  4:48 linux-next: build failure after merge of the driver-core tree Stephen Rothwell
2011-12-14  9:24 ` Peter Zijlstra
2011-12-14 15:03   ` Greg KH
2011-12-14 15:13     ` Peter Zijlstra
2011-12-14 17:01       ` Greg KH
2011-12-14 19:24         ` Greg KH [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-08-15  7:24 Stephen Rothwell
2023-08-15 15:21 ` Greg KH
2023-08-16  7:39   ` Maxime Ripard
2023-04-11  4:38 Stephen Rothwell
2023-04-11  9:55 ` Daniel Vetter
2023-04-11 10:40   ` Greg KH
2023-04-11 15:01     ` Daniel Vetter
2023-04-11 15:08       ` Jeffrey Hugo
2023-04-11 15:13         ` Greg KH
2023-04-11 15:26           ` Jeffrey Hugo
2023-04-11 15:29             ` Jeffrey Hugo
2023-04-11 16:31               ` Daniel Vetter
2023-04-11 17:18                 ` Jeffrey Hugo
2023-04-11 18:21                   ` Daniel Vetter
2023-04-11 18:37                     ` Jeffrey Hugo
2023-04-11 18:47                       ` Daniel Vetter
2023-04-12  6:11                         ` Greg KH
2023-03-27  4:46 Stephen Rothwell
2023-03-27  7:33 ` Greg KH
2023-03-27  8:22   ` Stephen Rothwell
2023-03-27  9:15     ` Greg KH
2023-03-27 15:09       ` Vasily Gorbik
2023-01-30  4:28 Stephen Rothwell
2023-01-30 16:01 ` Greg KH
2023-01-30 16:23   ` Geert Uytterhoeven
2022-12-01  2:18 Stephen Rothwell
2022-11-30  1:38 Stephen Rothwell
2022-11-30 12:01 ` Greg KH
2022-11-28  2:36 Stephen Rothwell
2022-11-28 11:50 ` Greg KH
2022-11-28 12:44   ` Stephen Rothwell
2022-11-28 16:22     ` Greg KH
2022-11-28 19:46       ` Stephen Rothwell
2022-11-29  8:28         ` Greg KH
2022-11-28 17:35     ` Greg KH
2022-11-14  4:12 Stephen Rothwell
2022-11-14  8:46 ` Andy Shevchenko
2022-11-14  8:59   ` Greg KH
2021-07-23  5:09 Stephen Rothwell
2021-07-23  5:34 ` Uwe Kleine-König
2021-08-10 12:13   ` Geert Uytterhoeven
2021-08-12 20:51     ` Doug Anderson
2021-02-10 10:47 Stephen Rothwell
2021-02-10 18:18 ` Greg KH
2021-02-10 19:06   ` Saravana Kannan
2021-02-10 19:17     ` Saravana Kannan
2021-02-10 19:36       ` Greg KH
2021-02-10 20:14       ` Rob Herring
2021-02-10 20:43         ` Saravana Kannan
2021-02-10 20:59           ` Rob Herring
2020-09-09  5:47 Stephen Rothwell
2020-09-09  7:21 ` Greg KH
2020-09-09 21:47   ` Kees Cook
2020-09-09  7:28 ` Greg KH
2020-07-27  6:55 Stephen Rothwell
2020-07-27 10:17 ` Greg KH
2020-07-28 19:53   ` Kees Cook
2019-09-18 17:09 Mark Brown
2019-09-18 18:52 ` Greg KH
2019-09-18 19:03   ` Linus Torvalds
2019-09-18 19:07     ` Greg KH
2019-09-18 20:56       ` Suzuki K Poulose
2019-09-18 21:55     ` Mark Brown
2019-08-29  7:35 Stephen Rothwell
2019-08-29 10:10 ` Greg KH
2019-02-01  2:41 Stephen Rothwell
2019-02-01 14:18 ` Greg KH
2017-06-13  6:04 Stephen Rothwell
2017-06-13  6:20 ` Greg KH
2017-06-13  6:25   ` Stephen Rothwell
2017-06-13  6:30   ` Sergey Senozhatsky
2016-05-02  5:42 Stephen Rothwell
2016-05-02 11:40 ` William Breathitt Gray
2016-05-02 14:47   ` Greg KH
2015-05-21  7:52 Stephen Rothwell
2014-12-01  7:49 Stephen Rothwell
2014-05-28  8:03 Stephen Rothwell
2014-05-28  9:30 ` Jean Delvare
2014-03-12  0:51 Mark Brown
2014-03-12  1:50 ` Greg KH
2014-03-12  3:55   ` Benjamin Herrenschmidt
2014-03-12 11:37     ` Mark Brown
2014-03-12 19:59       ` Benjamin Herrenschmidt
2014-03-12 20:02         ` Tejun Heo
2014-03-12 20:14           ` Benjamin Herrenschmidt
2014-03-12 20:21             ` Tejun Heo
2014-03-13  0:37               ` Benjamin Herrenschmidt
2014-03-13 22:14                 ` Benjamin Herrenschmidt
2014-03-14 13:00                   ` Tejun Heo
2014-03-15  0:03                   ` Greg KH
2014-03-15  2:57                     ` Benjamin Herrenschmidt
2014-03-15  5:29                       ` Greg KH
2014-03-15  7:14                         ` Benjamin Herrenschmidt
2014-03-16 23:16                         ` Stephen Rothwell
2014-03-17 18:36                           ` Greg KH
2014-03-16 23:16   ` Stephen Rothwell
2014-03-17 18:33     ` Greg KH
2014-03-17 20:33       ` Benjamin Herrenschmidt
2014-03-17 21:56         ` Greg KH
2014-03-17 22:05           ` Tejun Heo
2014-03-17 22:21             ` Tejun Heo
2014-03-18  0:07               ` Stewart Smith
2014-03-18  0:22               ` Benjamin Herrenschmidt
2014-03-18 15:58                 ` Tejun Heo
2014-03-18  0:00           ` Stewart Smith
2014-03-18  0:16           ` Benjamin Herrenschmidt
2014-03-17  8:28 ` Stephen Rothwell
2013-08-22  5:39 Stephen Rothwell
2013-08-22 15:36 ` Greg KH
2013-01-18  2:29 Stephen Rothwell
2013-01-18  4:13 ` Greg KH
2013-01-18 14:14   ` Kondratiev, Vladimir
2012-08-17  4:01 Stephen Rothwell
2012-08-17 13:25 ` Greg KH
2012-07-10  5:32 Stephen Rothwell
2012-07-10  9:03 ` Mark Brown
2012-07-10 11:14   ` Stephen Rothwell
2012-07-10 21:10     ` Linus Walleij
2012-05-01  4:59 Stephen Rothwell
2012-05-01  7:05 ` Bart Van Assche
2012-05-01 13:45 ` Greg KH
2012-04-19  4:48 Stephen Rothwell
2012-04-19 20:07 ` Greg KH
2012-04-20  2:19 ` Greg KH
2012-01-27  2:59 Stephen Rothwell
2012-01-27 15:24 ` Alan Stern
2012-01-27 22:36 ` Greg KH
2012-01-05  6:28 Stephen Rothwell
2012-01-05 23:20 ` Greg KH
2011-12-28  6:45 Stephen Rothwell
2012-01-03 16:21 ` Greg KH
2012-01-04  0:07   ` Kay Sievers
2012-01-04  0:31     ` Greg KH
2012-01-04 22:03       ` Kay Sievers
2012-01-04 23:13         ` Greg KH
2012-01-04 23:07 ` Greg KH
2012-01-04 23:48   ` Stephen Rothwell
2012-01-05  0:01     ` Kay Sievers
2012-01-05  0:17       ` Stephen Rothwell
2012-01-05  0:57       ` Josh Triplett
2011-12-15  6:37 Stephen Rothwell
2011-12-15  7:21 ` Greg KH
2011-12-15 10:10   ` Kay Sievers
2011-12-15 19:09     ` Greg KH
2011-11-21  1:57 Stephen Rothwell
2010-08-04  4:25 Stephen Rothwell
2010-08-04  4:44 ` Guenter Roeck
2010-08-04 15:52 ` Greg KH
2010-08-04 21:24 ` Jesse Barnes
2010-05-18  6:45 Stephen Rothwell
2010-05-18  7:00 ` Eric W. Biederman
2010-05-18  7:48   ` Al Viro
2010-05-18  7:54   ` Stephen Rothwell
2010-05-18 10:35     ` Eric W. Biederman
2010-05-18 15:02       ` Al Viro
2010-05-18 19:58 ` Eric W. Biederman
2010-05-18 21:25   ` Greg KH
2010-05-18 21:59     ` Eric W. Biederman
2010-05-18  6:44 Stephen Rothwell
2010-05-18 14:02 ` Greg KH
2010-05-18 14:04   ` Chris Wright
2010-05-18 21:06   ` Chris Wright
2010-05-18 21:24     ` Greg KH
2010-03-17  4:41 Stephen Rothwell
2010-03-17  7:21 ` Neil Brown
2010-03-17 15:51   ` Sage Weil
2010-03-17 22:30     ` Stephen Rothwell
2010-03-24  1:37     ` Neil Brown
2010-03-24 14:54       ` Sage Weil
2010-03-03  6:14 Stephen Rothwell
2010-03-03  6:31 ` Stephen Rothwell
2010-02-16  6:39 Stephen Rothwell
2010-02-16  9:01 ` Jean Delvare
2010-02-17  4:56   ` Greg KH
2010-02-18  4:27     ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111214192455.GA4155@kroah.com \
    --to=greg@kroah.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=sfr@canb.auug.org.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).