xref: /linux-6.15/lib/kobject.c (revision 40efcb05)
1 /*
2  * kobject.c - library routines for handling generic kernel objects
3  *
4  * Copyright (c) 2002-2003 Patrick Mochel <[email protected]>
5  * Copyright (c) 2006-2007 Greg Kroah-Hartman <[email protected]>
6  * Copyright (c) 2006-2007 Novell Inc.
7  *
8  * This file is released under the GPLv2.
9  *
10  *
11  * Please see the file Documentation/kobject.txt for critical information
12  * about using the kobject interface.
13  */
14 
15 #include <linux/kobject.h>
16 #include <linux/string.h>
17 #include <linux/module.h>
18 #include <linux/stat.h>
19 #include <linux/slab.h>
20 
21 /**
22  *	populate_dir - populate directory with attributes.
23  *	@kobj:	object we're working on.
24  *
25  *	Most subsystems have a set of default attributes that
26  *	are associated with an object that registers with them.
27  *	This is a helper called during object registration that
28  *	loops through the default attributes of the subsystem
29  *	and creates attributes files for them in sysfs.
30  *
31  */
32 
33 static int populate_dir(struct kobject * kobj)
34 {
35 	struct kobj_type * t = get_ktype(kobj);
36 	struct attribute * attr;
37 	int error = 0;
38 	int i;
39 
40 	if (t && t->default_attrs) {
41 		for (i = 0; (attr = t->default_attrs[i]) != NULL; i++) {
42 			if ((error = sysfs_create_file(kobj,attr)))
43 				break;
44 		}
45 	}
46 	return error;
47 }
48 
49 static int create_dir(struct kobject * kobj)
50 {
51 	int error = 0;
52 	if (kobject_name(kobj)) {
53 		error = sysfs_create_dir(kobj);
54 		if (!error) {
55 			if ((error = populate_dir(kobj)))
56 				sysfs_remove_dir(kobj);
57 		}
58 	}
59 	return error;
60 }
61 
62 static inline struct kobject * to_kobj(struct list_head * entry)
63 {
64 	return container_of(entry,struct kobject,entry);
65 }
66 
67 static int get_kobj_path_length(struct kobject *kobj)
68 {
69 	int length = 1;
70 	struct kobject * parent = kobj;
71 
72 	/* walk up the ancestors until we hit the one pointing to the
73 	 * root.
74 	 * Add 1 to strlen for leading '/' of each level.
75 	 */
76 	do {
77 		if (kobject_name(parent) == NULL)
78 			return 0;
79 		length += strlen(kobject_name(parent)) + 1;
80 		parent = parent->parent;
81 	} while (parent);
82 	return length;
83 }
84 
85 static void fill_kobj_path(struct kobject *kobj, char *path, int length)
86 {
87 	struct kobject * parent;
88 
89 	--length;
90 	for (parent = kobj; parent; parent = parent->parent) {
91 		int cur = strlen(kobject_name(parent));
92 		/* back up enough to print this name with '/' */
93 		length -= cur;
94 		strncpy (path + length, kobject_name(parent), cur);
95 		*(path + --length) = '/';
96 	}
97 
98 	pr_debug("kobject: '%s' (%p): %s: path = '%s'\n", kobject_name(kobj),
99 		 kobj, __FUNCTION__,path);
100 }
101 
102 /**
103  * kobject_get_path - generate and return the path associated with a given kobj and kset pair.
104  *
105  * @kobj:	kobject in question, with which to build the path
106  * @gfp_mask:	the allocation type used to allocate the path
107  *
108  * The result must be freed by the caller with kfree().
109  */
110 char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask)
111 {
112 	char *path;
113 	int len;
114 
115 	len = get_kobj_path_length(kobj);
116 	if (len == 0)
117 		return NULL;
118 	path = kzalloc(len, gfp_mask);
119 	if (!path)
120 		return NULL;
121 	fill_kobj_path(kobj, path, len);
122 
123 	return path;
124 }
125 EXPORT_SYMBOL_GPL(kobject_get_path);
126 
127 /* add the kobject to its kset's list */
128 static void kobj_kset_join(struct kobject *kobj)
129 {
130 	if (!kobj->kset)
131 		return;
132 
133 	kset_get(kobj->kset);
134 	spin_lock(&kobj->kset->list_lock);
135 	list_add_tail(&kobj->entry, &kobj->kset->list);
136 	spin_unlock(&kobj->kset->list_lock);
137 }
138 
139 /* remove the kobject from its kset's list */
140 static void kobj_kset_leave(struct kobject *kobj)
141 {
142 	if (!kobj->kset)
143 		return;
144 
145 	spin_lock(&kobj->kset->list_lock);
146 	list_del_init(&kobj->entry);
147 	spin_unlock(&kobj->kset->list_lock);
148 	kset_put(kobj->kset);
149 }
150 
151 static void kobject_init_internal(struct kobject * kobj)
152 {
153 	if (!kobj)
154 		return;
155 	kref_init(&kobj->kref);
156 	INIT_LIST_HEAD(&kobj->entry);
157 }
158 
159 
160 static int kobject_add_internal(struct kobject *kobj)
161 {
162 	int error = 0;
163 	struct kobject * parent;
164 
165 	if (!kobj)
166 		return -ENOENT;
167 
168 	if (!kobj->name || !kobj->name[0]) {
169 		pr_debug("kobject: (%p): attempted to be registered with empty "
170 			 "name!\n", kobj);
171 		WARN_ON(1);
172 		return -EINVAL;
173 	}
174 
175 	parent = kobject_get(kobj->parent);
176 
177 	/* join kset if set, use it as parent if we do not already have one */
178 	if (kobj->kset) {
179 		if (!parent)
180 			parent = kobject_get(&kobj->kset->kobj);
181 		kobj_kset_join(kobj);
182 		kobj->parent = parent;
183 	}
184 
185 	pr_debug("kobject: '%s' (%p): %s: parent: '%s', set: '%s'\n",
186 		 kobject_name(kobj), kobj, __FUNCTION__,
187 		 parent ? kobject_name(parent) : "<NULL>",
188 		 kobj->kset ? kobject_name(&kobj->kset->kobj) : "<NULL>" );
189 
190 	error = create_dir(kobj);
191 	if (error) {
192 		kobj_kset_leave(kobj);
193 		kobject_put(parent);
194 		kobj->parent = NULL;
195 
196 		/* be noisy on error issues */
197 		if (error == -EEXIST)
198 			printk(KERN_ERR "%s failed for %s with "
199 			       "-EEXIST, don't try to register things with "
200 			       "the same name in the same directory.\n",
201 			       __FUNCTION__, kobject_name(kobj));
202 		else
203 			printk(KERN_ERR "%s failed for %s (%d)\n",
204 			       __FUNCTION__, kobject_name(kobj), error);
205 		dump_stack();
206 	} else
207 		kobj->state_in_sysfs = 1;
208 
209 	return error;
210 }
211 
212 /**
213  * kobject_set_name_vargs - Set the name of an kobject
214  * @kobj: struct kobject to set the name of
215  * @fmt: format string used to build the name
216  * @vargs: vargs to format the string.
217  */
218 static int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
219 				  va_list vargs)
220 {
221 	va_list aq;
222 	char *name;
223 
224 	va_copy(aq, vargs);
225 	name = kvasprintf(GFP_KERNEL, fmt, vargs);
226 	va_end(aq);
227 
228 	if (!name)
229 		return -ENOMEM;
230 
231 	/* Free the old name, if necessary. */
232 	kfree(kobj->name);
233 
234 	/* Now, set the new name */
235 	kobj->name = name;
236 
237 	return 0;
238 }
239 
240 /**
241  * kobject_set_name - Set the name of a kobject
242  * @kobj: struct kobject to set the name of
243  * @fmt: format string used to build the name
244  *
245  * This sets the name of the kobject.  If you have already added the
246  * kobject to the system, you must call kobject_rename() in order to
247  * change the name of the kobject.
248  */
249 int kobject_set_name(struct kobject *kobj, const char *fmt, ...)
250 {
251 	va_list args;
252 	int retval;
253 
254 	va_start(args, fmt);
255 	retval = kobject_set_name_vargs(kobj, fmt, args);
256 	va_end(args);
257 
258 	return retval;
259 }
260 EXPORT_SYMBOL(kobject_set_name);
261 
262 /**
263  * kobject_init - initialize a kobject structure
264  * @kobj: pointer to the kobject to initialize
265  * @ktype: pointer to the ktype for this kobject.
266  *
267  * This function will properly initialize a kobject such that it can then
268  * be passed to the kobject_add() call.
269  *
270  * After this function is called, the kobject MUST be cleaned up by a call
271  * to kobject_put(), not by a call to kfree directly to ensure that all of
272  * the memory is cleaned up properly.
273  */
274 void kobject_init(struct kobject *kobj, struct kobj_type *ktype)
275 {
276 	char *err_str;
277 
278 	if (!kobj) {
279 		err_str = "invalid kobject pointer!";
280 		goto error;
281 	}
282 	if (!ktype) {
283 		err_str = "must have a ktype to be initialized properly!\n";
284 		goto error;
285 	}
286 	if (kobj->state_initialized) {
287 		/* do not error out as sometimes we can recover */
288 		printk(KERN_ERR "kobject (%p): tried to init an initialized "
289 		       "object, something is seriously wrong.\n", kobj);
290 		dump_stack();
291 	}
292 
293 	kref_init(&kobj->kref);
294 	INIT_LIST_HEAD(&kobj->entry);
295 	kobj->ktype = ktype;
296 	kobj->state_in_sysfs = 0;
297 	kobj->state_add_uevent_sent = 0;
298 	kobj->state_remove_uevent_sent = 0;
299 	kobj->state_initialized = 1;
300 	return;
301 
302 error:
303 	printk(KERN_ERR "kobject (%p): %s\n", kobj, err_str);
304 	dump_stack();
305 }
306 EXPORT_SYMBOL(kobject_init);
307 
308 static int kobject_add_varg(struct kobject *kobj, struct kobject *parent,
309 			    const char *fmt, va_list vargs)
310 {
311 	va_list aq;
312 	int retval;
313 
314 	va_copy(aq, vargs);
315 	retval = kobject_set_name_vargs(kobj, fmt, aq);
316 	va_end(aq);
317 	if (retval) {
318 		printk(KERN_ERR "kobject: can not set name properly!\n");
319 		return retval;
320 	}
321 	kobj->parent = parent;
322 	return kobject_add_internal(kobj);
323 }
324 
325 /**
326  * kobject_add - the main kobject add function
327  * @kobj: the kobject to add
328  * @parent: pointer to the parent of the kobject.
329  * @fmt: format to name the kobject with.
330  *
331  * The kobject name is set and added to the kobject hierarchy in this
332  * function.
333  *
334  * If @parent is set, then the parent of the @kobj will be set to it.
335  * If @parent is NULL, then the parent of the @kobj will be set to the
336  * kobject associted with the kset assigned to this kobject.  If no kset
337  * is assigned to the kobject, then the kobject will be located in the
338  * root of the sysfs tree.
339  *
340  * If this function returns an error, kobject_put() must be called to
341  * properly clean up the memory associated with the object.
342  * Under no instance should the kobject that is passed to this function
343  * be directly freed with a call to kfree(), that can leak memory.
344  *
345  * Note, no "add" uevent will be created with this call, the caller should set
346  * up all of the necessary sysfs files for the object and then call
347  * kobject_uevent() with the UEVENT_ADD parameter to ensure that
348  * userspace is properly notified of this kobject's creation.
349  */
350 int kobject_add(struct kobject *kobj, struct kobject *parent,
351 		const char *fmt, ...)
352 {
353 	va_list args;
354 	int retval;
355 
356 	if (!kobj)
357 		return -EINVAL;
358 
359 	if (!kobj->state_initialized) {
360 		printk(KERN_ERR "kobject '%s' (%p): tried to add an "
361 		       "uninitialized object, something is seriously wrong.\n",
362 		       kobject_name(kobj), kobj);
363 		dump_stack();
364 		return -EINVAL;
365 	}
366 	va_start(args, fmt);
367 	retval = kobject_add_varg(kobj, parent, fmt, args);
368 	va_end(args);
369 
370 	return retval;
371 }
372 EXPORT_SYMBOL(kobject_add);
373 
374 /**
375  * kobject_init_and_add - initialize a kobject structure and add it to the kobject hierarchy
376  * @kobj: pointer to the kobject to initialize
377  * @ktype: pointer to the ktype for this kobject.
378  * @parent: pointer to the parent of this kobject.
379  * @fmt: the name of the kobject.
380  *
381  * This function combines the call to kobject_init() and
382  * kobject_add().  The same type of error handling after a call to
383  * kobject_add() and kobject lifetime rules are the same here.
384  */
385 int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
386 			 struct kobject *parent, const char *fmt, ...)
387 {
388 	va_list args;
389 	int retval;
390 
391 	kobject_init(kobj, ktype);
392 
393 	va_start(args, fmt);
394 	retval = kobject_add_varg(kobj, parent, fmt, args);
395 	va_end(args);
396 
397 	return retval;
398 }
399 EXPORT_SYMBOL_GPL(kobject_init_and_add);
400 
401 /**
402  *	kobject_rename - change the name of an object
403  *	@kobj:	object in question.
404  *	@new_name: object's new name
405  */
406 
407 int kobject_rename(struct kobject * kobj, const char *new_name)
408 {
409 	int error = 0;
410 	const char *devpath = NULL;
411 	char *devpath_string = NULL;
412 	char *envp[2];
413 
414 	kobj = kobject_get(kobj);
415 	if (!kobj)
416 		return -EINVAL;
417 	if (!kobj->parent)
418 		return -EINVAL;
419 
420 	/* see if this name is already in use */
421 	if (kobj->kset) {
422 		struct kobject *temp_kobj;
423 		temp_kobj = kset_find_obj(kobj->kset, new_name);
424 		if (temp_kobj) {
425 			printk(KERN_WARNING "kobject '%s' cannot be renamed "
426 			       "to '%s' as '%s' is already in existence.\n",
427 			       kobject_name(kobj), new_name, new_name);
428 			kobject_put(temp_kobj);
429 			return -EINVAL;
430 		}
431 	}
432 
433 	devpath = kobject_get_path(kobj, GFP_KERNEL);
434 	if (!devpath) {
435 		error = -ENOMEM;
436 		goto out;
437 	}
438 	devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL);
439 	if (!devpath_string) {
440 		error = -ENOMEM;
441 		goto out;
442 	}
443 	sprintf(devpath_string, "DEVPATH_OLD=%s", devpath);
444 	envp[0] = devpath_string;
445 	envp[1] = NULL;
446 
447 	error = sysfs_rename_dir(kobj, new_name);
448 
449 	/* This function is mostly/only used for network interface.
450 	 * Some hotplug package track interfaces by their name and
451 	 * therefore want to know when the name is changed by the user. */
452 	if (!error)
453 		kobject_uevent_env(kobj, KOBJ_MOVE, envp);
454 
455 out:
456 	kfree(devpath_string);
457 	kfree(devpath);
458 	kobject_put(kobj);
459 
460 	return error;
461 }
462 
463 /**
464  *	kobject_move - move object to another parent
465  *	@kobj:	object in question.
466  *	@new_parent: object's new parent (can be NULL)
467  */
468 
469 int kobject_move(struct kobject *kobj, struct kobject *new_parent)
470 {
471 	int error;
472 	struct kobject *old_parent;
473 	const char *devpath = NULL;
474 	char *devpath_string = NULL;
475 	char *envp[2];
476 
477 	kobj = kobject_get(kobj);
478 	if (!kobj)
479 		return -EINVAL;
480 	new_parent = kobject_get(new_parent);
481 	if (!new_parent) {
482 		if (kobj->kset)
483 			new_parent = kobject_get(&kobj->kset->kobj);
484 	}
485 	/* old object path */
486 	devpath = kobject_get_path(kobj, GFP_KERNEL);
487 	if (!devpath) {
488 		error = -ENOMEM;
489 		goto out;
490 	}
491 	devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL);
492 	if (!devpath_string) {
493 		error = -ENOMEM;
494 		goto out;
495 	}
496 	sprintf(devpath_string, "DEVPATH_OLD=%s", devpath);
497 	envp[0] = devpath_string;
498 	envp[1] = NULL;
499 	error = sysfs_move_dir(kobj, new_parent);
500 	if (error)
501 		goto out;
502 	old_parent = kobj->parent;
503 	kobj->parent = new_parent;
504 	new_parent = NULL;
505 	kobject_put(old_parent);
506 	kobject_uevent_env(kobj, KOBJ_MOVE, envp);
507 out:
508 	kobject_put(new_parent);
509 	kobject_put(kobj);
510 	kfree(devpath_string);
511 	kfree(devpath);
512 	return error;
513 }
514 
515 /**
516  *	kobject_del - unlink kobject from hierarchy.
517  * 	@kobj:	object.
518  */
519 
520 void kobject_del(struct kobject * kobj)
521 {
522 	if (!kobj)
523 		return;
524 
525 	sysfs_remove_dir(kobj);
526 	kobj->state_in_sysfs = 0;
527 	kobj_kset_leave(kobj);
528 	kobject_put(kobj->parent);
529 	kobj->parent = NULL;
530 }
531 
532 /**
533  *	kobject_get - increment refcount for object.
534  *	@kobj:	object.
535  */
536 
537 struct kobject * kobject_get(struct kobject * kobj)
538 {
539 	if (kobj)
540 		kref_get(&kobj->kref);
541 	return kobj;
542 }
543 
544 /*
545  * kobject_cleanup - free kobject resources.
546  * @kobj: object to cleanup
547  */
548 static void kobject_cleanup(struct kobject *kobj)
549 {
550 	struct kobj_type *t = get_ktype(kobj);
551 	const char *name = kobj->name;
552 
553 	pr_debug("kobject: '%s' (%p): %s\n",
554 		 kobject_name(kobj), kobj, __FUNCTION__);
555 
556 	if (t && !t->release)
557 		pr_debug("kobject: '%s' (%p): does not have a release() "
558 			 "function, it is broken and must be fixed.\n",
559 			 kobject_name(kobj), kobj);
560 
561 	/* send "remove" if the caller did not do it but sent "add" */
562 	if (kobj->state_add_uevent_sent && !kobj->state_remove_uevent_sent) {
563 		pr_debug("kobject: '%s' (%p): auto cleanup 'remove' event\n",
564 			 kobject_name(kobj), kobj);
565 		kobject_uevent(kobj, KOBJ_REMOVE);
566 	}
567 
568 	/* remove from sysfs if the caller did not do it */
569 	if (kobj->state_in_sysfs) {
570 		pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n",
571 			 kobject_name(kobj), kobj);
572 		kobject_del(kobj);
573 	}
574 
575 	if (t && t->release) {
576 		pr_debug("kobject: '%s' (%p): calling ktype release\n",
577 			 kobject_name(kobj), kobj);
578 		t->release(kobj);
579 	}
580 
581 	/* free name if we allocated it */
582 	if (name) {
583 		pr_debug("kobject: '%s': free name\n", name);
584 		kfree(name);
585 	}
586 }
587 
588 static void kobject_release(struct kref *kref)
589 {
590 	kobject_cleanup(container_of(kref, struct kobject, kref));
591 }
592 
593 /**
594  *	kobject_put - decrement refcount for object.
595  *	@kobj:	object.
596  *
597  *	Decrement the refcount, and if 0, call kobject_cleanup().
598  */
599 void kobject_put(struct kobject * kobj)
600 {
601 	if (kobj)
602 		kref_put(&kobj->kref, kobject_release);
603 }
604 
605 static void dynamic_kobj_release(struct kobject *kobj)
606 {
607 	pr_debug("kobject: (%p): %s\n", kobj, __FUNCTION__);
608 	kfree(kobj);
609 }
610 
611 static struct kobj_type dynamic_kobj_ktype = {
612 	.release	= dynamic_kobj_release,
613 	.sysfs_ops	= &kobj_sysfs_ops,
614 };
615 
616 /**
617  * kobject_create - create a struct kobject dynamically
618  *
619  * This function creates a kobject structure dynamically and sets it up
620  * to be a "dynamic" kobject with a default release function set up.
621  *
622  * If the kobject was not able to be created, NULL will be returned.
623  * The kobject structure returned from here must be cleaned up with a
624  * call to kobject_put() and not kfree(), as kobject_init() has
625  * already been called on this structure.
626  */
627 struct kobject *kobject_create(void)
628 {
629 	struct kobject *kobj;
630 
631 	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
632 	if (!kobj)
633 		return NULL;
634 
635 	kobject_init(kobj, &dynamic_kobj_ktype);
636 	return kobj;
637 }
638 
639 /**
640  * kobject_create_and_add - create a struct kobject dynamically and register it with sysfs
641  *
642  * @name: the name for the kset
643  * @parent: the parent kobject of this kobject, if any.
644  *
645  * This function creates a kset structure dynamically and registers it
646  * with sysfs.  When you are finished with this structure, call
647  * kobject_put() and the structure will be dynamically freed when
648  * it is no longer being used.
649  *
650  * If the kobject was not able to be created, NULL will be returned.
651  */
652 struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)
653 {
654 	struct kobject *kobj;
655 	int retval;
656 
657 	kobj = kobject_create();
658 	if (!kobj)
659 		return NULL;
660 
661 	retval = kobject_add(kobj, parent, "%s", name);
662 	if (retval) {
663 		printk(KERN_WARNING "%s: kobject_add error: %d\n",
664 		       __FUNCTION__, retval);
665 		kobject_put(kobj);
666 		kobj = NULL;
667 	}
668 	return kobj;
669 }
670 EXPORT_SYMBOL_GPL(kobject_create_and_add);
671 
672 /**
673  *	kset_init - initialize a kset for use
674  *	@k:	kset
675  */
676 
677 void kset_init(struct kset * k)
678 {
679 	kobject_init_internal(&k->kobj);
680 	INIT_LIST_HEAD(&k->list);
681 	spin_lock_init(&k->list_lock);
682 }
683 
684 /* default kobject attribute operations */
685 static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr,
686 			      char *buf)
687 {
688 	struct kobj_attribute *kattr;
689 	ssize_t ret = -EIO;
690 
691 	kattr = container_of(attr, struct kobj_attribute, attr);
692 	if (kattr->show)
693 		ret = kattr->show(kobj, kattr, buf);
694 	return ret;
695 }
696 
697 static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr,
698 			       const char *buf, size_t count)
699 {
700 	struct kobj_attribute *kattr;
701 	ssize_t ret = -EIO;
702 
703 	kattr = container_of(attr, struct kobj_attribute, attr);
704 	if (kattr->store)
705 		ret = kattr->store(kobj, kattr, buf, count);
706 	return ret;
707 }
708 
709 struct sysfs_ops kobj_sysfs_ops = {
710 	.show	= kobj_attr_show,
711 	.store	= kobj_attr_store,
712 };
713 
714 /**
715  *	kset_register - initialize and add a kset.
716  *	@k:	kset.
717  */
718 
719 int kset_register(struct kset * k)
720 {
721 	int err;
722 
723 	if (!k)
724 		return -EINVAL;
725 
726 	kset_init(k);
727 	err = kobject_add_internal(&k->kobj);
728 	if (err)
729 		return err;
730 	kobject_uevent(&k->kobj, KOBJ_ADD);
731 	return 0;
732 }
733 
734 
735 /**
736  *	kset_unregister - remove a kset.
737  *	@k:	kset.
738  */
739 
740 void kset_unregister(struct kset * k)
741 {
742 	if (!k)
743 		return;
744 	kobject_put(&k->kobj);
745 }
746 
747 
748 /**
749  *	kset_find_obj - search for object in kset.
750  *	@kset:	kset we're looking in.
751  *	@name:	object's name.
752  *
753  *	Lock kset via @kset->subsys, and iterate over @kset->list,
754  *	looking for a matching kobject. If matching object is found
755  *	take a reference and return the object.
756  */
757 
758 struct kobject * kset_find_obj(struct kset * kset, const char * name)
759 {
760 	struct list_head * entry;
761 	struct kobject * ret = NULL;
762 
763 	spin_lock(&kset->list_lock);
764 	list_for_each(entry,&kset->list) {
765 		struct kobject * k = to_kobj(entry);
766 		if (kobject_name(k) && !strcmp(kobject_name(k),name)) {
767 			ret = kobject_get(k);
768 			break;
769 		}
770 	}
771 	spin_unlock(&kset->list_lock);
772 	return ret;
773 }
774 
775 static void kset_release(struct kobject *kobj)
776 {
777 	struct kset *kset = container_of(kobj, struct kset, kobj);
778 	pr_debug("kobject: '%s' (%p): %s\n",
779 		 kobject_name(kobj), kobj, __FUNCTION__);
780 	kfree(kset);
781 }
782 
783 static struct kobj_type kset_ktype = {
784 	.sysfs_ops	= &kobj_sysfs_ops,
785 	.release = kset_release,
786 };
787 
788 /**
789  * kset_create - create a struct kset dynamically
790  *
791  * @name: the name for the kset
792  * @uevent_ops: a struct kset_uevent_ops for the kset
793  * @parent_kobj: the parent kobject of this kset, if any.
794  *
795  * This function creates a kset structure dynamically.  This structure can
796  * then be registered with the system and show up in sysfs with a call to
797  * kset_register().  When you are finished with this structure, if
798  * kset_register() has been called, call kset_unregister() and the
799  * structure will be dynamically freed when it is no longer being used.
800  *
801  * If the kset was not able to be created, NULL will be returned.
802  */
803 static struct kset *kset_create(const char *name,
804 				struct kset_uevent_ops *uevent_ops,
805 				struct kobject *parent_kobj)
806 {
807 	struct kset *kset;
808 
809 	kset = kzalloc(sizeof(*kset), GFP_KERNEL);
810 	if (!kset)
811 		return NULL;
812 	kobject_set_name(&kset->kobj, name);
813 	kset->uevent_ops = uevent_ops;
814 	kset->kobj.parent = parent_kobj;
815 
816 	/*
817 	 * The kobject of this kset will have a type of kset_ktype and belong to
818 	 * no kset itself.  That way we can properly free it when it is
819 	 * finished being used.
820 	 */
821 	kset->kobj.ktype = &kset_ktype;
822 	kset->kobj.kset = NULL;
823 
824 	return kset;
825 }
826 
827 /**
828  * kset_create_and_add - create a struct kset dynamically and add it to sysfs
829  *
830  * @name: the name for the kset
831  * @uevent_ops: a struct kset_uevent_ops for the kset
832  * @parent_kobj: the parent kobject of this kset, if any.
833  *
834  * This function creates a kset structure dynamically and registers it
835  * with sysfs.  When you are finished with this structure, call
836  * kset_unregister() and the structure will be dynamically freed when it
837  * is no longer being used.
838  *
839  * If the kset was not able to be created, NULL will be returned.
840  */
841 struct kset *kset_create_and_add(const char *name,
842 				 struct kset_uevent_ops *uevent_ops,
843 				 struct kobject *parent_kobj)
844 {
845 	struct kset *kset;
846 	int error;
847 
848 	kset = kset_create(name, uevent_ops, parent_kobj);
849 	if (!kset)
850 		return NULL;
851 	error = kset_register(kset);
852 	if (error) {
853 		kfree(kset);
854 		return NULL;
855 	}
856 	return kset;
857 }
858 EXPORT_SYMBOL_GPL(kset_create_and_add);
859 
860 EXPORT_SYMBOL(kobject_get);
861 EXPORT_SYMBOL(kobject_put);
862 EXPORT_SYMBOL(kobject_del);
863 
864 EXPORT_SYMBOL(kset_register);
865 EXPORT_SYMBOL(kset_unregister);
866