From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@suse.de>, Kay Sievers <kay.sievers@vrfy.org>
Subject: [PATCH 178/196] kobject: update the kobject/kset documentation
Date: Thu, 24 Jan 2008 23:33:27 -0800 [thread overview]
Message-ID: <1201246425-5058-99-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <20080125071127.GA4860@kroah.com>
This provides a much-needed kobject and kset documentation update.
Thanks to Kay Sievers, Alan Stern, Jonathan Corbet, Randy Dunlap, Jan
Engelhardt, and others for reviewing and providing help with this
document.
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
Documentation/kobject.txt | 386 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 386 insertions(+), 0 deletions(-)
create mode 100644 Documentation/kobject.txt
diff --git a/Documentation/kobject.txt b/Documentation/kobject.txt
new file mode 100644
index 0000000..bf3256e
--- /dev/null
+++ b/Documentation/kobject.txt
@@ -0,0 +1,386 @@
+Everything you never wanted to know about kobjects, ksets, and ktypes
+
+Greg Kroah-Hartman <gregkh@suse.de>
+
+Based on an original article by Jon Corbet for lwn.net written October 1,
+2003 and located at http://lwn.net/Articles/51437/
+
+Last updated December 19, 2007
+
+
+Part of the difficulty in understanding the driver model - and the kobject
+abstraction upon which it is built - is that there is no obvious starting
+place. Dealing with kobjects requires understanding a few different types,
+all of which make reference to each other. In an attempt to make things
+easier, we'll take a multi-pass approach, starting with vague terms and
+adding detail as we go. To that end, here are some quick definitions of
+some terms we will be working with.
+
+ - A kobject is an object of type struct kobject. Kobjects have a name
+ and a reference count. A kobject also has a parent pointer (allowing
+ objects to be arranged into hierarchies), a specific type, and,
+ usually, a representation in the sysfs virtual filesystem.
+
+ Kobjects are generally not interesting on their own; instead, they are
+ usually embedded within some other structure which contains the stuff
+ the code is really interested in.
+
+ No structure should EVER have more than one kobject embedded within it.
+ If it does, the reference counting for the object is sure to be messed
+ up and incorrect, and your code will be buggy. So do not do this.
+
+ - A ktype is the type of object that embeds a kobject. Every structure
+ that embeds a kobject needs a corresponding ktype. The ktype controls
+ what happens to the kobject when it is created and destroyed.
+
+ - A kset is a group of kobjects. These kobjects can be of the same ktype
+ or belong to different ktypes. The kset is the basic container type for
+ collections of kobjects. Ksets contain their own kobjects, but you can
+ safely ignore that implementation detail as the kset core code handles
+ this kobject automatically.
+
+ When you see a sysfs directory full of other directories, generally each
+ of those directories corresponds to a kobject in the same kset.
+
+We'll look at how to create and manipulate all of these types. A bottom-up
+approach will be taken, so we'll go back to kobjects.
+
+
+Embedding kobjects
+
+It is rare for kernel code to create a standalone kobject, with one major
+exception explained below. Instead, kobjects are used to control access to
+a larger, domain-specific object. To this end, kobjects will be found
+embedded in other structures. If you are used to thinking of things in
+object-oriented terms, kobjects can be seen as a top-level, abstract class
+from which other classes are derived. A kobject implements a set of
+capabilities which are not particularly useful by themselves, but which are
+nice to have in other objects. The C language does not allow for the
+direct expression of inheritance, so other techniques - such as structure
+embedding - must be used.
+
+So, for example, the UIO code has a structure that defines the memory
+region associated with a uio device:
+
+struct uio_mem {
+ struct kobject kobj;
+ unsigned long addr;
+ unsigned long size;
+ int memtype;
+ void __iomem *internal_addr;
+};
+
+If you have a struct uio_mem structure, finding its embedded kobject is
+just a matter of using the kobj member. Code that works with kobjects will
+often have the opposite problem, however: given a struct kobject pointer,
+what is the pointer to the containing structure? You must avoid tricks
+(such as assuming that the kobject is at the beginning of the structure)
+and, instead, use the container_of() macro, found in <linux/kernel.h>:
+
+ container_of(pointer, type, member)
+
+where pointer is the pointer to the embedded kobject, type is the type of
+the containing structure, and member is the name of the structure field to
+which pointer points. The return value from container_of() is a pointer to
+the given type. So, for example, a pointer "kp" to a struct kobject
+embedded within a struct uio_mem could be converted to a pointer to the
+containing uio_mem structure with:
+
+ struct uio_mem *u_mem = container_of(kp, struct uio_mem, kobj);
+
+Programmers often define a simple macro for "back-casting" kobject pointers
+to the containing type.
+
+
+Initialization of kobjects
+
+Code which creates a kobject must, of course, initialize that object. Some
+of the internal fields are setup with a (mandatory) call to kobject_init():
+
+ void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
+
+The ktype is required for a kobject to be created properly, as every kobject
+must have an associated kobj_type. After calling kobject_init(), to
+register the kobject with sysfs, the function kobject_add() must be called:
+
+ int kobject_add(struct kobject *kobj, struct kobject *parent, const char *fmt, ...);
+
+This sets up the parent of the kobject and the name for the kobject
+properly. If the kobject is to be associated with a specific kset,
+kobj->kset must be assigned before calling kobject_add(). If a kset is
+associated with a kobject, then the parent for the kobject can be set to
+NULL in the call to kobject_add() and then the kobject's parent will be the
+kset itself.
+
+As the name of the kobject is set when it is added to the kernel, the name
+of the kobject should never be manipulated directly. If you must change
+the name of the kobject, call kobject_rename():
+
+ int kobject_rename(struct kobject *kobj, const char *new_name);
+
+There is a function called kobject_set_name() but that is legacy cruft and
+is being removed. If your code needs to call this function, it is
+incorrect and needs to be fixed.
+
+To properly access the name of the kobject, use the function
+kobject_name():
+
+ const char *kobject_name(const struct kobject * kobj);
+
+There is a helper function to both initialize and add the kobject to the
+kernel at the same time, called supprisingly enough kobject_init_and_add():
+
+ int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
+ struct kobject *parent, const char *fmt, ...);
+
+The arguments are the same as the individual kobject_init() and
+kobject_add() functions described above.
+
+
+Uevents
+
+After a kobject has been registered with the kobject core, you need to
+announce to the world that it has been created. This can be done with a
+call to kobject_uevent():
+
+ int kobject_uevent(struct kobject *kobj, enum kobject_action action);
+
+Use the KOBJ_ADD action for when the kobject is first added to the kernel.
+This should be done only after any attributes or children of the kobject
+have been initialized properly, as userspace will instantly start to look
+for them when this call happens.
+
+When the kobject is removed from the kernel (details on how to do that is
+below), the uevent for KOBJ_REMOVE will be automatically created by the
+kobject core, so the caller does not have to worry about doing that by
+hand.
+
+
+Reference counts
+
+One of the key functions of a kobject is to serve as a reference counter
+for the object in which it is embedded. As long as references to the object
+exist, the object (and the code which supports it) must continue to exist.
+The low-level functions for manipulating a kobject's reference counts are:
+
+ struct kobject *kobject_get(struct kobject *kobj);
+ void kobject_put(struct kobject *kobj);
+
+A successful call to kobject_get() will increment the kobject's reference
+counter and return the pointer to the kobject.
+
+When a reference is released, the call to kobject_put() will decrement the
+reference count and, possibly, free the object. Note that kobject_init()
+sets the reference count to one, so the code which sets up the kobject will
+need to do a kobject_put() eventually to release that reference.
+
+Because kobjects are dynamic, they must not be declared statically or on
+the stack, but instead, always allocated dynamically. Future versions of
+the kernel will contain a run-time check for kobjects that are created
+statically and will warn the developer of this improper usage.
+
+If all that you want to use a kobject for is to provide a reference counter
+for your structure, please use the struct kref instead; a kobject would be
+overkill. For more information on how to use struct kref, please see the
+file Documentation/kref.txt in the Linux kernel source tree.
+
+
+Creating "simple" kobjects
+
+Sometimes all that a developer wants is a way to create a simple directory
+in the sysfs hierarchy, and not have to mess with the whole complication of
+ksets, show and store functions, and other details. This is the one
+exception where a single kobject should be created. To create such an
+entry, use the function:
+
+ struct kobject *kobject_create_and_add(char *name, struct kobject *parent);
+
+This function will create a kobject and place it in sysfs in the location
+underneath the specified parent kobject. To create simple attributes
+associated with this kobject, use:
+
+ int sysfs_create_file(struct kobject *kobj, struct attribute *attr);
+or
+ int sysfs_create_group(struct kobject *kobj, struct attribute_group *grp);
+
+Both types of attributes used here, with a kobject that has been created
+with the kobject_create_and_add(), can be of type kobj_attribute, so no
+special custom attribute is needed to be created.
+
+See the example module, samples/kobject/kobject-example.c for an
+implementation of a simple kobject and attributes.
+
+
+
+ktypes and release methods
+
+One important thing still missing from the discussion is what happens to a
+kobject when its reference count reaches zero. The code which created the
+kobject generally does not know when that will happen; if it did, there
+would be little point in using a kobject in the first place. Even
+predictable object lifecycles become more complicated when sysfs is brought
+in as other portions of the kernel can get a reference on any kobject that
+is registered in the system.
+
+The end result is that a structure protected by a kobject cannot be freed
+before its reference count goes to zero. The reference count is not under
+the direct control of the code which created the kobject. So that code must
+be notified asynchronously whenever the last reference to one of its
+kobjects goes away.
+
+Once you registered your kobject via kobject_add(), you must never use
+kfree() to free it directly. The only safe way is to use kobject_put(). It
+is good practice to always use kobject_put() after kobject_init() to avoid
+errors creeping in.
+
+This notification is done through a kobject's release() method. Usually
+such a method has a form like:
+
+ void my_object_release(struct kobject *kobj)
+ {
+ struct my_object *mine = container_of(kobj, struct my_object, kobj);
+
+ /* Perform any additional cleanup on this object, then... */
+ kfree(mine);
+ }
+
+One important point cannot be overstated: every kobject must have a
+release() method, and the kobject must persist (in a consistent state)
+until that method is called. If these constraints are not met, the code is
+flawed. Note that the kernel will warn you if you forget to provide a
+release() method. Do not try to get rid of this warning by providing an
+"empty" release function; you will be mocked mercilessly by the kobject
+maintainer if you attempt this.
+
+Note, the name of the kobject is available in the release function, but it
+must NOT be changed within this callback. Otherwise there will be a memory
+leak in the kobject core, which makes people unhappy.
+
+Interestingly, the release() method is not stored in the kobject itself;
+instead, it is associated with the ktype. So let us introduce struct
+kobj_type:
+
+ struct kobj_type {
+ void (*release)(struct kobject *);
+ struct sysfs_ops *sysfs_ops;
+ struct attribute **default_attrs;
+ };
+
+This structure is used to describe a particular type of kobject (or, more
+correctly, of containing object). Every kobject needs to have an associated
+kobj_type structure; a pointer to that structure must be specified when you
+call kobject_init() or kobject_init_and_add().
+
+The release field in struct kobj_type is, of course, a pointer to the
+release() method for this type of kobject. The other two fields (sysfs_ops
+and default_attrs) control how objects of this type are represented in
+sysfs; they are beyond the scope of this document.
+
+The default_attrs pointer is a list of default attributes that will be
+automatically created for any kobject that is registered with this ktype.
+
+
+ksets
+
+A kset is merely a collection of kobjects that want to be associated with
+each other. There is no restriction that they be of the same ktype, but be
+very careful if they are not.
+
+A kset serves these functions:
+
+ - It serves as a bag containing a group of objects. A kset can be used by
+ the kernel to track "all block devices" or "all PCI device drivers."
+
+ - A kset is also a subdirectory in sysfs, where the associated kobjects
+ with the kset can show up. Every kset contains a kobject which can be
+ set up to be the parent of other kobjects; the top-level directories of
+ the sysfs hierarchy are constructed in this way.
+
+ - Ksets can support the "hotplugging" of kobjects and influence how
+ uevent events are reported to user space.
+
+In object-oriented terms, "kset" is the top-level container class; ksets
+contain their own kobject, but that kobject is managed by the kset code and
+should not be manipulated by any other user.
+
+A kset keeps its children in a standard kernel linked list. Kobjects point
+back to their containing kset via their kset field. In almost all cases,
+the kobjects belonging to a ket have that kset (or, strictly, its embedded
+kobject) in their parent.
+
+As a kset contains a kobject within it, it should always be dynamically
+created and never declared statically or on the stack. To create a new
+kset use:
+ struct kset *kset_create_and_add(const char *name,
+ struct kset_uevent_ops *u,
+ struct kobject *parent);
+
+When you are finished with the kset, call:
+ void kset_unregister(struct kset *kset);
+to destroy it.
+
+An example of using a kset can be seen in the
+samples/kobject/kset-example.c file in the kernel tree.
+
+If a kset wishes to control the uevent operations of the kobjects
+associated with it, it can use the struct kset_uevent_ops to handle it:
+
+struct kset_uevent_ops {
+ int (*filter)(struct kset *kset, struct kobject *kobj);
+ const char *(*name)(struct kset *kset, struct kobject *kobj);
+ int (*uevent)(struct kset *kset, struct kobject *kobj,
+ struct kobj_uevent_env *env);
+};
+
+
+The filter function allows a kset to prevent a uevent from being emitted to
+userspace for a specific kobject. If the function returns 0, the uevent
+will not be emitted.
+
+The name function will be called to override the default name of the kset
+that the uevent sends to userspace. By default, the name will be the same
+as the kset itself, but this function, if present, can override that name.
+
+The uevent function will be called when the uevent is about to be sent to
+userspace to allow more environment variables to be added to the uevent.
+
+One might ask how, exactly, a kobject is added to a kset, given that no
+functions which perform that function have been presented. The answer is
+that this task is handled by kobject_add(). When a kobject is passed to
+kobject_add(), its kset member should point to the kset to which the
+kobject will belong. kobject_add() will handle the rest.
+
+If the kobject belonging to a kset has no parent kobject set, it will be
+added to the kset's directory. Not all members of a kset do necessarily
+live in the kset directory. If an explicit parent kobject is assigned
+before the kobject is added, the kobject is registered with the kset, but
+added below the parent kobject.
+
+
+Kobject removal
+
+After a kobject has been registered with the kobject core successfully, it
+must be cleaned up when the code is finished with it. To do that, call
+kobject_put(). By doing this, the kobject core will automatically clean up
+all of the memory allocated by this kobject. If a KOBJ_ADD uevent has been
+sent for the object, a corresponding KOBJ_REMOVE uevent will be sent, and
+any other sysfs housekeeping will be handled for the caller properly.
+
+If you need to do a two-stage delete of the kobject (say you are not
+allowed to sleep when you need to destroy the object), then call
+kobject_del() which will unregister the kobject from sysfs. This makes the
+kobject "invisible", but it is not cleaned up, and the reference count of
+the object is still the same. At a later time call kobject_put() to finish
+the cleanup of the memory associated with the kobject.
+
+kobject_del() can be used to drop the reference to the parent object, if
+circular references are constructed. It is valid in some cases, that a
+parent objects references a child. Circular references _must_ be broken
+with an explicit call to kobject_del(), so that a release functions will be
+called, and the objects in the former circle release each other.
+
+
+Example code to copy from
+
+For a more complete example of using ksets and kobjects properly, see the
+sample/kobject/kset-example.c code.
--
1.5.3.8
next prev parent reply other threads:[~2008-01-25 8:33 UTC|newest]
Thread overview: 272+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-25 7:11 [GIT PATCH] driver core patches against 2.6.24 Greg KH
2008-01-25 7:08 ` [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 002/196] Chinese: rephrase English introduction in HOWTO Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 004/196] Chinese: add translation of SubmittingPatches Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 005/196] Chinese: add translation of SubmittingDrivers Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 006/196] Chinese: add translation of oops-tracing.txt Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 007/196] Chinese: add translation of stable_kernel_rules.txt Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 008/196] Chinese: add translation of volatile-considered-harmful.txt Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 009/196] Chinese: add translation of sparse.txt Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 010/196] Chinese: add translation of Codingstyle Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 011/196] sysfs: Fix a copy-n-paste typo in comment Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 012/196] nozomi driver Greg Kroah-Hartman
2008-01-25 8:31 ` Jan Engelhardt
2008-01-25 11:56 ` Stefan Richter
2008-01-25 12:44 ` [PATCH 012/196 ver2] " Frank Seidel
2008-01-25 18:55 ` Greg KH
2008-01-25 19:33 ` Frank Seidel
2008-01-25 19:43 ` Greg KH
2008-01-25 20:14 ` Frank Seidel
2008-01-25 20:13 ` Frank Seidel
2008-01-25 12:44 ` [PATCH 012/196] " Frank Seidel
2008-01-25 13:21 ` Jan Engelhardt
2008-01-25 17:02 ` Valdis.Kletnieks
2008-01-25 7:09 ` [PATCH 013/196] Documentation: Replace obsolete "driverfs" with "sysfs" Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 014/196] kobject: remove incorrect comment in kobject_rename Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 015/196] PM: Acquire device locks on suspend Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 016/196] kref: add kref_set() Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 017/196] aoechr: Convert from class_device to device Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 018/196] coda: convert struct class_device to struct device Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 019/196] DMA: Convert from class_device to device for DMA engine Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 020/196] IDE: Convert from class_device to device for ide-tape Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 021/196] ISDN: Convert from class_device to device for ISDN capi Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 022/196] adb: Convert from class_device to device Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 023/196] MCP_UCB1200: " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 024/196] mtd: Convert from class_device to device for MTD/mtdchar Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 025/196] paride: Convert from class_device to device for block/paride Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 026/196] pktcdvd: Convert from class_device to device for block/pktcdvd Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 027/196] tifm: Convert from class_device to device for TI flash media Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 028/196] cosa: Convert from class_device to device for cosa sync driver Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 029/196] ecryptfs: clean up attribute mess Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 030/196] driver core: Make the dev_*() family of macros in device.h complete Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 031/196] sysfs: create optimal relative symlink targets Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 032/196] sysfs: remove SPIN_LOCK_UNLOCKED Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 033/196] kobject: convert ibmasm to use kref, not kobject Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 034/196] kobject: convert hvc_console " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 035/196] kobject: convert hvcs " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 036/196] kobject: convert icom " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 037/196] kobject: fix up kobject_set_name to use kvasprintf Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 038/196] kobject: make kobject_cleanup be static Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 039/196] kobject: add kobject_init_ng function Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 040/196] kobject: add kobject_add_ng function Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 041/196] kobject: add kobject_init_and_add function Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 042/196] kobject: remove struct kobj_type from struct kset Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 043/196] kobject: remove kobj_set_kset_s as no one is using it anymore Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 044/196] kset: add kset_create_and_add function Greg Kroah-Hartman
2008-01-25 9:09 ` Dave Young
2008-01-25 17:51 ` Greg KH
2008-01-25 7:09 ` [PATCH 045/196] kobject: add kobject_create_and_add function Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 046/196] kobject: get rid of kobject_add_dir Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 047/196] kobject: get rid of kobject_kset_add_dir Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 048/196] kobject: convert fuse to use kobject_create Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 049/196] kobject: convert securityfs " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 050/196] kobject: convert debugfs " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 051/196] kobject: convert configfs " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 052/196] kset: convert ecryptfs to use kset_create Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 053/196] kobject: convert main fs kobject to use kobject_create Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 054/196] kset: convert gfs2 to use kset_create Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 055/196] kset: convert gfs2 dlm " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 056/196] kset: convert " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 057/196] kset: convert pci hotplug to use kset_create_and_add Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 058/196] kset: remove decl_subsys_name Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 059/196] kset: convert kernel_subsys to use kset_create Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 060/196] kset: convert drivers/base/bus.c " Greg Kroah-Hartman
2008-01-25 7:09 ` [PATCH 061/196] kset: convert drivers/base/class.c " Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 062/196] kset: convert drivers/base/firmware.c " Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 063/196] kset: convert /sys/devices " Greg Kroah-Hartman
2008-01-26 3:40 ` Olof Johansson
2008-01-26 5:24 ` Greg KH
2008-01-26 17:36 ` Olof Johansson
2008-01-25 7:10 ` [PATCH 064/196] kobject: convert /sys/hypervisor to use kobject_create Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 065/196] kobject: convert s390 hypervisor " Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 066/196] kset: convert /sys/devices/system to use kset_create Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 067/196] kset: convert slub " Greg Kroah-Hartman
2008-01-25 18:16 ` Christoph Lameter
2008-01-25 7:10 ` [PATCH 068/196] kset: move /sys/slab to /sys/kernel/slab Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 069/196] kset: convert /sys/module to use kset_create Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 070/196] kset: convert /sys/power " Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 071/196] kset: convert struct bus_device->devices " Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 072/196] kset: convert struct bus_device->drivers " Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 073/196] Driver Core: add kobj_attribute handling Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 074/196] Driver Core: switch all dynamic ksets to kobj_sysfs_ops Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 075/196] fix struct user_info export's sysfs interaction Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 076/196] ecryptfs: remove version_str file from sysfs Greg Kroah-Hartman
2008-01-25 8:25 ` Jeff Garzik
2008-01-25 17:54 ` Greg KH
2008-01-25 19:14 ` Michael Halcrow
2008-01-25 22:04 ` Jeff Garzik
2008-01-25 7:10 ` [PATCH 077/196] efivars: make new_var and del_var binary sysfs files Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 078/196] kobject: convert efivars to kobj_attr interface Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 079/196] firmware: export firmware_kset so that people can use that instead of the braindead firmware_register interface Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 080/196] kset: convert efivars to use kset_create for the efi subsystem Greg Kroah-Hartman
2008-01-25 7:10 ` [PATCH 081/196] kset: convert efivars to use kset_create for the vars sub-subsystem Greg Kroah-Hartman
2008-01-25 7:27 ` [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO Greg Kroah-Hartman
2008-01-25 7:27 ` [PATCH 002/196] Chinese: rephrase English introduction in HOWTO Greg Kroah-Hartman
2008-01-25 7:27 ` [PATCH 004/196] Chinese: add translation of SubmittingPatches Greg Kroah-Hartman
2008-01-25 7:28 ` [PATCH 080/196] kset: convert efivars to use kset_create for the efi subsystem Greg Kroah-Hartman
2008-01-25 7:28 ` [PATCH 081/196] kset: convert efivars to use kset_create for the vars sub-subsystem Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 080/196] kset: convert efivars to use kset_create for the efi subsystem Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 081/196] kset: convert efivars to use kset_create for the vars sub-subsystem Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 082/196] kobject: convert arm/mach-omap1/pm.c to kobj_attr interface Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 083/196] kobject: convert pseries/power.c " Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 084/196] kobject: convert s390 ipl.c " Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 085/196] kset: convert s390 ipl.c to use kset_create Greg Kroah-Hartman
2008-01-25 12:20 ` Heiko Carstens
2008-01-25 17:48 ` Greg KH
2008-01-25 23:11 ` Heiko Carstens
2008-01-26 5:33 ` Greg KH
2008-01-25 7:31 ` [PATCH 086/196] kobject: convert parisc/pdc_stable to kobj_attr interface Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 087/196] kset: convert parisc/pdc_stable.c to use kset_create Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 088/196] Driver Core: kill subsys_attribute and default sysfs ops Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 089/196] kset: convert edd to use kset_create Greg Kroah-Hartman
2008-01-25 7:31 ` [PATCH 090/196] kobject: convert /sys/firmware/acpi/ to use kobject_create Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 091/196] firmware: remove firmware_(un)register() Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 092/196] firmware: change firmware_kset to firmware_kobj Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 093/196] kset: convert ocfs2 to use kset_create Greg Kroah-Hartman
2008-01-25 20:38 ` Mark Fasheh
2008-01-25 7:32 ` [PATCH 094/196] kset: convert block_subsys " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 095/196] kset: remove decl_subsys macro Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 096/196] kobject: convert kernel_kset to be a kobject Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 097/196] kobject: remove subsystem_(un)register functions Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 098/196] kobject: clean up rpadlpar horrid sysfs abuse Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 099/196] kobject: convert ecryptfs to use kobject_create Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 100/196] kobject: convert efivars " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 101/196] kobject: convert parisc/pdc_stable " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 102/196] driver core: clean up shutdown.c Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 103/196] driver core: clean up device_shutdown Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 104/196] driver core: make /sys/power a kobject Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 105/196] kobject: grab the kset reference in kobject_add, not kobject_init Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 106/196] kobject: clean up debugging messages Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 107/196] UIO: fix kobject usage Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 108/196] Kobject: change net/bridge to use kobject_create_and_add Greg Kroah-Hartman
2008-01-25 16:19 ` Stephen Hemminger
2008-01-25 17:45 ` Greg KH
2008-01-28 22:09 ` Jan Engelhardt
2008-01-28 23:10 ` Greg KH
2008-01-25 7:32 ` [PATCH 109/196] Kobject: change GFS2 to use kobject_init_and_add Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 110/196] Kobject: change drivers/infiniband " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 111/196] Kobject: change drivers/firmware/edd.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 112/196] Kobject: change drivers/firmware/efivars.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 113/196] Kobject: change drivers/cpufreq/cpufreq.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 114/196] Kobject: change drivers/edac " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 115/196] Kobject: change drivers/cpuidle/sysfs.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 116/196] Kobject: change drivers/pci/hotplug/pci_hotplug_core.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 117/196] Kobject: change drivers/base/sys.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 118/196] Kobject: change arch/x86/kernel/cpu/intel_cacheinfo.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 119/196] Kobject: change drivers/acpi/system.c to use kobject_create_and_add Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 120/196] Kobject: change drivers/block/pktcdvd.c to use kobject_init_and_add Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 121/196] Kobject: change arch/sh/kernel/cpu/sh4/sq.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 122/196] Kobject: change drivers/net/ibmveth.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 123/196] Kobject: change drivers/parisc/pdc_stable.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 124/196] Kobject: change arch/ia64/kernel/topology.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 125/196] Kobject: change drivers/md/md.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 126/196] Kobject: change arch/x86/kernel/cpu/mcheck/mce_amd_64.c to use kobject_create_and_add Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 127/196] Kobject: change arch/x86/kernel/cpu/mcheck/mce_amd_64.c to use kobject_init_and_add Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 128/196] Kobject: the cris iop_fw_load.c code is broken Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 129/196] Kobject: convert drivers/base/class.c to use kobject_init/add_ng() Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 130/196] Kobject: convert drivers/base/core.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 131/196] Kobject: convert drivers/net/iseries_veth.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 132/196] Kobject: convert fs/char_dev.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 133/196] Kobject: convert kernel/params.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 134/196] Kobject: convert kernel/user.c " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 135/196] Kobject: convert mm/slub.c " Greg Kroah-Hartman
2008-01-25 18:17 ` Christoph Lameter
2008-01-25 7:32 ` [PATCH 136/196] Kobject: convert net/bridge/br_if.c " Greg Kroah-Hartman
2008-01-25 16:20 ` Stephen Hemminger
2008-01-25 7:32 ` [PATCH 137/196] driver core: remove owner field from struct bus_type Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 138/196] driver core: add way to get to bus kset Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 139/196] driver core: add way to get to bus device klist Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 140/196] driver core: remove fields from struct bus_type Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 141/196] USB: use proper call to driver_create_file Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 142/196] PCMCIA: " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 143/196] PCI: " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 144/196] PCI: remove foolish code from pci-driver.c Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 145/196] driver core: Introduce default attribute groups Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 146/196] netiucv: Use device_driver " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 147/196] zfcp: " Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 148/196] Infiniband: make ipath driver use default driver groups Greg Kroah-Hartman
2008-01-25 21:51 ` Roland Dreier
2008-01-25 22:11 ` Roland Dreier
2008-01-25 22:23 ` Greg KH
2008-01-25 7:32 ` [PATCH 149/196] Driver: add driver_add_kobj for looney iseries_veth driver Greg Kroah-Hartman
2008-01-25 7:32 ` [PATCH 150/196] Driver core: move the driver specific module code into the driver core Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 151/196] Driver core: move the static kobject out of struct driver Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 152/196] Driver core: clean up debugging messages Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 153/196] Kobject: change drivers/base/bus to use kobject_init_and_add Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 154/196] Driver core: fix race in __device_release_driver Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 155/196] Driver core: fix class glue dir cleanup logic Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 156/196] sysfs: fix /sys/module/*/holders after sysfs logic change Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 157/196] Kobject: drop child->parent ref at unregistration Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 158/196] Driver core: convert block from raw kobjects to core devices Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 159/196] Kobject: convert block/elevator.c to use kobject_init/add_ng() Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 160/196] Kobject: convert block/ll_rw_blk.c " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 161/196] Kobject: convert drivers/md/md.c " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 162/196] Kobject: convert kernel/module.c " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 163/196] Kobject: remove kobject_add() as no one uses it anymore Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 164/196] Kobject: rename kobject_add_ng() to kobject_add() Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 165/196] Kobject: remove kobject_init() as no one uses it anymore Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 166/196] Kobject: rename kobject_init_ng() to kobject_init() Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 167/196] Kobject: remove kobject_register() Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 168/196] Kset: remove kset_add function Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 169/196] Kobject: auto-cleanup on final unref Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 170/196] Modules: remove unneeded release function Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 171/196] Kobject: convert arch/* from kobject_unregister() to kobject_put() Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 172/196] Kobject: convert drivers/* " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 173/196] Kobject: convert fs/* " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 174/196] Kobject: convert remaining " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 175/196] Kobject: remove kobject_unregister() as no one uses it anymore Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 176/196] Driver core: change sysdev classes to use dynamic kobject names Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 177/196] kobject: remove old, outdated documentation Greg Kroah-Hartman
2008-01-25 7:33 ` Greg Kroah-Hartman [this message]
2008-01-25 7:33 ` [PATCH 179/196] kobject: add sample code for how to use kobjects in a simple manner Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 180/196] kobject: add sample code for how to use ksets/ktypes/kobjects Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 181/196] Driver core: use LIST_HEAD instead of call to INIT_LIST_HEAD in __init Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 182/196] sysfs: make SYSFS_DEPRECATED depend on SYSFS Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 183/196] driver core: fix build with SYSFS=n Greg Kroah-Hartman
2008-01-25 22:25 ` Ingo Molnar
2008-01-25 22:33 ` Andrew Morton
2008-01-25 22:38 ` Greg KH
2008-01-25 22:57 ` Ingo Molnar
2008-01-25 23:10 ` Greg KH
2008-01-25 23:18 ` Ingo Molnar
2008-01-25 23:27 ` Harvey Harrison
2008-01-25 7:33 ` [PATCH 184/196] Driver Core: constify the name passed to platform_device_register_simple Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 185/196] UIO: constify function pointer tables Greg Kroah-Hartman
2008-01-25 10:01 ` Hans-Jürgen Koch
2008-01-25 7:33 ` [PATCH 186/196] Driver core: Cleanup get_device_parent() in device_add() and device_move() Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 187/196] Driver Core: add class iteration api Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 188/196] ieee1394: use " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 189/196] power supply : " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 190/196] rtc: " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 191/196] scsi: " Greg Kroah-Hartman
2008-01-25 14:55 ` James Bottomley
2008-01-25 7:33 ` [PATCH 192/196] spi: " Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 193/196] Driver core: fix coding style issues in device.h Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 194/196] Kobject: fix coding style issues in kobject.h Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 195/196] Kobject: fix coding style issues in kobject c files Greg Kroah-Hartman
2008-01-25 7:33 ` [PATCH 196/196] Driver core: coding style fixes Greg Kroah-Hartman
2008-01-25 18:44 ` [GIT PATCH] driver core patches against 2.6.24 Linus Torvalds
2008-01-25 18:52 ` Greg KH
2008-01-25 19:11 ` Linus Torvalds
2008-01-25 19:16 ` Greg KH
2008-01-25 19:27 ` Greg KH
2008-01-25 19:56 ` Jeremy Fitzhardinge
2008-01-25 21:20 ` Jon Masters
2008-01-25 21:49 ` Linus Torvalds
2008-01-25 21:58 ` Jeremy Fitzhardinge
2008-01-25 22:26 ` Peter Zijlstra
2008-01-26 0:05 ` Ingo Molnar
2008-01-26 0:27 ` Peter Zijlstra
2008-01-26 0:40 ` Jon Masters
2008-01-26 3:24 ` Valdis.Kletnieks
2008-01-28 8:26 ` Helge Hafting
2008-01-26 6:31 ` Arjan van de Ven
2008-01-25 19:42 ` Greg KH
2008-01-25 20:23 ` Linus Torvalds
2008-01-25 20:28 ` Greg KH
2008-01-26 4:50 ` Rusty Russell
2008-01-26 5:35 ` Greg KH
2008-01-26 9:19 ` Rusty Russell
2008-01-27 6:42 ` Linus Torvalds
2008-01-29 5:49 ` Rusty Russell
2008-01-25 21:11 ` Jon Masters
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=1201246425-5058-99-git-send-email-gregkh@suse.de \
--to=gregkh@suse.de \
--cc=kay.sievers@vrfy.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome