aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/kobject.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/kobject.txt')
-rw-r--r--Documentation/kobject.txt489
1 files changed, 293 insertions, 196 deletions
diff --git a/Documentation/kobject.txt b/Documentation/kobject.txt
index ca86a885ad8f..bf3256e04027 100644
--- a/Documentation/kobject.txt
+++ b/Documentation/kobject.txt
@@ -1,289 +1,386 @@
1The kobject Infrastructure 1Everything you never wanted to know about kobjects, ksets, and ktypes
2 2
3Patrick Mochel <mochel@osdl.org> 3Greg Kroah-Hartman <gregkh@suse.de>
4 4
5Updated: 3 June 2003 5Based on an original article by Jon Corbet for lwn.net written October 1,
62003 and located at http://lwn.net/Articles/51437/
6 7
8Last updated December 19, 2007
7 9
8Copyright (c) 2003 Patrick Mochel
9Copyright (c) 2003 Open Source Development Labs
10 10
11Part of the difficulty in understanding the driver model - and the kobject
12abstraction upon which it is built - is that there is no obvious starting
13place. Dealing with kobjects requires understanding a few different types,
14all of which make reference to each other. In an attempt to make things
15easier, we'll take a multi-pass approach, starting with vague terms and
16adding detail as we go. To that end, here are some quick definitions of
17some terms we will be working with.
11 18
120. Introduction 19 - A kobject is an object of type struct kobject. Kobjects have a name
20 and a reference count. A kobject also has a parent pointer (allowing
21 objects to be arranged into hierarchies), a specific type, and,
22 usually, a representation in the sysfs virtual filesystem.
13 23
14The kobject infrastructure performs basic object management that larger 24 Kobjects are generally not interesting on their own; instead, they are
15data structures and subsystems can leverage, rather than reimplement 25 usually embedded within some other structure which contains the stuff
16similar functionality. This functionality primarily concerns: 26 the code is really interested in.
17 27
18- Object reference counting. 28 No structure should EVER have more than one kobject embedded within it.
19- Maintaining lists (sets) of objects. 29 If it does, the reference counting for the object is sure to be messed
20- Object set locking. 30 up and incorrect, and your code will be buggy. So do not do this.
21- Userspace representation.
22 31
23The infrastructure consists of a number of object types to support 32 - A ktype is the type of object that embeds a kobject. Every structure
24this functionality. Their programming interfaces are described below 33 that embeds a kobject needs a corresponding ktype. The ktype controls
25in detail, and briefly here: 34 what happens to the kobject when it is created and destroyed.
26 35
27- kobjects a simple object. 36 - A kset is a group of kobjects. These kobjects can be of the same ktype
28- kset a set of objects of a certain type. 37 or belong to different ktypes. The kset is the basic container type for
29- ktype a set of helpers for objects of a common type. 38 collections of kobjects. Ksets contain their own kobjects, but you can
39 safely ignore that implementation detail as the kset core code handles
40 this kobject automatically.
30 41
42 When you see a sysfs directory full of other directories, generally each
43 of those directories corresponds to a kobject in the same kset.
31 44
32The kobject infrastructure maintains a close relationship with the 45We'll look at how to create and manipulate all of these types. A bottom-up
33sysfs filesystem. Each kobject that is registered with the kobject 46approach will be taken, so we'll go back to kobjects.
34core receives a directory in sysfs. Attributes about the kobject can
35then be exported. Please see Documentation/filesystems/sysfs.txt for
36more information.
37 47
38The kobject infrastructure provides a flexible programming interface,
39and allows kobjects and ksets to be used without being registered
40(i.e. with no sysfs representation). This is also described later.
41 48
49Embedding kobjects
42 50
431. kobjects 51It is rare for kernel code to create a standalone kobject, with one major
52exception explained below. Instead, kobjects are used to control access to
53a larger, domain-specific object. To this end, kobjects will be found
54embedded in other structures. If you are used to thinking of things in
55object-oriented terms, kobjects can be seen as a top-level, abstract class
56from which other classes are derived. A kobject implements a set of
57capabilities which are not particularly useful by themselves, but which are
58nice to have in other objects. The C language does not allow for the
59direct expression of inheritance, so other techniques - such as structure
60embedding - must be used.
44 61
451.1 Description 62So, for example, the UIO code has a structure that defines the memory
63region associated with a uio device:
46 64
65struct uio_mem {
66 struct kobject kobj;
67 unsigned long addr;
68 unsigned long size;
69 int memtype;
70 void __iomem *internal_addr;
71};
47 72
48struct kobject is a simple data type that provides a foundation for 73If you have a struct uio_mem structure, finding its embedded kobject is
49more complex object types. It provides a set of basic fields that 74just a matter of using the kobj member. Code that works with kobjects will
50almost all complex data types share. kobjects are intended to be 75often have the opposite problem, however: given a struct kobject pointer,
51embedded in larger data structures and replace fields they duplicate. 76what is the pointer to the containing structure? You must avoid tricks
77(such as assuming that the kobject is at the beginning of the structure)
78and, instead, use the container_of() macro, found in <linux/kernel.h>:
52 79
531.2 Definition 80 container_of(pointer, type, member)
54 81
55struct kobject { 82where pointer is the pointer to the embedded kobject, type is the type of
56 const char * k_name; 83the containing structure, and member is the name of the structure field to
57 struct kref kref; 84which pointer points. The return value from container_of() is a pointer to
58 struct list_head entry; 85the given type. So, for example, a pointer "kp" to a struct kobject
59 struct kobject * parent; 86embedded within a struct uio_mem could be converted to a pointer to the
60 struct kset * kset; 87containing uio_mem structure with:
61 struct kobj_type * ktype;
62 struct sysfs_dirent * sd;
63 wait_queue_head_t poll;
64};
65 88
66void kobject_init(struct kobject *); 89 struct uio_mem *u_mem = container_of(kp, struct uio_mem, kobj);
67int kobject_add(struct kobject *);
68int kobject_register(struct kobject *);
69 90
70void kobject_del(struct kobject *); 91Programmers often define a simple macro for "back-casting" kobject pointers
71void kobject_unregister(struct kobject *); 92to the containing type.
72 93
73struct kobject * kobject_get(struct kobject *);
74void kobject_put(struct kobject *);
75 94
95Initialization of kobjects
76 96
771.3 kobject Programming Interface 97Code which creates a kobject must, of course, initialize that object. Some
98of the internal fields are setup with a (mandatory) call to kobject_init():
78 99
79kobjects may be dynamically added and removed from the kobject core 100 void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
80using kobject_register() and kobject_unregister(). Registration
81includes inserting the kobject in the list of its dominant kset and
82creating a directory for it in sysfs.
83 101
84Alternatively, one may use a kobject without adding it to its kset's list 102The ktype is required for a kobject to be created properly, as every kobject
85or exporting it via sysfs, by simply calling kobject_init(). An 103must have an associated kobj_type. After calling kobject_init(), to
86initialized kobject may later be added to the object hierarchy by 104register the kobject with sysfs, the function kobject_add() must be called:
87calling kobject_add(). An initialized kobject may be used for
88reference counting.
89 105
90Note: calling kobject_init() then kobject_add() is functionally 106 int kobject_add(struct kobject *kobj, struct kobject *parent, const char *fmt, ...);
91equivalent to calling kobject_register().
92 107
93When a kobject is unregistered, it is removed from its kset's list, 108This sets up the parent of the kobject and the name for the kobject
94removed from the sysfs filesystem, and its reference count is decremented. 109properly. If the kobject is to be associated with a specific kset,
95List and sysfs removal happen in kobject_del(), and may be called 110kobj->kset must be assigned before calling kobject_add(). If a kset is
96manually. kobject_put() decrements the reference count, and may also 111associated with a kobject, then the parent for the kobject can be set to
97be called manually. 112NULL in the call to kobject_add() and then the kobject's parent will be the
113kset itself.
98 114
99A kobject's reference count may be incremented with kobject_get(), 115As the name of the kobject is set when it is added to the kernel, the name
100which returns a valid reference to a kobject; and decremented with 116of the kobject should never be manipulated directly. If you must change
101kobject_put(). An object's reference count may only be incremented if 117the name of the kobject, call kobject_rename():
102it is already positive.
103 118
104When a kobject's reference count reaches 0, the method struct 119 int kobject_rename(struct kobject *kobj, const char *new_name);
105kobj_type::release() (which the kobject's kset points to) is called.
106This allows any memory allocated for the object to be freed.
107 120
121There is a function called kobject_set_name() but that is legacy cruft and
122is being removed. If your code needs to call this function, it is
123incorrect and needs to be fixed.
108 124
109NOTE!!! 125To properly access the name of the kobject, use the function
126kobject_name():
110 127
111It is _imperative_ that you supply a destructor for dynamically 128 const char *kobject_name(const struct kobject * kobj);
112allocated kobjects to free them if you are using kobject reference
113counts. The reference count controls the lifetime of the object.
114If it goes to 0, then it is assumed that the object will
115be freed and cannot be used.
116 129
117More importantly, you must free the object there, and not immediately 130There is a helper function to both initialize and add the kobject to the
118after an unregister call. If someone else is referencing the object 131kernel at the same time, called supprisingly enough kobject_init_and_add():
119(e.g. through a sysfs file), they will obtain a reference to the
120object, assume it's valid and operate on it. If the object is
121unregistered and freed in the meantime, the operation will then
122reference freed memory and go boom.
123 132
124This can be prevented, in the simplest case, by defining a release 133 int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
125method and freeing the object from there only. Note that this will not 134 struct kobject *parent, const char *fmt, ...);
126secure reference count/object management models that use a dual
127reference count or do other wacky things with the reference count
128(like the networking layer).
129 135
136The arguments are the same as the individual kobject_init() and
137kobject_add() functions described above.
130 138
1311.4 sysfs
132 139
133Each kobject receives a directory in sysfs. This directory is created 140Uevents
134under the kobject's parent directory.
135 141
136If a kobject does not have a parent when it is registered, its parent 142After a kobject has been registered with the kobject core, you need to
137becomes its dominant kset. 143announce to the world that it has been created. This can be done with a
144call to kobject_uevent():
138 145
139If a kobject does not have a parent nor a dominant kset, its directory 146 int kobject_uevent(struct kobject *kobj, enum kobject_action action);
140is created at the top-level of the sysfs partition.
141 147
148Use the KOBJ_ADD action for when the kobject is first added to the kernel.
149This should be done only after any attributes or children of the kobject
150have been initialized properly, as userspace will instantly start to look
151for them when this call happens.
142 152
153When the kobject is removed from the kernel (details on how to do that is
154below), the uevent for KOBJ_REMOVE will be automatically created by the
155kobject core, so the caller does not have to worry about doing that by
156hand.
143 157
1442. ksets
145 158
1462.1 Description 159Reference counts
147 160
148A kset is a set of kobjects that are embedded in the same type. 161One of the key functions of a kobject is to serve as a reference counter
162for the object in which it is embedded. As long as references to the object
163exist, the object (and the code which supports it) must continue to exist.
164The low-level functions for manipulating a kobject's reference counts are:
149 165
166 struct kobject *kobject_get(struct kobject *kobj);
167 void kobject_put(struct kobject *kobj);
150 168
151struct kset { 169A successful call to kobject_get() will increment the kobject's reference
152 struct kobj_type * ktype; 170counter and return the pointer to the kobject.
153 struct list_head list;
154 struct kobject kobj;
155 struct kset_uevent_ops * uevent_ops;
156};
157 171
172When a reference is released, the call to kobject_put() will decrement the
173reference count and, possibly, free the object. Note that kobject_init()
174sets the reference count to one, so the code which sets up the kobject will
175need to do a kobject_put() eventually to release that reference.
158 176
159void kset_init(struct kset * k); 177Because kobjects are dynamic, they must not be declared statically or on
160int kset_add(struct kset * k); 178the stack, but instead, always allocated dynamically. Future versions of
161int kset_register(struct kset * k); 179the kernel will contain a run-time check for kobjects that are created
162void kset_unregister(struct kset * k); 180statically and will warn the developer of this improper usage.
163 181
164struct kset * kset_get(struct kset * k); 182If all that you want to use a kobject for is to provide a reference counter
165void kset_put(struct kset * k); 183for your structure, please use the struct kref instead; a kobject would be
184overkill. For more information on how to use struct kref, please see the
185file Documentation/kref.txt in the Linux kernel source tree.
166 186
167struct kobject * kset_find_obj(struct kset *, char *);
168 187
188Creating "simple" kobjects
169 189
170The type that the kobjects are embedded in is described by the ktype 190Sometimes all that a developer wants is a way to create a simple directory
171pointer. 191in the sysfs hierarchy, and not have to mess with the whole complication of
192ksets, show and store functions, and other details. This is the one
193exception where a single kobject should be created. To create such an
194entry, use the function:
172 195
173A kset contains a kobject itself, meaning that it may be registered in 196 struct kobject *kobject_create_and_add(char *name, struct kobject *parent);
174the kobject hierarchy and exported via sysfs. More importantly, the
175kset may be embedded in a larger data type, and may be part of another
176kset (of that object type).
177 197
178For example, a block device is an object (struct gendisk) that is 198This function will create a kobject and place it in sysfs in the location
179contained in a set of block devices. It may also contain a set of 199underneath the specified parent kobject. To create simple attributes
180partitions (struct hd_struct) that have been found on the device. The 200associated with this kobject, use:
181following code snippet illustrates how to express this properly.
182 201
183 struct gendisk * disk; 202 int sysfs_create_file(struct kobject *kobj, struct attribute *attr);
184 ... 203or
185 disk->kset.kobj.kset = &block_kset; 204 int sysfs_create_group(struct kobject *kobj, struct attribute_group *grp);
186 disk->kset.ktype = &partition_ktype;
187 kset_register(&disk->kset);
188 205
189- The kset that the disk's embedded object belongs to is the 206Both types of attributes used here, with a kobject that has been created
190 block_kset, and is pointed to by disk->kset.kobj.kset. 207with the kobject_create_and_add(), can be of type kobj_attribute, so no
208special custom attribute is needed to be created.
191 209
192- The type of objects on the disk's _subordinate_ list are partitions, 210See the example module, samples/kobject/kobject-example.c for an
193 and is set in disk->kset.ktype. 211implementation of a simple kobject and attributes.
194 212
195- The kset is then registered, which handles initializing and adding
196 the embedded kobject to the hierarchy.
197 213
198 214
1992.2 kset Programming Interface 215ktypes and release methods
200 216
201All kset functions, except kset_find_obj(), eventually forward the 217One important thing still missing from the discussion is what happens to a
202calls to their embedded kobjects after performing kset-specific 218kobject when its reference count reaches zero. The code which created the
203operations. ksets offer a similar programming model to kobjects: they 219kobject generally does not know when that will happen; if it did, there
204may be used after they are initialized, without registering them in 220would be little point in using a kobject in the first place. Even
205the hierarchy. 221predictable object lifecycles become more complicated when sysfs is brought
222in as other portions of the kernel can get a reference on any kobject that
223is registered in the system.
206 224
207kset_find_obj() may be used to locate a kobject with a particular 225The end result is that a structure protected by a kobject cannot be freed
208name. The kobject, if found, is returned. 226before its reference count goes to zero. The reference count is not under
227the direct control of the code which created the kobject. So that code must
228be notified asynchronously whenever the last reference to one of its
229kobjects goes away.
209 230
210There are also some helper functions which names point to the formerly 231Once you registered your kobject via kobject_add(), you must never use
211existing "struct subsystem", whose functions have been taken over by 232kfree() to free it directly. The only safe way is to use kobject_put(). It
212ksets. 233is good practice to always use kobject_put() after kobject_init() to avoid
234errors creeping in.
213 235
236This notification is done through a kobject's release() method. Usually
237such a method has a form like:
214 238
215decl_subsys(name,type,uevent_ops) 239 void my_object_release(struct kobject *kobj)
240 {
241 struct my_object *mine = container_of(kobj, struct my_object, kobj);
216 242
217Declares a kset named '<name>_subsys' of type <type> with 243 /* Perform any additional cleanup on this object, then... */
218uevent_ops <uevent_ops>. For example, 244 kfree(mine);
245 }
219 246
220decl_subsys(devices, &ktype_device, &device_uevent_ops); 247One important point cannot be overstated: every kobject must have a
248release() method, and the kobject must persist (in a consistent state)
249until that method is called. If these constraints are not met, the code is
250flawed. Note that the kernel will warn you if you forget to provide a
251release() method. Do not try to get rid of this warning by providing an
252"empty" release function; you will be mocked mercilessly by the kobject
253maintainer if you attempt this.
221 254
222is equivalent to doing: 255Note, the name of the kobject is available in the release function, but it
256must NOT be changed within this callback. Otherwise there will be a memory
257leak in the kobject core, which makes people unhappy.
223 258
224struct kset devices_subsys = { 259Interestingly, the release() method is not stored in the kobject itself;
225 .ktype = &ktype_devices, 260instead, it is associated with the ktype. So let us introduce struct
226 .uevent_ops = &device_uevent_ops, 261kobj_type:
227}; 262
228kobject_set_name(&devices_subsys, name); 263 struct kobj_type {
264 void (*release)(struct kobject *);
265 struct sysfs_ops *sysfs_ops;
266 struct attribute **default_attrs;
267 };
229 268
230The objects that are registered with a subsystem that use the 269This structure is used to describe a particular type of kobject (or, more
231subsystem's default list must have their kset ptr set properly. These 270correctly, of containing object). Every kobject needs to have an associated
232objects may have embedded kobjects or ksets. The 271kobj_type structure; a pointer to that structure must be specified when you
233following helper makes setting the kset easier: 272call kobject_init() or kobject_init_and_add().
234 273
274The release field in struct kobj_type is, of course, a pointer to the
275release() method for this type of kobject. The other two fields (sysfs_ops
276and default_attrs) control how objects of this type are represented in
277sysfs; they are beyond the scope of this document.
235 278
236kobj_set_kset_s(obj,subsys) 279The default_attrs pointer is a list of default attributes that will be
280automatically created for any kobject that is registered with this ktype.
237 281
238- Assumes that obj->kobj exists, and is a struct kobject.
239- Sets the kset of that kobject to the kset <subsys>.
240 282
241int subsystem_register(struct kset *s); 283ksets
242void subsystem_unregister(struct kset *s);
243 284
244These are just wrappers around the respective kset_* functions. 285A kset is merely a collection of kobjects that want to be associated with
286each other. There is no restriction that they be of the same ktype, but be
287very careful if they are not.
245 288
2462.3 sysfs 289A kset serves these functions:
247 290
248ksets are represented in sysfs when their embedded kobjects are 291 - It serves as a bag containing a group of objects. A kset can be used by
249registered. They follow the same rules of parenting, with one 292 the kernel to track "all block devices" or "all PCI device drivers."
250exception. If a kset does not have a parent, nor is its embedded
251kobject part of another kset, the kset's parent becomes its dominant
252subsystem.
253 293
254If the kset does not have a parent, its directory is created at the 294 - A kset is also a subdirectory in sysfs, where the associated kobjects
255sysfs root. This should only happen when the kset registered is 295 with the kset can show up. Every kset contains a kobject which can be
256embedded in a subsystem itself. 296 set up to be the parent of other kobjects; the top-level directories of
297 the sysfs hierarchy are constructed in this way.
257 298
299 - Ksets can support the "hotplugging" of kobjects and influence how
300 uevent events are reported to user space.
258 301
2593. struct ktype 302In object-oriented terms, "kset" is the top-level container class; ksets
303contain their own kobject, but that kobject is managed by the kset code and
304should not be manipulated by any other user.
260 305
2613.1. Description 306A kset keeps its children in a standard kernel linked list. Kobjects point
307back to their containing kset via their kset field. In almost all cases,
308the kobjects belonging to a ket have that kset (or, strictly, its embedded
309kobject) in their parent.
262 310
263struct kobj_type { 311As a kset contains a kobject within it, it should always be dynamically
264 void (*release)(struct kobject *); 312created and never declared statically or on the stack. To create a new
265 struct sysfs_ops * sysfs_ops; 313kset use:
266 struct attribute ** default_attrs; 314 struct kset *kset_create_and_add(const char *name,
315 struct kset_uevent_ops *u,
316 struct kobject *parent);
317
318When you are finished with the kset, call:
319 void kset_unregister(struct kset *kset);
320to destroy it.
321
322An example of using a kset can be seen in the
323samples/kobject/kset-example.c file in the kernel tree.
324
325If a kset wishes to control the uevent operations of the kobjects
326associated with it, it can use the struct kset_uevent_ops to handle it:
327
328struct kset_uevent_ops {
329 int (*filter)(struct kset *kset, struct kobject *kobj);
330 const char *(*name)(struct kset *kset, struct kobject *kobj);
331 int (*uevent)(struct kset *kset, struct kobject *kobj,
332 struct kobj_uevent_env *env);
267}; 333};
268 334
269 335
270Object types require specific functions for converting between the 336The filter function allows a kset to prevent a uevent from being emitted to
271generic object and the more complex type. struct kobj_type provides 337userspace for a specific kobject. If the function returns 0, the uevent
272the object-specific fields, which include: 338will not be emitted.
339
340The name function will be called to override the default name of the kset
341that the uevent sends to userspace. By default, the name will be the same
342as the kset itself, but this function, if present, can override that name.
343
344The uevent function will be called when the uevent is about to be sent to
345userspace to allow more environment variables to be added to the uevent.
346
347One might ask how, exactly, a kobject is added to a kset, given that no
348functions which perform that function have been presented. The answer is
349that this task is handled by kobject_add(). When a kobject is passed to
350kobject_add(), its kset member should point to the kset to which the
351kobject will belong. kobject_add() will handle the rest.
352
353If the kobject belonging to a kset has no parent kobject set, it will be
354added to the kset's directory. Not all members of a kset do necessarily
355live in the kset directory. If an explicit parent kobject is assigned
356before the kobject is added, the kobject is registered with the kset, but
357added below the parent kobject.
358
359
360Kobject removal
273 361
274- release: Called when the kobject's reference count reaches 0. This 362After a kobject has been registered with the kobject core successfully, it
275 should convert the object to the more complex type and free it. 363must be cleaned up when the code is finished with it. To do that, call
364kobject_put(). By doing this, the kobject core will automatically clean up
365all of the memory allocated by this kobject. If a KOBJ_ADD uevent has been
366sent for the object, a corresponding KOBJ_REMOVE uevent will be sent, and
367any other sysfs housekeeping will be handled for the caller properly.
276 368
277- sysfs_ops: Provides conversion functions for sysfs access. Please 369If you need to do a two-stage delete of the kobject (say you are not
278 see the sysfs documentation for more information. 370allowed to sleep when you need to destroy the object), then call
371kobject_del() which will unregister the kobject from sysfs. This makes the
372kobject "invisible", but it is not cleaned up, and the reference count of
373the object is still the same. At a later time call kobject_put() to finish
374the cleanup of the memory associated with the kobject.
279 375
280- default_attrs: Default attributes to be exported via sysfs when the 376kobject_del() can be used to drop the reference to the parent object, if
281 object is registered.Note that the last attribute has to be 377circular references are constructed. It is valid in some cases, that a
282 initialized to NULL ! You can find a complete implementation 378parent objects references a child. Circular references _must_ be broken
283 in block/genhd.c 379with an explicit call to kobject_del(), so that a release functions will be
380called, and the objects in the former circle release each other.
284 381
285 382
286Instances of struct kobj_type are not registered; only referenced by 383Example code to copy from
287the kset. A kobj_type may be referenced by an arbitrary number of
288ksets, as there may be disparate sets of identical objects.
289 384
385For a more complete example of using ksets and kobjects properly, see the
386sample/kobject/kset-example.c code.