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