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