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