kobject.c (1758047057dbe329be712a31b79db7151b5871f8) | kobject.c (ee6d3dd4ed48ab24b74bab3c3977b8218518247d) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * kobject.c - library routines for handling generic kernel objects 4 * 5 * Copyright (c) 2002-2003 Patrick Mochel <mochel@osdl.org> 6 * Copyright (c) 2006-2007 Greg Kroah-Hartman <greg@kroah.com> 7 * Copyright (c) 2006-2007 Novell Inc. 8 * --- 51 unchanged lines hidden (view full) --- 60 * 61 * Most subsystems have a set of default attributes that are associated 62 * with an object that registers with them. This is a helper called during 63 * object registration that loops through the default attributes of the 64 * subsystem and creates attributes files for them in sysfs. 65 */ 66static int populate_dir(struct kobject *kobj) 67{ | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * kobject.c - library routines for handling generic kernel objects 4 * 5 * Copyright (c) 2002-2003 Patrick Mochel <mochel@osdl.org> 6 * Copyright (c) 2006-2007 Greg Kroah-Hartman <greg@kroah.com> 7 * Copyright (c) 2006-2007 Novell Inc. 8 * --- 51 unchanged lines hidden (view full) --- 60 * 61 * Most subsystems have a set of default attributes that are associated 62 * with an object that registers with them. This is a helper called during 63 * object registration that loops through the default attributes of the 64 * subsystem and creates attributes files for them in sysfs. 65 */ 66static int populate_dir(struct kobject *kobj) 67{ |
68 struct kobj_type *t = get_ktype(kobj); | 68 const struct kobj_type *t = get_ktype(kobj); |
69 struct attribute *attr; 70 int error = 0; 71 int i; 72 73 if (t && t->default_attrs) { 74 for (i = 0; (attr = t->default_attrs[i]) != NULL; i++) { 75 error = sysfs_create_file(kobj, attr); 76 if (error) --- 264 unchanged lines hidden (view full) --- 341 * 342 * This function will properly initialize a kobject such that it can then 343 * be passed to the kobject_add() call. 344 * 345 * After this function is called, the kobject MUST be cleaned up by a call 346 * to kobject_put(), not by a call to kfree directly to ensure that all of 347 * the memory is cleaned up properly. 348 */ | 69 struct attribute *attr; 70 int error = 0; 71 int i; 72 73 if (t && t->default_attrs) { 74 for (i = 0; (attr = t->default_attrs[i]) != NULL; i++) { 75 error = sysfs_create_file(kobj, attr); 76 if (error) --- 264 unchanged lines hidden (view full) --- 341 * 342 * This function will properly initialize a kobject such that it can then 343 * be passed to the kobject_add() call. 344 * 345 * After this function is called, the kobject MUST be cleaned up by a call 346 * to kobject_put(), not by a call to kfree directly to ensure that all of 347 * the memory is cleaned up properly. 348 */ |
349void kobject_init(struct kobject *kobj, struct kobj_type *ktype) | 349void kobject_init(struct kobject *kobj, const struct kobj_type *ktype) |
350{ 351 char *err_str; 352 353 if (!kobj) { 354 err_str = "invalid kobject pointer!"; 355 goto error; 356 } 357 if (!ktype) { --- 98 unchanged lines hidden (view full) --- 456 * 457 * This function combines the call to kobject_init() and kobject_add(). 458 * 459 * If this function returns an error, kobject_put() must be called to 460 * properly clean up the memory associated with the object. This is the 461 * same type of error handling after a call to kobject_add() and kobject 462 * lifetime rules are the same here. 463 */ | 350{ 351 char *err_str; 352 353 if (!kobj) { 354 err_str = "invalid kobject pointer!"; 355 goto error; 356 } 357 if (!ktype) { --- 98 unchanged lines hidden (view full) --- 456 * 457 * This function combines the call to kobject_init() and kobject_add(). 458 * 459 * If this function returns an error, kobject_put() must be called to 460 * properly clean up the memory associated with the object. This is the 461 * same type of error handling after a call to kobject_add() and kobject 462 * lifetime rules are the same here. 463 */ |
464int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype, | 464int kobject_init_and_add(struct kobject *kobj, const struct kobj_type *ktype, |
465 struct kobject *parent, const char *fmt, ...) 466{ 467 va_list args; 468 int retval; 469 470 kobject_init(kobj, ktype); 471 472 va_start(args, fmt); --- 201 unchanged lines hidden (view full) --- 674 675/* 676 * kobject_cleanup - free kobject resources. 677 * @kobj: object to cleanup 678 */ 679static void kobject_cleanup(struct kobject *kobj) 680{ 681 struct kobject *parent = kobj->parent; | 465 struct kobject *parent, const char *fmt, ...) 466{ 467 va_list args; 468 int retval; 469 470 kobject_init(kobj, ktype); 471 472 va_start(args, fmt); --- 201 unchanged lines hidden (view full) --- 674 675/* 676 * kobject_cleanup - free kobject resources. 677 * @kobj: object to cleanup 678 */ 679static void kobject_cleanup(struct kobject *kobj) 680{ 681 struct kobject *parent = kobj->parent; |
682 struct kobj_type *t = get_ktype(kobj); | 682 const struct kobj_type *t = get_ktype(kobj); |
683 const char *name = kobj->name; 684 685 pr_debug("kobject: '%s' (%p): %s, parent %p\n", 686 kobject_name(kobj), kobj, __func__, kobj->parent); 687 688 if (t && !t->release) 689 pr_debug("kobject: '%s' (%p): does not have a release() function, it is broken and must be fixed. See Documentation/core-api/kobject.rst.\n", 690 kobject_name(kobj), kobj); --- 453 unchanged lines hidden --- | 683 const char *name = kobj->name; 684 685 pr_debug("kobject: '%s' (%p): %s, parent %p\n", 686 kobject_name(kobj), kobj, __func__, kobj->parent); 687 688 if (t && !t->release) 689 pr_debug("kobject: '%s' (%p): does not have a release() function, it is broken and must be fixed. See Documentation/core-api/kobject.rst.\n", 690 kobject_name(kobj), kobj); --- 453 unchanged lines hidden --- |