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