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/kobj_completion.h> 17 #include <linux/string.h> 18 #include <linux/export.h> 19 #include <linux/stat.h> 20 #include <linux/slab.h> 21 22 /** 23 * kobject_namespace - return @kobj's namespace tag 24 * @kobj: kobject in question 25 * 26 * Returns namespace tag of @kobj if its parent has namespace ops enabled 27 * and thus @kobj should have a namespace tag associated with it. Returns 28 * %NULL otherwise. 29 */ 30 const void *kobject_namespace(struct kobject *kobj) 31 { 32 const struct kobj_ns_type_operations *ns_ops = kobj_ns_ops(kobj); 33 34 if (!ns_ops || ns_ops->type == KOBJ_NS_TYPE_NONE) 35 return NULL; 36 37 return kobj->ktype->namespace(kobj); 38 } 39 40 /* 41 * populate_dir - populate directory with attributes. 42 * @kobj: object we're working on. 43 * 44 * Most subsystems have a set of default attributes that are associated 45 * with an object that registers with them. This is a helper called during 46 * object registration that loops through the default attributes of the 47 * subsystem and creates attributes files for them in sysfs. 48 */ 49 static int populate_dir(struct kobject *kobj) 50 { 51 struct kobj_type *t = get_ktype(kobj); 52 struct attribute *attr; 53 int error = 0; 54 int i; 55 56 if (t && t->default_attrs) { 57 for (i = 0; (attr = t->default_attrs[i]) != NULL; i++) { 58 error = sysfs_create_file(kobj, attr); 59 if (error) 60 break; 61 } 62 } 63 return error; 64 } 65 66 static int create_dir(struct kobject *kobj) 67 { 68 int error; 69 70 error = sysfs_create_dir_ns(kobj, kobject_namespace(kobj)); 71 if (!error) { 72 error = populate_dir(kobj); 73 if (error) 74 sysfs_remove_dir(kobj); 75 } 76 77 /* 78 * @kobj->sd may be deleted by an ancestor going away. Hold an 79 * extra reference so that it stays until @kobj is gone. 80 */ 81 sysfs_get(kobj->sd); 82 83 return error; 84 } 85 86 static int get_kobj_path_length(struct kobject *kobj) 87 { 88 int length = 1; 89 struct kobject *parent = kobj; 90 91 /* walk up the ancestors until we hit the one pointing to the 92 * root. 93 * Add 1 to strlen for leading '/' of each level. 94 */ 95 do { 96 if (kobject_name(parent) == NULL) 97 return 0; 98 length += strlen(kobject_name(parent)) + 1; 99 parent = parent->parent; 100 } while (parent); 101 return length; 102 } 103 104 static void fill_kobj_path(struct kobject *kobj, char *path, int length) 105 { 106 struct kobject *parent; 107 108 --length; 109 for (parent = kobj; parent; parent = parent->parent) { 110 int cur = strlen(kobject_name(parent)); 111 /* back up enough to print this name with '/' */ 112 length -= cur; 113 strncpy(path + length, kobject_name(parent), cur); 114 *(path + --length) = '/'; 115 } 116 117 pr_debug("kobject: '%s' (%p): %s: path = '%s'\n", kobject_name(kobj), 118 kobj, __func__, path); 119 } 120 121 /** 122 * kobject_get_path - generate and return the path associated with a given kobj and kset pair. 123 * 124 * @kobj: kobject in question, with which to build the path 125 * @gfp_mask: the allocation type used to allocate the path 126 * 127 * The result must be freed by the caller with kfree(). 128 */ 129 char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask) 130 { 131 char *path; 132 int len; 133 134 len = get_kobj_path_length(kobj); 135 if (len == 0) 136 return NULL; 137 path = kzalloc(len, gfp_mask); 138 if (!path) 139 return NULL; 140 fill_kobj_path(kobj, path, len); 141 142 return path; 143 } 144 EXPORT_SYMBOL_GPL(kobject_get_path); 145 146 /* add the kobject to its kset's list */ 147 static void kobj_kset_join(struct kobject *kobj) 148 { 149 if (!kobj->kset) 150 return; 151 152 kset_get(kobj->kset); 153 spin_lock(&kobj->kset->list_lock); 154 list_add_tail(&kobj->entry, &kobj->kset->list); 155 spin_unlock(&kobj->kset->list_lock); 156 } 157 158 /* remove the kobject from its kset's list */ 159 static void kobj_kset_leave(struct kobject *kobj) 160 { 161 if (!kobj->kset) 162 return; 163 164 spin_lock(&kobj->kset->list_lock); 165 list_del_init(&kobj->entry); 166 spin_unlock(&kobj->kset->list_lock); 167 kset_put(kobj->kset); 168 } 169 170 static void kobject_init_internal(struct kobject *kobj) 171 { 172 if (!kobj) 173 return; 174 kref_init(&kobj->kref); 175 INIT_LIST_HEAD(&kobj->entry); 176 kobj->state_in_sysfs = 0; 177 kobj->state_add_uevent_sent = 0; 178 kobj->state_remove_uevent_sent = 0; 179 kobj->state_initialized = 1; 180 } 181 182 183 static int kobject_add_internal(struct kobject *kobj) 184 { 185 int error = 0; 186 struct kobject *parent; 187 188 if (!kobj) 189 return -ENOENT; 190 191 if (!kobj->name || !kobj->name[0]) { 192 WARN(1, "kobject: (%p): attempted to be registered with empty " 193 "name!\n", kobj); 194 return -EINVAL; 195 } 196 197 parent = kobject_get(kobj->parent); 198 199 /* join kset if set, use it as parent if we do not already have one */ 200 if (kobj->kset) { 201 if (!parent) 202 parent = kobject_get(&kobj->kset->kobj); 203 kobj_kset_join(kobj); 204 kobj->parent = parent; 205 } 206 207 pr_debug("kobject: '%s' (%p): %s: parent: '%s', set: '%s'\n", 208 kobject_name(kobj), kobj, __func__, 209 parent ? kobject_name(parent) : "<NULL>", 210 kobj->kset ? kobject_name(&kobj->kset->kobj) : "<NULL>"); 211 212 error = create_dir(kobj); 213 if (error) { 214 kobj_kset_leave(kobj); 215 kobject_put(parent); 216 kobj->parent = NULL; 217 218 /* be noisy on error issues */ 219 if (error == -EEXIST) 220 WARN(1, "%s failed for %s with " 221 "-EEXIST, don't try to register things with " 222 "the same name in the same directory.\n", 223 __func__, kobject_name(kobj)); 224 else 225 WARN(1, "%s failed for %s (error: %d parent: %s)\n", 226 __func__, kobject_name(kobj), error, 227 parent ? kobject_name(parent) : "'none'"); 228 } else 229 kobj->state_in_sysfs = 1; 230 231 return error; 232 } 233 234 /** 235 * kobject_set_name_vargs - Set the name of an kobject 236 * @kobj: struct kobject to set the name of 237 * @fmt: format string used to build the name 238 * @vargs: vargs to format the string. 239 */ 240 int kobject_set_name_vargs(struct kobject *kobj, const char *fmt, 241 va_list vargs) 242 { 243 const char *old_name = kobj->name; 244 char *s; 245 246 if (kobj->name && !fmt) 247 return 0; 248 249 kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs); 250 if (!kobj->name) 251 return -ENOMEM; 252 253 /* ewww... some of these buggers have '/' in the name ... */ 254 while ((s = strchr(kobj->name, '/'))) 255 s[0] = '!'; 256 257 kfree(old_name); 258 return 0; 259 } 260 261 /** 262 * kobject_set_name - Set the name of a kobject 263 * @kobj: struct kobject to set the name of 264 * @fmt: format string used to build the name 265 * 266 * This sets the name of the kobject. If you have already added the 267 * kobject to the system, you must call kobject_rename() in order to 268 * change the name of the kobject. 269 */ 270 int kobject_set_name(struct kobject *kobj, const char *fmt, ...) 271 { 272 va_list vargs; 273 int retval; 274 275 va_start(vargs, fmt); 276 retval = kobject_set_name_vargs(kobj, fmt, vargs); 277 va_end(vargs); 278 279 return retval; 280 } 281 EXPORT_SYMBOL(kobject_set_name); 282 283 /** 284 * kobject_init - initialize a kobject structure 285 * @kobj: pointer to the kobject to initialize 286 * @ktype: pointer to the ktype for this kobject. 287 * 288 * This function will properly initialize a kobject such that it can then 289 * be passed to the kobject_add() call. 290 * 291 * After this function is called, the kobject MUST be cleaned up by a call 292 * to kobject_put(), not by a call to kfree directly to ensure that all of 293 * the memory is cleaned up properly. 294 */ 295 void kobject_init(struct kobject *kobj, struct kobj_type *ktype) 296 { 297 char *err_str; 298 299 if (!kobj) { 300 err_str = "invalid kobject pointer!"; 301 goto error; 302 } 303 if (!ktype) { 304 err_str = "must have a ktype to be initialized properly!\n"; 305 goto error; 306 } 307 if (kobj->state_initialized) { 308 /* do not error out as sometimes we can recover */ 309 printk(KERN_ERR "kobject (%p): tried to init an initialized " 310 "object, something is seriously wrong.\n", kobj); 311 dump_stack(); 312 } 313 314 kobject_init_internal(kobj); 315 kobj->ktype = ktype; 316 return; 317 318 error: 319 printk(KERN_ERR "kobject (%p): %s\n", kobj, err_str); 320 dump_stack(); 321 } 322 EXPORT_SYMBOL(kobject_init); 323 324 static int kobject_add_varg(struct kobject *kobj, struct kobject *parent, 325 const char *fmt, va_list vargs) 326 { 327 int retval; 328 329 retval = kobject_set_name_vargs(kobj, fmt, vargs); 330 if (retval) { 331 printk(KERN_ERR "kobject: can not set name properly!\n"); 332 return retval; 333 } 334 kobj->parent = parent; 335 return kobject_add_internal(kobj); 336 } 337 338 /** 339 * kobject_add - the main kobject add function 340 * @kobj: the kobject to add 341 * @parent: pointer to the parent of the kobject. 342 * @fmt: format to name the kobject with. 343 * 344 * The kobject name is set and added to the kobject hierarchy in this 345 * function. 346 * 347 * If @parent is set, then the parent of the @kobj will be set to it. 348 * If @parent is NULL, then the parent of the @kobj will be set to the 349 * kobject associted with the kset assigned to this kobject. If no kset 350 * is assigned to the kobject, then the kobject will be located in the 351 * root of the sysfs tree. 352 * 353 * If this function returns an error, kobject_put() must be called to 354 * properly clean up the memory associated with the object. 355 * Under no instance should the kobject that is passed to this function 356 * be directly freed with a call to kfree(), that can leak memory. 357 * 358 * Note, no "add" uevent will be created with this call, the caller should set 359 * up all of the necessary sysfs files for the object and then call 360 * kobject_uevent() with the UEVENT_ADD parameter to ensure that 361 * userspace is properly notified of this kobject's creation. 362 */ 363 int kobject_add(struct kobject *kobj, struct kobject *parent, 364 const char *fmt, ...) 365 { 366 va_list args; 367 int retval; 368 369 if (!kobj) 370 return -EINVAL; 371 372 if (!kobj->state_initialized) { 373 printk(KERN_ERR "kobject '%s' (%p): tried to add an " 374 "uninitialized object, something is seriously wrong.\n", 375 kobject_name(kobj), kobj); 376 dump_stack(); 377 return -EINVAL; 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(kobject_add); 386 387 /** 388 * kobject_init_and_add - initialize a kobject structure and add it to the kobject hierarchy 389 * @kobj: pointer to the kobject to initialize 390 * @ktype: pointer to the ktype for this kobject. 391 * @parent: pointer to the parent of this kobject. 392 * @fmt: the name of the kobject. 393 * 394 * This function combines the call to kobject_init() and 395 * kobject_add(). The same type of error handling after a call to 396 * kobject_add() and kobject lifetime rules are the same here. 397 */ 398 int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype, 399 struct kobject *parent, const char *fmt, ...) 400 { 401 va_list args; 402 int retval; 403 404 kobject_init(kobj, ktype); 405 406 va_start(args, fmt); 407 retval = kobject_add_varg(kobj, parent, fmt, args); 408 va_end(args); 409 410 return retval; 411 } 412 EXPORT_SYMBOL_GPL(kobject_init_and_add); 413 414 /** 415 * kobject_rename - change the name of an object 416 * @kobj: object in question. 417 * @new_name: object's new name 418 * 419 * It is the responsibility of the caller to provide mutual 420 * exclusion between two different calls of kobject_rename 421 * on the same kobject and to ensure that new_name is valid and 422 * won't conflict with other kobjects. 423 */ 424 int kobject_rename(struct kobject *kobj, const char *new_name) 425 { 426 int error = 0; 427 const char *devpath = NULL; 428 const char *dup_name = NULL, *name; 429 char *devpath_string = NULL; 430 char *envp[2]; 431 432 kobj = kobject_get(kobj); 433 if (!kobj) 434 return -EINVAL; 435 if (!kobj->parent) 436 return -EINVAL; 437 438 devpath = kobject_get_path(kobj, GFP_KERNEL); 439 if (!devpath) { 440 error = -ENOMEM; 441 goto out; 442 } 443 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 444 if (!devpath_string) { 445 error = -ENOMEM; 446 goto out; 447 } 448 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 449 envp[0] = devpath_string; 450 envp[1] = NULL; 451 452 name = dup_name = kstrdup(new_name, GFP_KERNEL); 453 if (!name) { 454 error = -ENOMEM; 455 goto out; 456 } 457 458 error = sysfs_rename_dir_ns(kobj, new_name, kobject_namespace(kobj)); 459 if (error) 460 goto out; 461 462 /* Install the new kobject name */ 463 dup_name = kobj->name; 464 kobj->name = name; 465 466 /* This function is mostly/only used for network interface. 467 * Some hotplug package track interfaces by their name and 468 * therefore want to know when the name is changed by the user. */ 469 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 470 471 out: 472 kfree(dup_name); 473 kfree(devpath_string); 474 kfree(devpath); 475 kobject_put(kobj); 476 477 return error; 478 } 479 EXPORT_SYMBOL_GPL(kobject_rename); 480 481 /** 482 * kobject_move - move object to another parent 483 * @kobj: object in question. 484 * @new_parent: object's new parent (can be NULL) 485 */ 486 int kobject_move(struct kobject *kobj, struct kobject *new_parent) 487 { 488 int error; 489 struct kobject *old_parent; 490 const char *devpath = NULL; 491 char *devpath_string = NULL; 492 char *envp[2]; 493 494 kobj = kobject_get(kobj); 495 if (!kobj) 496 return -EINVAL; 497 new_parent = kobject_get(new_parent); 498 if (!new_parent) { 499 if (kobj->kset) 500 new_parent = kobject_get(&kobj->kset->kobj); 501 } 502 503 /* old object path */ 504 devpath = kobject_get_path(kobj, GFP_KERNEL); 505 if (!devpath) { 506 error = -ENOMEM; 507 goto out; 508 } 509 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 510 if (!devpath_string) { 511 error = -ENOMEM; 512 goto out; 513 } 514 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 515 envp[0] = devpath_string; 516 envp[1] = NULL; 517 error = sysfs_move_dir_ns(kobj, new_parent, kobject_namespace(kobj)); 518 if (error) 519 goto out; 520 old_parent = kobj->parent; 521 kobj->parent = new_parent; 522 new_parent = NULL; 523 kobject_put(old_parent); 524 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 525 out: 526 kobject_put(new_parent); 527 kobject_put(kobj); 528 kfree(devpath_string); 529 kfree(devpath); 530 return error; 531 } 532 533 /** 534 * kobject_del - unlink kobject from hierarchy. 535 * @kobj: object. 536 */ 537 void kobject_del(struct kobject *kobj) 538 { 539 struct sysfs_dirent *sd; 540 541 if (!kobj) 542 return; 543 544 sd = kobj->sd; 545 sysfs_remove_dir(kobj); 546 sysfs_put(sd); 547 548 kobj->state_in_sysfs = 0; 549 kobj_kset_leave(kobj); 550 kobject_put(kobj->parent); 551 kobj->parent = NULL; 552 } 553 554 /** 555 * kobject_get - increment refcount for object. 556 * @kobj: object. 557 */ 558 struct kobject *kobject_get(struct kobject *kobj) 559 { 560 if (kobj) 561 kref_get(&kobj->kref); 562 return kobj; 563 } 564 565 static struct kobject * __must_check kobject_get_unless_zero(struct kobject *kobj) 566 { 567 if (!kref_get_unless_zero(&kobj->kref)) 568 kobj = NULL; 569 return kobj; 570 } 571 572 /* 573 * kobject_cleanup - free kobject resources. 574 * @kobj: object to cleanup 575 */ 576 static void kobject_cleanup(struct kobject *kobj) 577 { 578 struct kobj_type *t = get_ktype(kobj); 579 const char *name = kobj->name; 580 581 pr_debug("kobject: '%s' (%p): %s, parent %p\n", 582 kobject_name(kobj), kobj, __func__, kobj->parent); 583 584 if (t && !t->release) 585 pr_debug("kobject: '%s' (%p): does not have a release() " 586 "function, it is broken and must be fixed.\n", 587 kobject_name(kobj), kobj); 588 589 /* send "remove" if the caller did not do it but sent "add" */ 590 if (kobj->state_add_uevent_sent && !kobj->state_remove_uevent_sent) { 591 pr_debug("kobject: '%s' (%p): auto cleanup 'remove' event\n", 592 kobject_name(kobj), kobj); 593 kobject_uevent(kobj, KOBJ_REMOVE); 594 } 595 596 /* remove from sysfs if the caller did not do it */ 597 if (kobj->state_in_sysfs) { 598 pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n", 599 kobject_name(kobj), kobj); 600 kobject_del(kobj); 601 } 602 603 if (t && t->release) { 604 pr_debug("kobject: '%s' (%p): calling ktype release\n", 605 kobject_name(kobj), kobj); 606 t->release(kobj); 607 } 608 609 /* free name if we allocated it */ 610 if (name) { 611 pr_debug("kobject: '%s': free name\n", name); 612 kfree(name); 613 } 614 } 615 616 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE 617 static void kobject_delayed_cleanup(struct work_struct *work) 618 { 619 kobject_cleanup(container_of(to_delayed_work(work), 620 struct kobject, release)); 621 } 622 #endif 623 624 static void kobject_release(struct kref *kref) 625 { 626 struct kobject *kobj = container_of(kref, struct kobject, kref); 627 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE 628 pr_info("kobject: '%s' (%p): %s, parent %p (delayed)\n", 629 kobject_name(kobj), kobj, __func__, kobj->parent); 630 INIT_DELAYED_WORK(&kobj->release, kobject_delayed_cleanup); 631 schedule_delayed_work(&kobj->release, HZ); 632 #else 633 kobject_cleanup(kobj); 634 #endif 635 } 636 637 /** 638 * kobject_put - decrement refcount for object. 639 * @kobj: object. 640 * 641 * Decrement the refcount, and if 0, call kobject_cleanup(). 642 */ 643 void kobject_put(struct kobject *kobj) 644 { 645 if (kobj) { 646 if (!kobj->state_initialized) 647 WARN(1, KERN_WARNING "kobject: '%s' (%p): is not " 648 "initialized, yet kobject_put() is being " 649 "called.\n", kobject_name(kobj), kobj); 650 kref_put(&kobj->kref, kobject_release); 651 } 652 } 653 654 static void dynamic_kobj_release(struct kobject *kobj) 655 { 656 pr_debug("kobject: (%p): %s\n", kobj, __func__); 657 kfree(kobj); 658 } 659 660 static struct kobj_type dynamic_kobj_ktype = { 661 .release = dynamic_kobj_release, 662 .sysfs_ops = &kobj_sysfs_ops, 663 }; 664 665 /** 666 * kobject_create - create a struct kobject dynamically 667 * 668 * This function creates a kobject structure dynamically and sets it up 669 * to be a "dynamic" kobject with a default release function set up. 670 * 671 * If the kobject was not able to be created, NULL will be returned. 672 * The kobject structure returned from here must be cleaned up with a 673 * call to kobject_put() and not kfree(), as kobject_init() has 674 * already been called on this structure. 675 */ 676 struct kobject *kobject_create(void) 677 { 678 struct kobject *kobj; 679 680 kobj = kzalloc(sizeof(*kobj), GFP_KERNEL); 681 if (!kobj) 682 return NULL; 683 684 kobject_init(kobj, &dynamic_kobj_ktype); 685 return kobj; 686 } 687 688 /** 689 * kobject_create_and_add - create a struct kobject dynamically and register it with sysfs 690 * 691 * @name: the name for the kobject 692 * @parent: the parent kobject of this kobject, if any. 693 * 694 * This function creates a kobject structure dynamically and registers it 695 * with sysfs. When you are finished with this structure, call 696 * kobject_put() and the structure will be dynamically freed when 697 * it is no longer being used. 698 * 699 * If the kobject was not able to be created, NULL will be returned. 700 */ 701 struct kobject *kobject_create_and_add(const char *name, struct kobject *parent) 702 { 703 struct kobject *kobj; 704 int retval; 705 706 kobj = kobject_create(); 707 if (!kobj) 708 return NULL; 709 710 retval = kobject_add(kobj, parent, "%s", name); 711 if (retval) { 712 printk(KERN_WARNING "%s: kobject_add error: %d\n", 713 __func__, retval); 714 kobject_put(kobj); 715 kobj = NULL; 716 } 717 return kobj; 718 } 719 EXPORT_SYMBOL_GPL(kobject_create_and_add); 720 721 /** 722 * kset_init - initialize a kset for use 723 * @k: kset 724 */ 725 void kset_init(struct kset *k) 726 { 727 kobject_init_internal(&k->kobj); 728 INIT_LIST_HEAD(&k->list); 729 spin_lock_init(&k->list_lock); 730 } 731 732 /* default kobject attribute operations */ 733 static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr, 734 char *buf) 735 { 736 struct kobj_attribute *kattr; 737 ssize_t ret = -EIO; 738 739 kattr = container_of(attr, struct kobj_attribute, attr); 740 if (kattr->show) 741 ret = kattr->show(kobj, kattr, buf); 742 return ret; 743 } 744 745 static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr, 746 const char *buf, size_t count) 747 { 748 struct kobj_attribute *kattr; 749 ssize_t ret = -EIO; 750 751 kattr = container_of(attr, struct kobj_attribute, attr); 752 if (kattr->store) 753 ret = kattr->store(kobj, kattr, buf, count); 754 return ret; 755 } 756 757 const struct sysfs_ops kobj_sysfs_ops = { 758 .show = kobj_attr_show, 759 .store = kobj_attr_store, 760 }; 761 762 /** 763 * kobj_completion_init - initialize a kobj_completion object. 764 * @kc: kobj_completion 765 * @ktype: type of kobject to initialize 766 * 767 * kobj_completion structures can be embedded within structures with different 768 * lifetime rules. During the release of the enclosing object, we can 769 * wait on the release of the kobject so that we don't free it while it's 770 * still busy. 771 */ 772 void kobj_completion_init(struct kobj_completion *kc, struct kobj_type *ktype) 773 { 774 init_completion(&kc->kc_unregister); 775 kobject_init(&kc->kc_kobj, ktype); 776 } 777 EXPORT_SYMBOL_GPL(kobj_completion_init); 778 779 /** 780 * kobj_completion_release - release a kobj_completion object 781 * @kobj: kobject embedded in kobj_completion 782 * 783 * Used with kobject_release to notify waiters that the kobject has been 784 * released. 785 */ 786 void kobj_completion_release(struct kobject *kobj) 787 { 788 struct kobj_completion *kc = kobj_to_kobj_completion(kobj); 789 complete(&kc->kc_unregister); 790 } 791 EXPORT_SYMBOL_GPL(kobj_completion_release); 792 793 /** 794 * kobj_completion_del_and_wait - release the kobject and wait for it 795 * @kc: kobj_completion object to release 796 * 797 * Delete the kobject from sysfs and drop the reference count. Then wait 798 * until any other outstanding references are also dropped. This routine 799 * is only necessary once other references may have been taken on the 800 * kobject. Typically this happens when the kobject has been published 801 * to sysfs via kobject_add. 802 */ 803 void kobj_completion_del_and_wait(struct kobj_completion *kc) 804 { 805 kobject_del(&kc->kc_kobj); 806 kobject_put(&kc->kc_kobj); 807 wait_for_completion(&kc->kc_unregister); 808 } 809 EXPORT_SYMBOL_GPL(kobj_completion_del_and_wait); 810 811 /** 812 * kset_register - initialize and add a kset. 813 * @k: kset. 814 */ 815 int kset_register(struct kset *k) 816 { 817 int err; 818 819 if (!k) 820 return -EINVAL; 821 822 kset_init(k); 823 err = kobject_add_internal(&k->kobj); 824 if (err) 825 return err; 826 kobject_uevent(&k->kobj, KOBJ_ADD); 827 return 0; 828 } 829 830 /** 831 * kset_unregister - remove a kset. 832 * @k: kset. 833 */ 834 void kset_unregister(struct kset *k) 835 { 836 if (!k) 837 return; 838 kobject_put(&k->kobj); 839 } 840 841 /** 842 * kset_find_obj - search for object in kset. 843 * @kset: kset we're looking in. 844 * @name: object's name. 845 * 846 * Lock kset via @kset->subsys, and iterate over @kset->list, 847 * looking for a matching kobject. If matching object is found 848 * take a reference and return the object. 849 */ 850 struct kobject *kset_find_obj(struct kset *kset, const char *name) 851 { 852 struct kobject *k; 853 struct kobject *ret = NULL; 854 855 spin_lock(&kset->list_lock); 856 857 list_for_each_entry(k, &kset->list, entry) { 858 if (kobject_name(k) && !strcmp(kobject_name(k), name)) { 859 ret = kobject_get_unless_zero(k); 860 break; 861 } 862 } 863 864 spin_unlock(&kset->list_lock); 865 return ret; 866 } 867 868 static void kset_release(struct kobject *kobj) 869 { 870 struct kset *kset = container_of(kobj, struct kset, kobj); 871 pr_debug("kobject: '%s' (%p): %s\n", 872 kobject_name(kobj), kobj, __func__); 873 kfree(kset); 874 } 875 876 static struct kobj_type kset_ktype = { 877 .sysfs_ops = &kobj_sysfs_ops, 878 .release = kset_release, 879 }; 880 881 /** 882 * kset_create - create a struct kset dynamically 883 * 884 * @name: the name for the kset 885 * @uevent_ops: a struct kset_uevent_ops for the kset 886 * @parent_kobj: the parent kobject of this kset, if any. 887 * 888 * This function creates a kset structure dynamically. This structure can 889 * then be registered with the system and show up in sysfs with a call to 890 * kset_register(). When you are finished with this structure, if 891 * kset_register() has been called, call kset_unregister() and the 892 * structure will be dynamically freed when it is no longer being used. 893 * 894 * If the kset was not able to be created, NULL will be returned. 895 */ 896 static struct kset *kset_create(const char *name, 897 const struct kset_uevent_ops *uevent_ops, 898 struct kobject *parent_kobj) 899 { 900 struct kset *kset; 901 int retval; 902 903 kset = kzalloc(sizeof(*kset), GFP_KERNEL); 904 if (!kset) 905 return NULL; 906 retval = kobject_set_name(&kset->kobj, "%s", name); 907 if (retval) { 908 kfree(kset); 909 return NULL; 910 } 911 kset->uevent_ops = uevent_ops; 912 kset->kobj.parent = parent_kobj; 913 914 /* 915 * The kobject of this kset will have a type of kset_ktype and belong to 916 * no kset itself. That way we can properly free it when it is 917 * finished being used. 918 */ 919 kset->kobj.ktype = &kset_ktype; 920 kset->kobj.kset = NULL; 921 922 return kset; 923 } 924 925 /** 926 * kset_create_and_add - create a struct kset dynamically and add it to sysfs 927 * 928 * @name: the name for the kset 929 * @uevent_ops: a struct kset_uevent_ops for the kset 930 * @parent_kobj: the parent kobject of this kset, if any. 931 * 932 * This function creates a kset structure dynamically and registers it 933 * with sysfs. When you are finished with this structure, call 934 * kset_unregister() and the structure will be dynamically freed when it 935 * is no longer being used. 936 * 937 * If the kset was not able to be created, NULL will be returned. 938 */ 939 struct kset *kset_create_and_add(const char *name, 940 const struct kset_uevent_ops *uevent_ops, 941 struct kobject *parent_kobj) 942 { 943 struct kset *kset; 944 int error; 945 946 kset = kset_create(name, uevent_ops, parent_kobj); 947 if (!kset) 948 return NULL; 949 error = kset_register(kset); 950 if (error) { 951 kfree(kset); 952 return NULL; 953 } 954 return kset; 955 } 956 EXPORT_SYMBOL_GPL(kset_create_and_add); 957 958 959 static DEFINE_SPINLOCK(kobj_ns_type_lock); 960 static const struct kobj_ns_type_operations *kobj_ns_ops_tbl[KOBJ_NS_TYPES]; 961 962 int kobj_ns_type_register(const struct kobj_ns_type_operations *ops) 963 { 964 enum kobj_ns_type type = ops->type; 965 int error; 966 967 spin_lock(&kobj_ns_type_lock); 968 969 error = -EINVAL; 970 if (type >= KOBJ_NS_TYPES) 971 goto out; 972 973 error = -EINVAL; 974 if (type <= KOBJ_NS_TYPE_NONE) 975 goto out; 976 977 error = -EBUSY; 978 if (kobj_ns_ops_tbl[type]) 979 goto out; 980 981 error = 0; 982 kobj_ns_ops_tbl[type] = ops; 983 984 out: 985 spin_unlock(&kobj_ns_type_lock); 986 return error; 987 } 988 989 int kobj_ns_type_registered(enum kobj_ns_type type) 990 { 991 int registered = 0; 992 993 spin_lock(&kobj_ns_type_lock); 994 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES)) 995 registered = kobj_ns_ops_tbl[type] != NULL; 996 spin_unlock(&kobj_ns_type_lock); 997 998 return registered; 999 } 1000 1001 const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent) 1002 { 1003 const struct kobj_ns_type_operations *ops = NULL; 1004 1005 if (parent && parent->ktype->child_ns_type) 1006 ops = parent->ktype->child_ns_type(parent); 1007 1008 return ops; 1009 } 1010 1011 const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj) 1012 { 1013 return kobj_child_ns_ops(kobj->parent); 1014 } 1015 1016 bool kobj_ns_current_may_mount(enum kobj_ns_type type) 1017 { 1018 bool may_mount = true; 1019 1020 spin_lock(&kobj_ns_type_lock); 1021 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1022 kobj_ns_ops_tbl[type]) 1023 may_mount = kobj_ns_ops_tbl[type]->current_may_mount(); 1024 spin_unlock(&kobj_ns_type_lock); 1025 1026 return may_mount; 1027 } 1028 1029 void *kobj_ns_grab_current(enum kobj_ns_type type) 1030 { 1031 void *ns = NULL; 1032 1033 spin_lock(&kobj_ns_type_lock); 1034 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1035 kobj_ns_ops_tbl[type]) 1036 ns = kobj_ns_ops_tbl[type]->grab_current_ns(); 1037 spin_unlock(&kobj_ns_type_lock); 1038 1039 return ns; 1040 } 1041 1042 const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk) 1043 { 1044 const void *ns = NULL; 1045 1046 spin_lock(&kobj_ns_type_lock); 1047 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1048 kobj_ns_ops_tbl[type]) 1049 ns = kobj_ns_ops_tbl[type]->netlink_ns(sk); 1050 spin_unlock(&kobj_ns_type_lock); 1051 1052 return ns; 1053 } 1054 1055 const void *kobj_ns_initial(enum kobj_ns_type type) 1056 { 1057 const void *ns = NULL; 1058 1059 spin_lock(&kobj_ns_type_lock); 1060 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1061 kobj_ns_ops_tbl[type]) 1062 ns = kobj_ns_ops_tbl[type]->initial_ns(); 1063 spin_unlock(&kobj_ns_type_lock); 1064 1065 return ns; 1066 } 1067 1068 void kobj_ns_drop(enum kobj_ns_type type, void *ns) 1069 { 1070 spin_lock(&kobj_ns_type_lock); 1071 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1072 kobj_ns_ops_tbl[type] && kobj_ns_ops_tbl[type]->drop_ns) 1073 kobj_ns_ops_tbl[type]->drop_ns(ns); 1074 spin_unlock(&kobj_ns_type_lock); 1075 } 1076 1077 EXPORT_SYMBOL(kobject_get); 1078 EXPORT_SYMBOL(kobject_put); 1079 EXPORT_SYMBOL(kobject_del); 1080 1081 EXPORT_SYMBOL(kset_register); 1082 EXPORT_SYMBOL(kset_unregister); 1083