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 s = strchr(kobj->name, '/'); 227 if (s) 228 s[0] = '!'; 229 230 kfree(old_name); 231 return 0; 232 } 233 234 /** 235 * kobject_set_name - Set the name of a kobject 236 * @kobj: struct kobject to set the name of 237 * @fmt: format string used to build the name 238 * 239 * This sets the name of the kobject. If you have already added the 240 * kobject to the system, you must call kobject_rename() in order to 241 * change the name of the kobject. 242 */ 243 int kobject_set_name(struct kobject *kobj, const char *fmt, ...) 244 { 245 va_list vargs; 246 int retval; 247 248 va_start(vargs, fmt); 249 retval = kobject_set_name_vargs(kobj, fmt, vargs); 250 va_end(vargs); 251 252 return retval; 253 } 254 EXPORT_SYMBOL(kobject_set_name); 255 256 /** 257 * kobject_init - initialize a kobject structure 258 * @kobj: pointer to the kobject to initialize 259 * @ktype: pointer to the ktype for this kobject. 260 * 261 * This function will properly initialize a kobject such that it can then 262 * be passed to the kobject_add() call. 263 * 264 * After this function is called, the kobject MUST be cleaned up by a call 265 * to kobject_put(), not by a call to kfree directly to ensure that all of 266 * the memory is cleaned up properly. 267 */ 268 void kobject_init(struct kobject *kobj, struct kobj_type *ktype) 269 { 270 char *err_str; 271 272 if (!kobj) { 273 err_str = "invalid kobject pointer!"; 274 goto error; 275 } 276 if (!ktype) { 277 err_str = "must have a ktype to be initialized properly!\n"; 278 goto error; 279 } 280 if (kobj->state_initialized) { 281 /* do not error out as sometimes we can recover */ 282 printk(KERN_ERR "kobject (%p): tried to init an initialized " 283 "object, something is seriously wrong.\n", kobj); 284 dump_stack(); 285 } 286 287 kobject_init_internal(kobj); 288 kobj->ktype = ktype; 289 return; 290 291 error: 292 printk(KERN_ERR "kobject (%p): %s\n", kobj, err_str); 293 dump_stack(); 294 } 295 EXPORT_SYMBOL(kobject_init); 296 297 static int kobject_add_varg(struct kobject *kobj, struct kobject *parent, 298 const char *fmt, va_list vargs) 299 { 300 int retval; 301 302 retval = kobject_set_name_vargs(kobj, fmt, vargs); 303 if (retval) { 304 printk(KERN_ERR "kobject: can not set name properly!\n"); 305 return retval; 306 } 307 kobj->parent = parent; 308 return kobject_add_internal(kobj); 309 } 310 311 /** 312 * kobject_add - the main kobject add function 313 * @kobj: the kobject to add 314 * @parent: pointer to the parent of the kobject. 315 * @fmt: format to name the kobject with. 316 * 317 * The kobject name is set and added to the kobject hierarchy in this 318 * function. 319 * 320 * If @parent is set, then the parent of the @kobj will be set to it. 321 * If @parent is NULL, then the parent of the @kobj will be set to the 322 * kobject associted with the kset assigned to this kobject. If no kset 323 * is assigned to the kobject, then the kobject will be located in the 324 * root of the sysfs tree. 325 * 326 * If this function returns an error, kobject_put() must be called to 327 * properly clean up the memory associated with the object. 328 * Under no instance should the kobject that is passed to this function 329 * be directly freed with a call to kfree(), that can leak memory. 330 * 331 * Note, no "add" uevent will be created with this call, the caller should set 332 * up all of the necessary sysfs files for the object and then call 333 * kobject_uevent() with the UEVENT_ADD parameter to ensure that 334 * userspace is properly notified of this kobject's creation. 335 */ 336 int kobject_add(struct kobject *kobj, struct kobject *parent, 337 const char *fmt, ...) 338 { 339 va_list args; 340 int retval; 341 342 if (!kobj) 343 return -EINVAL; 344 345 if (!kobj->state_initialized) { 346 printk(KERN_ERR "kobject '%s' (%p): tried to add an " 347 "uninitialized object, something is seriously wrong.\n", 348 kobject_name(kobj), kobj); 349 dump_stack(); 350 return -EINVAL; 351 } 352 va_start(args, fmt); 353 retval = kobject_add_varg(kobj, parent, fmt, args); 354 va_end(args); 355 356 return retval; 357 } 358 EXPORT_SYMBOL(kobject_add); 359 360 /** 361 * kobject_init_and_add - initialize a kobject structure and add it to the kobject hierarchy 362 * @kobj: pointer to the kobject to initialize 363 * @ktype: pointer to the ktype for this kobject. 364 * @parent: pointer to the parent of this kobject. 365 * @fmt: the name of the kobject. 366 * 367 * This function combines the call to kobject_init() and 368 * kobject_add(). The same type of error handling after a call to 369 * kobject_add() and kobject lifetime rules are the same here. 370 */ 371 int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype, 372 struct kobject *parent, const char *fmt, ...) 373 { 374 va_list args; 375 int retval; 376 377 kobject_init(kobj, ktype); 378 379 va_start(args, fmt); 380 retval = kobject_add_varg(kobj, parent, fmt, args); 381 va_end(args); 382 383 return retval; 384 } 385 EXPORT_SYMBOL_GPL(kobject_init_and_add); 386 387 /** 388 * kobject_rename - change the name of an object 389 * @kobj: object in question. 390 * @new_name: object's new name 391 */ 392 int kobject_rename(struct kobject *kobj, const char *new_name) 393 { 394 int error = 0; 395 const char *devpath = NULL; 396 char *devpath_string = NULL; 397 char *envp[2]; 398 399 kobj = kobject_get(kobj); 400 if (!kobj) 401 return -EINVAL; 402 if (!kobj->parent) 403 return -EINVAL; 404 405 /* see if this name is already in use */ 406 if (kobj->kset) { 407 struct kobject *temp_kobj; 408 temp_kobj = kset_find_obj(kobj->kset, new_name); 409 if (temp_kobj) { 410 printk(KERN_WARNING "kobject '%s' cannot be renamed " 411 "to '%s' as '%s' is already in existence.\n", 412 kobject_name(kobj), new_name, new_name); 413 kobject_put(temp_kobj); 414 return -EINVAL; 415 } 416 } 417 418 devpath = kobject_get_path(kobj, GFP_KERNEL); 419 if (!devpath) { 420 error = -ENOMEM; 421 goto out; 422 } 423 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 424 if (!devpath_string) { 425 error = -ENOMEM; 426 goto out; 427 } 428 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 429 envp[0] = devpath_string; 430 envp[1] = NULL; 431 432 error = sysfs_rename_dir(kobj, new_name); 433 434 /* This function is mostly/only used for network interface. 435 * Some hotplug package track interfaces by their name and 436 * therefore want to know when the name is changed by the user. */ 437 if (!error) 438 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 439 440 out: 441 kfree(devpath_string); 442 kfree(devpath); 443 kobject_put(kobj); 444 445 return error; 446 } 447 EXPORT_SYMBOL_GPL(kobject_rename); 448 449 /** 450 * kobject_move - move object to another parent 451 * @kobj: object in question. 452 * @new_parent: object's new parent (can be NULL) 453 */ 454 int kobject_move(struct kobject *kobj, struct kobject *new_parent) 455 { 456 int error; 457 struct kobject *old_parent; 458 const char *devpath = NULL; 459 char *devpath_string = NULL; 460 char *envp[2]; 461 462 kobj = kobject_get(kobj); 463 if (!kobj) 464 return -EINVAL; 465 new_parent = kobject_get(new_parent); 466 if (!new_parent) { 467 if (kobj->kset) 468 new_parent = kobject_get(&kobj->kset->kobj); 469 } 470 /* old object path */ 471 devpath = kobject_get_path(kobj, GFP_KERNEL); 472 if (!devpath) { 473 error = -ENOMEM; 474 goto out; 475 } 476 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 477 if (!devpath_string) { 478 error = -ENOMEM; 479 goto out; 480 } 481 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 482 envp[0] = devpath_string; 483 envp[1] = NULL; 484 error = sysfs_move_dir(kobj, new_parent); 485 if (error) 486 goto out; 487 old_parent = kobj->parent; 488 kobj->parent = new_parent; 489 new_parent = NULL; 490 kobject_put(old_parent); 491 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 492 out: 493 kobject_put(new_parent); 494 kobject_put(kobj); 495 kfree(devpath_string); 496 kfree(devpath); 497 return error; 498 } 499 500 /** 501 * kobject_del - unlink kobject from hierarchy. 502 * @kobj: object. 503 */ 504 void kobject_del(struct kobject *kobj) 505 { 506 if (!kobj) 507 return; 508 509 sysfs_remove_dir(kobj); 510 kobj->state_in_sysfs = 0; 511 kobj_kset_leave(kobj); 512 kobject_put(kobj->parent); 513 kobj->parent = NULL; 514 } 515 516 /** 517 * kobject_get - increment refcount for object. 518 * @kobj: object. 519 */ 520 struct kobject *kobject_get(struct kobject *kobj) 521 { 522 if (kobj) 523 kref_get(&kobj->kref); 524 return kobj; 525 } 526 527 /* 528 * kobject_cleanup - free kobject resources. 529 * @kobj: object to cleanup 530 */ 531 static void kobject_cleanup(struct kobject *kobj) 532 { 533 struct kobj_type *t = get_ktype(kobj); 534 const char *name = kobj->name; 535 536 pr_debug("kobject: '%s' (%p): %s\n", 537 kobject_name(kobj), kobj, __func__); 538 539 if (t && !t->release) 540 pr_debug("kobject: '%s' (%p): does not have a release() " 541 "function, it is broken and must be fixed.\n", 542 kobject_name(kobj), kobj); 543 544 /* send "remove" if the caller did not do it but sent "add" */ 545 if (kobj->state_add_uevent_sent && !kobj->state_remove_uevent_sent) { 546 pr_debug("kobject: '%s' (%p): auto cleanup 'remove' event\n", 547 kobject_name(kobj), kobj); 548 kobject_uevent(kobj, KOBJ_REMOVE); 549 } 550 551 /* remove from sysfs if the caller did not do it */ 552 if (kobj->state_in_sysfs) { 553 pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n", 554 kobject_name(kobj), kobj); 555 kobject_del(kobj); 556 } 557 558 if (t && t->release) { 559 pr_debug("kobject: '%s' (%p): calling ktype release\n", 560 kobject_name(kobj), kobj); 561 t->release(kobj); 562 } 563 564 /* free name if we allocated it */ 565 if (name) { 566 pr_debug("kobject: '%s': free name\n", name); 567 kfree(name); 568 } 569 } 570 571 static void kobject_release(struct kref *kref) 572 { 573 kobject_cleanup(container_of(kref, struct kobject, kref)); 574 } 575 576 /** 577 * kobject_put - decrement refcount for object. 578 * @kobj: object. 579 * 580 * Decrement the refcount, and if 0, call kobject_cleanup(). 581 */ 582 void kobject_put(struct kobject *kobj) 583 { 584 if (kobj) { 585 if (!kobj->state_initialized) 586 WARN(1, KERN_WARNING "kobject: '%s' (%p): is not " 587 "initialized, yet kobject_put() is being " 588 "called.\n", kobject_name(kobj), kobj); 589 kref_put(&kobj->kref, kobject_release); 590 } 591 } 592 593 static void dynamic_kobj_release(struct kobject *kobj) 594 { 595 pr_debug("kobject: (%p): %s\n", kobj, __func__); 596 kfree(kobj); 597 } 598 599 static struct kobj_type dynamic_kobj_ktype = { 600 .release = dynamic_kobj_release, 601 .sysfs_ops = &kobj_sysfs_ops, 602 }; 603 604 /** 605 * kobject_create - create a struct kobject dynamically 606 * 607 * This function creates a kobject structure dynamically and sets it up 608 * to be a "dynamic" kobject with a default release function set up. 609 * 610 * If the kobject was not able to be created, NULL will be returned. 611 * The kobject structure returned from here must be cleaned up with a 612 * call to kobject_put() and not kfree(), as kobject_init() has 613 * already been called on this structure. 614 */ 615 struct kobject *kobject_create(void) 616 { 617 struct kobject *kobj; 618 619 kobj = kzalloc(sizeof(*kobj), GFP_KERNEL); 620 if (!kobj) 621 return NULL; 622 623 kobject_init(kobj, &dynamic_kobj_ktype); 624 return kobj; 625 } 626 627 /** 628 * kobject_create_and_add - create a struct kobject dynamically and register it with sysfs 629 * 630 * @name: the name for the kset 631 * @parent: the parent kobject of this kobject, if any. 632 * 633 * This function creates a kobject structure dynamically and registers it 634 * with sysfs. When you are finished with this structure, call 635 * kobject_put() and the structure will be dynamically freed when 636 * it is no longer being used. 637 * 638 * If the kobject was not able to be created, NULL will be returned. 639 */ 640 struct kobject *kobject_create_and_add(const char *name, struct kobject *parent) 641 { 642 struct kobject *kobj; 643 int retval; 644 645 kobj = kobject_create(); 646 if (!kobj) 647 return NULL; 648 649 retval = kobject_add(kobj, parent, "%s", name); 650 if (retval) { 651 printk(KERN_WARNING "%s: kobject_add error: %d\n", 652 __func__, retval); 653 kobject_put(kobj); 654 kobj = NULL; 655 } 656 return kobj; 657 } 658 EXPORT_SYMBOL_GPL(kobject_create_and_add); 659 660 /** 661 * kset_init - initialize a kset for use 662 * @k: kset 663 */ 664 void kset_init(struct kset *k) 665 { 666 kobject_init_internal(&k->kobj); 667 INIT_LIST_HEAD(&k->list); 668 spin_lock_init(&k->list_lock); 669 } 670 671 /* default kobject attribute operations */ 672 static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr, 673 char *buf) 674 { 675 struct kobj_attribute *kattr; 676 ssize_t ret = -EIO; 677 678 kattr = container_of(attr, struct kobj_attribute, attr); 679 if (kattr->show) 680 ret = kattr->show(kobj, kattr, buf); 681 return ret; 682 } 683 684 static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr, 685 const char *buf, size_t count) 686 { 687 struct kobj_attribute *kattr; 688 ssize_t ret = -EIO; 689 690 kattr = container_of(attr, struct kobj_attribute, attr); 691 if (kattr->store) 692 ret = kattr->store(kobj, kattr, buf, count); 693 return ret; 694 } 695 696 struct sysfs_ops kobj_sysfs_ops = { 697 .show = kobj_attr_show, 698 .store = kobj_attr_store, 699 }; 700 701 /** 702 * kset_register - initialize and add a kset. 703 * @k: kset. 704 */ 705 int kset_register(struct kset *k) 706 { 707 int err; 708 709 if (!k) 710 return -EINVAL; 711 712 kset_init(k); 713 err = kobject_add_internal(&k->kobj); 714 if (err) 715 return err; 716 kobject_uevent(&k->kobj, KOBJ_ADD); 717 return 0; 718 } 719 720 /** 721 * kset_unregister - remove a kset. 722 * @k: kset. 723 */ 724 void kset_unregister(struct kset *k) 725 { 726 if (!k) 727 return; 728 kobject_put(&k->kobj); 729 } 730 731 /** 732 * kset_find_obj - search for object in kset. 733 * @kset: kset we're looking in. 734 * @name: object's name. 735 * 736 * Lock kset via @kset->subsys, and iterate over @kset->list, 737 * looking for a matching kobject. If matching object is found 738 * take a reference and return the object. 739 */ 740 struct kobject *kset_find_obj(struct kset *kset, const char *name) 741 { 742 struct kobject *k; 743 struct kobject *ret = NULL; 744 745 spin_lock(&kset->list_lock); 746 list_for_each_entry(k, &kset->list, entry) { 747 if (kobject_name(k) && !strcmp(kobject_name(k), name)) { 748 ret = kobject_get(k); 749 break; 750 } 751 } 752 spin_unlock(&kset->list_lock); 753 return ret; 754 } 755 756 static void kset_release(struct kobject *kobj) 757 { 758 struct kset *kset = container_of(kobj, struct kset, kobj); 759 pr_debug("kobject: '%s' (%p): %s\n", 760 kobject_name(kobj), kobj, __func__); 761 kfree(kset); 762 } 763 764 static struct kobj_type kset_ktype = { 765 .sysfs_ops = &kobj_sysfs_ops, 766 .release = kset_release, 767 }; 768 769 /** 770 * kset_create - create a struct kset dynamically 771 * 772 * @name: the name for the kset 773 * @uevent_ops: a struct kset_uevent_ops for the kset 774 * @parent_kobj: the parent kobject of this kset, if any. 775 * 776 * This function creates a kset structure dynamically. This structure can 777 * then be registered with the system and show up in sysfs with a call to 778 * kset_register(). When you are finished with this structure, if 779 * kset_register() has been called, call kset_unregister() and the 780 * structure will be dynamically freed when it is no longer being used. 781 * 782 * If the kset was not able to be created, NULL will be returned. 783 */ 784 static struct kset *kset_create(const char *name, 785 struct kset_uevent_ops *uevent_ops, 786 struct kobject *parent_kobj) 787 { 788 struct kset *kset; 789 790 kset = kzalloc(sizeof(*kset), GFP_KERNEL); 791 if (!kset) 792 return NULL; 793 kobject_set_name(&kset->kobj, name); 794 kset->uevent_ops = uevent_ops; 795 kset->kobj.parent = parent_kobj; 796 797 /* 798 * The kobject of this kset will have a type of kset_ktype and belong to 799 * no kset itself. That way we can properly free it when it is 800 * finished being used. 801 */ 802 kset->kobj.ktype = &kset_ktype; 803 kset->kobj.kset = NULL; 804 805 return kset; 806 } 807 808 /** 809 * kset_create_and_add - create a struct kset dynamically and add it to sysfs 810 * 811 * @name: the name for the kset 812 * @uevent_ops: a struct kset_uevent_ops for the kset 813 * @parent_kobj: the parent kobject of this kset, if any. 814 * 815 * This function creates a kset structure dynamically and registers it 816 * with sysfs. When you are finished with this structure, call 817 * kset_unregister() and the structure will be dynamically freed when it 818 * is no longer being used. 819 * 820 * If the kset was not able to be created, NULL will be returned. 821 */ 822 struct kset *kset_create_and_add(const char *name, 823 struct kset_uevent_ops *uevent_ops, 824 struct kobject *parent_kobj) 825 { 826 struct kset *kset; 827 int error; 828 829 kset = kset_create(name, uevent_ops, parent_kobj); 830 if (!kset) 831 return NULL; 832 error = kset_register(kset); 833 if (error) { 834 kfree(kset); 835 return NULL; 836 } 837 return kset; 838 } 839 EXPORT_SYMBOL_GPL(kset_create_and_add); 840 841 EXPORT_SYMBOL(kobject_get); 842 EXPORT_SYMBOL(kobject_put); 843 EXPORT_SYMBOL(kobject_del); 844 845 EXPORT_SYMBOL(kset_register); 846 EXPORT_SYMBOL(kset_unregister); 847