All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Driver Core update for 2.6.4
Date: Mon, 15 Mar 2004 15:59:09 -0800	[thread overview]
Message-ID: <1079395149503@kroah.com> (raw)
In-Reply-To: <10793951494179@kroah.com>

ChangeSet 1.1608.84.16, 2004/03/15 14:39:18-08:00, greg@kroah.com

kref: add kref structure to kernel tree.

Based on the kobject structure, but much smaller and simpler to use.


 include/linux/kref.h |   32 +++++++++++++++++++++++++++
 lib/Makefile         |    3 ++
 lib/kref.c           |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 95 insertions(+)


diff -Nru a/include/linux/kref.h b/include/linux/kref.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/linux/kref.h	Mon Mar 15 15:28:04 2004
@@ -0,0 +1,32 @@
+/*
+ * kref.c - library routines for handling generic reference counted objects
+ *
+ * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
+ * Copyright (C) 2004 IBM Corp.
+ *
+ * based on kobject.h which was:
+ * Copyright (C) 2002-2003 Patrick Mochel <mochel@osdl.org>
+ * Copyright (C) 2002-2003 Open Source Development Labs
+ *
+ * This file is released under the GPLv2.
+ *
+ */
+
+#if defined(__KERNEL__) && !defined(_KREF_H_)
+#define _KREF_H_
+
+#include <linux/types.h>
+#include <asm/atomic.h>
+
+
+struct kref {
+	atomic_t refcount;
+	void (*release)(struct kref *kref);
+};
+
+void kref_init(struct kref *kref, void (*release)(struct kref *));
+struct kref *kref_get(struct kref *kref);
+void kref_put(struct kref *kref);
+
+
+#endif /* _KREF_H_ */
diff -Nru a/lib/Makefile b/lib/Makefile
--- a/lib/Makefile	Mon Mar 15 15:28:04 2004
+++ b/lib/Makefile	Mon Mar 15 15:28:04 2004
@@ -8,6 +8,9 @@
 	 kobject.o idr.o div64.o parser.o int_sqrt.o \
 	 bitmap.o extable.o
 
+# hack for now till some static code uses krefs, then it can move up above...
+obj-y += kref.o
+
 lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
 lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
 
diff -Nru a/lib/kref.c b/lib/kref.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/lib/kref.c	Mon Mar 15 15:28:04 2004
@@ -0,0 +1,60 @@
+/*
+ * kref.c - library routines for handling generic reference counted objects
+ *
+ * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
+ * Copyright (C) 2004 IBM Corp.
+ *
+ * based on lib/kobject.c which was:
+ * Copyright (C) 2002-2003 Patrick Mochel <mochel@osdl.org>
+ *
+ * This file is released under the GPLv2.
+ *
+ */
+
+/* #define DEBUG */
+
+#include <linux/kref.h>
+#include <linux/module.h>
+
+/**
+ * kref_init - initialize object.
+ * @kref: object in question.
+ * @release: pointer to a function that will clean up the object
+ *	     when the last reference to the object is released.
+ *	     This pointer is required.
+ */
+void kref_init(struct kref *kref, void (*release)(struct kref *kref))
+{
+	WARN_ON(release == NULL);
+	atomic_set(&kref->refcount,1);
+	kref->release = release;
+}
+
+/**
+ * kref_get - increment refcount for object.
+ * @kref: object.
+ */
+struct kref *kref_get(struct kref *kref)
+{
+	WARN_ON(!atomic_read(&kref->refcount));
+	atomic_inc(&kref->refcount);
+	return kref;
+}
+
+/**
+ * kref_put - decrement refcount for object.
+ * @kref: object.
+ *
+ * Decrement the refcount, and if 0, call kref->release().
+ */
+void kref_put(struct kref *kref)
+{
+	if (atomic_dec_and_test(&kref->refcount)) {
+		pr_debug("kref cleaning up\n");
+		kref->release(kref);
+	}
+}
+
+EXPORT_SYMBOL(kref_init);
+EXPORT_SYMBOL(kref_get);
+EXPORT_SYMBOL(kref_put);


  reply	other threads:[~2004-03-16  1:03 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-03-15 23:55 [BK PATCH] Driver Core update for 2.6.4 Greg KH
2004-03-15 23:59 ` [PATCH] " Greg KH
2004-03-15 23:59   ` Greg KH
2004-03-15 23:59     ` Greg KH
2004-03-15 23:59       ` Greg KH
2004-03-15 23:59         ` Greg KH
2004-03-15 23:59           ` Greg KH
2004-03-15 23:59             ` Greg KH
2004-03-15 23:59               ` Greg KH
2004-03-15 23:59                 ` Greg KH
2004-03-15 23:59                   ` Greg KH
2004-03-15 23:59                     ` Greg KH
2004-03-15 23:59                       ` Greg KH
2004-03-15 23:59                         ` Greg KH
2004-03-15 23:59                           ` Greg KH
2004-03-15 23:59                             ` Greg KH
2004-03-15 23:59                               ` Greg KH [this message]
2004-03-16  7:04                                 ` Christoph Hellwig
2004-03-16  9:51                                   ` Andrew Morton
     [not found] <1AajM-5vw-21@gated-at.bofh.it>
     [not found] ` <1Abpq-6Av-1@gated-at.bofh.it>
     [not found]   ` <1Aj3K-5Fn-9@gated-at.bofh.it>
     [not found]     ` <1AjwZ-65D-15@gated-at.bofh.it>
2004-03-16 16:14       ` Andi Kleen
2004-03-16 19:40         ` Greg KH
2004-03-17  0:01           ` Andi Kleen
2004-03-19  9:17         ` Jamie Lokier
2004-03-19 11:52           ` Giuseppe Bilotta

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=1079395149503@kroah.com \
    --to=greg@kroah.com \
    --cc=linux-kernel@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.