1
2
3
4
5
6
7
8
9
10
11
12
13#include <linux/device.h>
14#include <linux/err.h>
15#include <linux/fwnode.h>
16#include <linux/init.h>
17#include <linux/module.h>
18#include <linux/slab.h>
19#include <linux/string.h>
20#include <linux/kdev_t.h>
21#include <linux/notifier.h>
22#include <linux/of.h>
23#include <linux/of_device.h>
24#include <linux/genhd.h>
25#include <linux/kallsyms.h>
26#include <linux/mutex.h>
27#include <linux/pm_runtime.h>
28#include <linux/netdevice.h>
29#include <linux/sysfs.h>
30
31#include "base.h"
32#include "power/power.h"
33
34#ifdef CONFIG_SYSFS_DEPRECATED
35#ifdef CONFIG_SYSFS_DEPRECATED_V2
36long sysfs_deprecated = 1;
37#else
38long sysfs_deprecated = 0;
39#endif
40static int __init sysfs_deprecated_setup(char *arg)
41{
42 return kstrtol(arg, 10, &sysfs_deprecated);
43}
44early_param("sysfs.deprecated", sysfs_deprecated_setup);
45#endif
46
47int (*platform_notify)(struct device *dev) = NULL;
48int (*platform_notify_remove)(struct device *dev) = NULL;
49static struct kobject *dev_kobj;
50struct kobject *sysfs_dev_char_kobj;
51struct kobject *sysfs_dev_block_kobj;
52
53static DEFINE_MUTEX(device_hotplug_lock);
54
55void lock_device_hotplug(void)
56{
57 mutex_lock(&device_hotplug_lock);
58}
59
60void unlock_device_hotplug(void)
61{
62 mutex_unlock(&device_hotplug_lock);
63}
64
65int lock_device_hotplug_sysfs(void)
66{
67 if (mutex_trylock(&device_hotplug_lock))
68 return 0;
69
70
71 msleep(5);
72 return restart_syscall();
73}
74
75#ifdef CONFIG_BLOCK
76static inline int device_is_not_partition(struct device *dev)
77{
78 return !(dev->type == &part_type);
79}
80#else
81static inline int device_is_not_partition(struct device *dev)
82{
83 return 1;
84}
85#endif
86
87
88
89
90
91
92
93
94
95
96const char *dev_driver_string(const struct device *dev)
97{
98 struct device_driver *drv;
99
100
101
102
103
104 drv = ACCESS_ONCE(dev->driver);
105 return drv ? drv->name :
106 (dev->bus ? dev->bus->name :
107 (dev->class ? dev->class->name : ""));
108}
109EXPORT_SYMBOL(dev_driver_string);
110
111#define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr)
112
113static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr,
114 char *buf)
115{
116 struct device_attribute *dev_attr = to_dev_attr(attr);
117 struct device *dev = kobj_to_dev(kobj);
118 ssize_t ret = -EIO;
119
120 if (dev_attr->show)
121 ret = dev_attr->show(dev, dev_attr, buf);
122 if (ret >= (ssize_t)PAGE_SIZE) {
123 print_symbol("dev_attr_show: %s returned bad count\n",
124 (unsigned long)dev_attr->show);
125 }
126 return ret;
127}
128
129static ssize_t dev_attr_store(struct kobject *kobj, struct attribute *attr,
130 const char *buf, size_t count)
131{
132 struct device_attribute *dev_attr = to_dev_attr(attr);
133 struct device *dev = kobj_to_dev(kobj);
134 ssize_t ret = -EIO;
135
136 if (dev_attr->store)
137 ret = dev_attr->store(dev, dev_attr, buf, count);
138 return ret;
139}
140
141static const struct sysfs_ops dev_sysfs_ops = {
142 .show = dev_attr_show,
143 .store = dev_attr_store,
144};
145
146#define to_ext_attr(x) container_of(x, struct dev_ext_attribute, attr)
147
148ssize_t device_store_ulong(struct device *dev,
149 struct device_attribute *attr,
150 const char *buf, size_t size)
151{
152 struct dev_ext_attribute *ea = to_ext_attr(attr);
153 char *end;
154 unsigned long new = simple_strtoul(buf, &end, 0);
155 if (end == buf)
156 return -EINVAL;
157 *(unsigned long *)(ea->var) = new;
158
159 return size;
160}
161EXPORT_SYMBOL_GPL(device_store_ulong);
162
163ssize_t device_show_ulong(struct device *dev,
164 struct device_attribute *attr,
165 char *buf)
166{
167 struct dev_ext_attribute *ea = to_ext_attr(attr);
168 return snprintf(buf, PAGE_SIZE, "%lx\n", *(unsigned long *)(ea->var));
169}
170EXPORT_SYMBOL_GPL(device_show_ulong);
171
172ssize_t device_store_int(struct device *dev,
173 struct device_attribute *attr,
174 const char *buf, size_t size)
175{
176 struct dev_ext_attribute *ea = to_ext_attr(attr);
177 char *end;
178 long new = simple_strtol(buf, &end, 0);
179 if (end == buf || new > INT_MAX || new < INT_MIN)
180 return -EINVAL;
181 *(int *)(ea->var) = new;
182
183 return size;
184}
185EXPORT_SYMBOL_GPL(device_store_int);
186
187ssize_t device_show_int(struct device *dev,
188 struct device_attribute *attr,
189 char *buf)
190{
191 struct dev_ext_attribute *ea = to_ext_attr(attr);
192
193 return snprintf(buf, PAGE_SIZE, "%d\n", *(int *)(ea->var));
194}
195EXPORT_SYMBOL_GPL(device_show_int);
196
197ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
198 const char *buf, size_t size)
199{
200 struct dev_ext_attribute *ea = to_ext_attr(attr);
201
202 if (strtobool(buf, ea->var) < 0)
203 return -EINVAL;
204
205 return size;
206}
207EXPORT_SYMBOL_GPL(device_store_bool);
208
209ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
210 char *buf)
211{
212 struct dev_ext_attribute *ea = to_ext_attr(attr);
213
214 return snprintf(buf, PAGE_SIZE, "%d\n", *(bool *)(ea->var));
215}
216EXPORT_SYMBOL_GPL(device_show_bool);
217
218
219
220
221
222
223
224
225
226static void device_release(struct kobject *kobj)
227{
228 struct device *dev = kobj_to_dev(kobj);
229 struct device_private *p = dev->p;
230
231
232
233
234
235
236
237
238
239
240 devres_release_all(dev);
241
242 if (dev->release)
243 dev->release(dev);
244 else if (dev->type && dev->type->release)
245 dev->type->release(dev);
246 else if (dev->class && dev->class->dev_release)
247 dev->class->dev_release(dev);
248 else
249 WARN(1, KERN_ERR "Device '%s' does not have a release() "
250 "function, it is broken and must be fixed.\n",
251 dev_name(dev));
252 kfree(p);
253}
254
255static const void *device_namespace(struct kobject *kobj)
256{
257 struct device *dev = kobj_to_dev(kobj);
258 const void *ns = NULL;
259
260 if (dev->class && dev->class->ns_type)
261 ns = dev->class->namespace(dev);
262
263 return ns;
264}
265
266static struct kobj_type device_ktype = {
267 .release = device_release,
268 .sysfs_ops = &dev_sysfs_ops,
269 .namespace = device_namespace,
270};
271
272
273static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)
274{
275 struct kobj_type *ktype = get_ktype(kobj);
276
277 if (ktype == &device_ktype) {
278 struct device *dev = kobj_to_dev(kobj);
279 if (dev->bus)
280 return 1;
281 if (dev->class)
282 return 1;
283 }
284 return 0;
285}
286
287static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj)
288{
289 struct device *dev = kobj_to_dev(kobj);
290
291 if (dev->bus)
292 return dev->bus->name;
293 if (dev->class)
294 return dev->class->name;
295 return NULL;
296}
297
298static int dev_uevent(struct kset *kset, struct kobject *kobj,
299 struct kobj_uevent_env *env)
300{
301 struct device *dev = kobj_to_dev(kobj);
302 int retval = 0;
303
304
305 if (MAJOR(dev->devt)) {
306 const char *tmp;
307 const char *name;
308 umode_t mode = 0;
309 kuid_t uid = GLOBAL_ROOT_UID;
310 kgid_t gid = GLOBAL_ROOT_GID;
311
312 add_uevent_var(env, "MAJOR=%u", MAJOR(dev->devt));
313 add_uevent_var(env, "MINOR=%u", MINOR(dev->devt));
314 name = device_get_devnode(dev, &mode, &uid, &gid, &tmp);
315 if (name) {
316 add_uevent_var(env, "DEVNAME=%s", name);
317 if (mode)
318 add_uevent_var(env, "DEVMODE=%#o", mode & 0777);
319 if (!uid_eq(uid, GLOBAL_ROOT_UID))
320 add_uevent_var(env, "DEVUID=%u", from_kuid(&init_user_ns, uid));
321 if (!gid_eq(gid, GLOBAL_ROOT_GID))
322 add_uevent_var(env, "DEVGID=%u", from_kgid(&init_user_ns, gid));
323 kfree(tmp);
324 }
325 }
326
327 if (dev->type && dev->type->name)
328 add_uevent_var(env, "DEVTYPE=%s", dev->type->name);
329
330 if (dev->driver)
331 add_uevent_var(env, "DRIVER=%s", dev->driver->name);
332
333
334 of_device_uevent(dev, env);
335
336
337 if (dev->bus && dev->bus->uevent) {
338 retval = dev->bus->uevent(dev, env);
339 if (retval)
340 pr_debug("device: '%s': %s: bus uevent() returned %d\n",
341 dev_name(dev), __func__, retval);
342 }
343
344
345 if (dev->class && dev->class->dev_uevent) {
346 retval = dev->class->dev_uevent(dev, env);
347 if (retval)
348 pr_debug("device: '%s': %s: class uevent() "
349 "returned %d\n", dev_name(dev),
350 __func__, retval);
351 }
352
353
354 if (dev->type && dev->type->uevent) {
355 retval = dev->type->uevent(dev, env);
356 if (retval)
357 pr_debug("device: '%s': %s: dev_type uevent() "
358 "returned %d\n", dev_name(dev),
359 __func__, retval);
360 }
361
362 return retval;
363}
364
365static const struct kset_uevent_ops device_uevent_ops = {
366 .filter = dev_uevent_filter,
367 .name = dev_uevent_name,
368 .uevent = dev_uevent,
369};
370
371static ssize_t uevent_show(struct device *dev, struct device_attribute *attr,
372 char *buf)
373{
374 struct kobject *top_kobj;
375 struct kset *kset;
376 struct kobj_uevent_env *env = NULL;
377 int i;
378 size_t count = 0;
379 int retval;
380
381
382 top_kobj = &dev->kobj;
383 while (!top_kobj->kset && top_kobj->parent)
384 top_kobj = top_kobj->parent;
385 if (!top_kobj->kset)
386 goto out;
387
388 kset = top_kobj->kset;
389 if (!kset->uevent_ops || !kset->uevent_ops->uevent)
390 goto out;
391
392
393 if (kset->uevent_ops && kset->uevent_ops->filter)
394 if (!kset->uevent_ops->filter(kset, &dev->kobj))
395 goto out;
396
397 env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);
398 if (!env)
399 return -ENOMEM;
400
401
402 retval = kset->uevent_ops->uevent(kset, &dev->kobj, env);
403 if (retval)
404 goto out;
405
406
407 for (i = 0; i < env->envp_idx; i++)
408 count += sprintf(&buf[count], "%s\n", env->envp[i]);
409out:
410 kfree(env);
411 return count;
412}
413
414static ssize_t uevent_store(struct device *dev, struct device_attribute *attr,
415 const char *buf, size_t count)
416{
417 enum kobject_action action;
418
419 if (kobject_action_type(buf, count, &action) == 0)
420 kobject_uevent(&dev->kobj, action);
421 else
422 dev_err(dev, "uevent: unknown action-string\n");
423 return count;
424}
425static DEVICE_ATTR_RW(uevent);
426
427static ssize_t online_show(struct device *dev, struct device_attribute *attr,
428 char *buf)
429{
430 bool val;
431
432 device_lock(dev);
433 val = !dev->offline;
434 device_unlock(dev);
435 return sprintf(buf, "%u\n", val);
436}
437
438static ssize_t online_store(struct device *dev, struct device_attribute *attr,
439 const char *buf, size_t count)
440{
441 bool val;
442 int ret;
443
444 ret = strtobool(buf, &val);
445 if (ret < 0)
446 return ret;
447
448 ret = lock_device_hotplug_sysfs();
449 if (ret)
450 return ret;
451
452 ret = val ? device_online(dev) : device_offline(dev);
453 unlock_device_hotplug();
454 return ret < 0 ? ret : count;
455}
456static DEVICE_ATTR_RW(online);
457
458int device_add_groups(struct device *dev, const struct attribute_group **groups)
459{
460 return sysfs_create_groups(&dev->kobj, groups);
461}
462
463void device_remove_groups(struct device *dev,
464 const struct attribute_group **groups)
465{
466 sysfs_remove_groups(&dev->kobj, groups);
467}
468
469static int device_add_attrs(struct device *dev)
470{
471 struct class *class = dev->class;
472 const struct device_type *type = dev->type;
473 int error;
474
475 if (class) {
476 error = device_add_groups(dev, class->dev_groups);
477 if (error)
478 return error;
479 }
480
481 if (type) {
482 error = device_add_groups(dev, type->groups);
483 if (error)
484 goto err_remove_class_groups;
485 }
486
487 error = device_add_groups(dev, dev->groups);
488 if (error)
489 goto err_remove_type_groups;
490
491 if (device_supports_offline(dev) && !dev->offline_disabled) {
492 error = device_create_file(dev, &dev_attr_online);
493 if (error)
494 goto err_remove_dev_groups;
495 }
496
497 return 0;
498
499 err_remove_dev_groups:
500 device_remove_groups(dev, dev->groups);
501 err_remove_type_groups:
502 if (type)
503 device_remove_groups(dev, type->groups);
504 err_remove_class_groups:
505 if (class)
506 device_remove_groups(dev, class->dev_groups);
507
508 return error;
509}
510
511static void device_remove_attrs(struct device *dev)
512{
513 struct class *class = dev->class;
514 const struct device_type *type = dev->type;
515
516 device_remove_file(dev, &dev_attr_online);
517 device_remove_groups(dev, dev->groups);
518
519 if (type)
520 device_remove_groups(dev, type->groups);
521
522 if (class)
523 device_remove_groups(dev, class->dev_groups);
524}
525
526static ssize_t dev_show(struct device *dev, struct device_attribute *attr,
527 char *buf)
528{
529 return print_dev_t(buf, dev->devt);
530}
531static DEVICE_ATTR_RO(dev);
532
533
534struct kset *devices_kset;
535
536
537
538
539
540
541static void devices_kset_move_before(struct device *deva, struct device *devb)
542{
543 if (!devices_kset)
544 return;
545 pr_debug("devices_kset: Moving %s before %s\n",
546 dev_name(deva), dev_name(devb));
547 spin_lock(&devices_kset->list_lock);
548 list_move_tail(&deva->kobj.entry, &devb->kobj.entry);
549 spin_unlock(&devices_kset->list_lock);
550}
551
552
553
554
555
556
557static void devices_kset_move_after(struct device *deva, struct device *devb)
558{
559 if (!devices_kset)
560 return;
561 pr_debug("devices_kset: Moving %s after %s\n",
562 dev_name(deva), dev_name(devb));
563 spin_lock(&devices_kset->list_lock);
564 list_move(&deva->kobj.entry, &devb->kobj.entry);
565 spin_unlock(&devices_kset->list_lock);
566}
567
568
569
570
571
572void devices_kset_move_last(struct device *dev)
573{
574 if (!devices_kset)
575 return;
576 pr_debug("devices_kset: Moving %s to end of list\n", dev_name(dev));
577 spin_lock(&devices_kset->list_lock);
578 list_move_tail(&dev->kobj.entry, &devices_kset->list);
579 spin_unlock(&devices_kset->list_lock);
580}
581
582
583
584
585
586
587int device_create_file(struct device *dev,
588 const struct device_attribute *attr)
589{
590 int error = 0;
591
592 if (dev) {
593 WARN(((attr->attr.mode & S_IWUGO) && !attr->store),
594 "Attribute %s: write permission without 'store'\n",
595 attr->attr.name);
596 WARN(((attr->attr.mode & S_IRUGO) && !attr->show),
597 "Attribute %s: read permission without 'show'\n",
598 attr->attr.name);
599 error = sysfs_create_file(&dev->kobj, &attr->attr);
600 }
601
602 return error;
603}
604EXPORT_SYMBOL_GPL(device_create_file);
605
606
607
608
609
610
611void device_remove_file(struct device *dev,
612 const struct device_attribute *attr)
613{
614 if (dev)
615 sysfs_remove_file(&dev->kobj, &attr->attr);
616}
617EXPORT_SYMBOL_GPL(device_remove_file);
618
619
620
621
622
623
624
625
626bool device_remove_file_self(struct device *dev,
627 const struct device_attribute *attr)
628{
629 if (dev)
630 return sysfs_remove_file_self(&dev->kobj, &attr->attr);
631 else
632 return false;
633}
634EXPORT_SYMBOL_GPL(device_remove_file_self);
635
636
637
638
639
640
641int device_create_bin_file(struct device *dev,
642 const struct bin_attribute *attr)
643{
644 int error = -EINVAL;
645 if (dev)
646 error = sysfs_create_bin_file(&dev->kobj, attr);
647 return error;
648}
649EXPORT_SYMBOL_GPL(device_create_bin_file);
650
651
652
653
654
655
656void device_remove_bin_file(struct device *dev,
657 const struct bin_attribute *attr)
658{
659 if (dev)
660 sysfs_remove_bin_file(&dev->kobj, attr);
661}
662EXPORT_SYMBOL_GPL(device_remove_bin_file);
663
664static void klist_children_get(struct klist_node *n)
665{
666 struct device_private *p = to_device_private_parent(n);
667 struct device *dev = p->device;
668
669 get_device(dev);
670}
671
672static void klist_children_put(struct klist_node *n)
673{
674 struct device_private *p = to_device_private_parent(n);
675 struct device *dev = p->device;
676
677 put_device(dev);
678}
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700void device_initialize(struct device *dev)
701{
702 dev->kobj.kset = devices_kset;
703 kobject_init(&dev->kobj, &device_ktype);
704 INIT_LIST_HEAD(&dev->dma_pools);
705 mutex_init(&dev->mutex);
706 lockdep_set_novalidate_class(&dev->mutex);
707 spin_lock_init(&dev->devres_lock);
708 INIT_LIST_HEAD(&dev->devres_head);
709 device_pm_init(dev);
710 set_dev_node(dev, -1);
711#ifdef CONFIG_GENERIC_MSI_IRQ
712 INIT_LIST_HEAD(&dev->msi_list);
713#endif
714}
715EXPORT_SYMBOL_GPL(device_initialize);
716
717struct kobject *virtual_device_parent(struct device *dev)
718{
719 static struct kobject *virtual_dir = NULL;
720
721 if (!virtual_dir)
722 virtual_dir = kobject_create_and_add("virtual",
723 &devices_kset->kobj);
724
725 return virtual_dir;
726}
727
728struct class_dir {
729 struct kobject kobj;
730 struct class *class;
731};
732
733#define to_class_dir(obj) container_of(obj, struct class_dir, kobj)
734
735static void class_dir_release(struct kobject *kobj)
736{
737 struct class_dir *dir = to_class_dir(kobj);
738 kfree(dir);
739}
740
741static const
742struct kobj_ns_type_operations *class_dir_child_ns_type(struct kobject *kobj)
743{
744 struct class_dir *dir = to_class_dir(kobj);
745 return dir->class->ns_type;
746}
747
748static struct kobj_type class_dir_ktype = {
749 .release = class_dir_release,
750 .sysfs_ops = &kobj_sysfs_ops,
751 .child_ns_type = class_dir_child_ns_type
752};
753
754static struct kobject *
755class_dir_create_and_add(struct class *class, struct kobject *parent_kobj)
756{
757 struct class_dir *dir;
758 int retval;
759
760 dir = kzalloc(sizeof(*dir), GFP_KERNEL);
761 if (!dir)
762 return NULL;
763
764 dir->class = class;
765 kobject_init(&dir->kobj, &class_dir_ktype);
766
767 dir->kobj.kset = &class->p->glue_dirs;
768
769 retval = kobject_add(&dir->kobj, parent_kobj, "%s", class->name);
770 if (retval < 0) {
771 kobject_put(&dir->kobj);
772 return NULL;
773 }
774 return &dir->kobj;
775}
776
777static DEFINE_MUTEX(gdp_mutex);
778
779static struct kobject *get_device_parent(struct device *dev,
780 struct device *parent)
781{
782 if (dev->class) {
783 struct kobject *kobj = NULL;
784 struct kobject *parent_kobj;
785 struct kobject *k;
786
787#ifdef CONFIG_BLOCK
788
789 if (sysfs_deprecated && dev->class == &block_class) {
790 if (parent && parent->class == &block_class)
791 return &parent->kobj;
792 return &block_class.p->subsys.kobj;
793 }
794#endif
795
796
797
798
799
800
801 if (parent == NULL)
802 parent_kobj = virtual_device_parent(dev);
803 else if (parent->class && !dev->class->ns_type)
804 return &parent->kobj;
805 else
806 parent_kobj = &parent->kobj;
807
808 mutex_lock(&gdp_mutex);
809
810
811 spin_lock(&dev->class->p->glue_dirs.list_lock);
812 list_for_each_entry(k, &dev->class->p->glue_dirs.list, entry)
813 if (k->parent == parent_kobj) {
814 kobj = kobject_get(k);
815 break;
816 }
817 spin_unlock(&dev->class->p->glue_dirs.list_lock);
818 if (kobj) {
819 mutex_unlock(&gdp_mutex);
820 return kobj;
821 }
822
823
824 k = class_dir_create_and_add(dev->class, parent_kobj);
825
826 mutex_unlock(&gdp_mutex);
827 return k;
828 }
829
830
831 if (!parent && dev->bus && dev->bus->dev_root)
832 return &dev->bus->dev_root->kobj;
833
834 if (parent)
835 return &parent->kobj;
836 return NULL;
837}
838
839static void cleanup_glue_dir(struct device *dev, struct kobject *glue_dir)
840{
841
842 if (!glue_dir || !dev->class ||
843 glue_dir->kset != &dev->class->p->glue_dirs)
844 return;
845
846 mutex_lock(&gdp_mutex);
847 kobject_put(glue_dir);
848 mutex_unlock(&gdp_mutex);
849}
850
851static void cleanup_device_parent(struct device *dev)
852{
853 cleanup_glue_dir(dev, dev->kobj.parent);
854}
855
856static int device_add_class_symlinks(struct device *dev)
857{
858 struct device_node *of_node = dev_of_node(dev);
859 int error;
860
861 if (of_node) {
862 error = sysfs_create_link(&dev->kobj, &of_node->kobj,"of_node");
863 if (error)
864 dev_warn(dev, "Error %d creating of_node link\n",error);
865
866 }
867
868 if (!dev->class)
869 return 0;
870
871 error = sysfs_create_link(&dev->kobj,
872 &dev->class->p->subsys.kobj,
873 "subsystem");
874 if (error)
875 goto out_devnode;
876
877 if (dev->parent && device_is_not_partition(dev)) {
878 error = sysfs_create_link(&dev->kobj, &dev->parent->kobj,
879 "device");
880 if (error)
881 goto out_subsys;
882 }
883
884#ifdef CONFIG_BLOCK
885
886 if (sysfs_deprecated && dev->class == &block_class)
887 return 0;
888#endif
889
890
891 error = sysfs_create_link(&dev->class->p->subsys.kobj,
892 &dev->kobj, dev_name(dev));
893 if (error)
894 goto out_device;
895
896 return 0;
897
898out_device:
899 sysfs_remove_link(&dev->kobj, "device");
900
901out_subsys:
902 sysfs_remove_link(&dev->kobj, "subsystem");
903out_devnode:
904 sysfs_remove_link(&dev->kobj, "of_node");
905 return error;
906}
907
908static void device_remove_class_symlinks(struct device *dev)
909{
910 if (dev_of_node(dev))
911 sysfs_remove_link(&dev->kobj, "of_node");
912
913 if (!dev->class)
914 return;
915
916 if (dev->parent && device_is_not_partition(dev))
917 sysfs_remove_link(&dev->kobj, "device");
918 sysfs_remove_link(&dev->kobj, "subsystem");
919#ifdef CONFIG_BLOCK
920 if (sysfs_deprecated && dev->class == &block_class)
921 return;
922#endif
923 sysfs_delete_link(&dev->class->p->subsys.kobj, &dev->kobj, dev_name(dev));
924}
925
926
927
928
929
930
931int dev_set_name(struct device *dev, const char *fmt, ...)
932{
933 va_list vargs;
934 int err;
935
936 va_start(vargs, fmt);
937 err = kobject_set_name_vargs(&dev->kobj, fmt, vargs);
938 va_end(vargs);
939 return err;
940}
941EXPORT_SYMBOL_GPL(dev_set_name);
942
943
944
945
946
947
948
949
950
951
952
953
954static struct kobject *device_to_dev_kobj(struct device *dev)
955{
956 struct kobject *kobj;
957
958 if (dev->class)
959 kobj = dev->class->dev_kobj;
960 else
961 kobj = sysfs_dev_char_kobj;
962
963 return kobj;
964}
965
966static int device_create_sys_dev_entry(struct device *dev)
967{
968 struct kobject *kobj = device_to_dev_kobj(dev);
969 int error = 0;
970 char devt_str[15];
971
972 if (kobj) {
973 format_dev_t(devt_str, dev->devt);
974 error = sysfs_create_link(kobj, &dev->kobj, devt_str);
975 }
976
977 return error;
978}
979
980static void device_remove_sys_dev_entry(struct device *dev)
981{
982 struct kobject *kobj = device_to_dev_kobj(dev);
983 char devt_str[15];
984
985 if (kobj) {
986 format_dev_t(devt_str, dev->devt);
987 sysfs_remove_link(kobj, devt_str);
988 }
989}
990
991int device_private_init(struct device *dev)
992{
993 dev->p = kzalloc(sizeof(*dev->p), GFP_KERNEL);
994 if (!dev->p)
995 return -ENOMEM;
996 dev->p->device = dev;
997 klist_init(&dev->p->klist_children, klist_children_get,
998 klist_children_put);
999 INIT_LIST_HEAD(&dev->p->deferred_probe);
1000 return 0;
1001}
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025int device_add(struct device *dev)
1026{
1027 struct device *parent = NULL;
1028 struct kobject *kobj;
1029 struct class_interface *class_intf;
1030 int error = -EINVAL;
1031
1032 dev = get_device(dev);
1033 if (!dev)
1034 goto done;
1035
1036 if (!dev->p) {
1037 error = device_private_init(dev);
1038 if (error)
1039 goto done;
1040 }
1041
1042
1043
1044
1045
1046
1047 if (dev->init_name) {
1048 dev_set_name(dev, "%s", dev->init_name);
1049 dev->init_name = NULL;
1050 }
1051
1052
1053 if (!dev_name(dev) && dev->bus && dev->bus->dev_name)
1054 dev_set_name(dev, "%s%u", dev->bus->dev_name, dev->id);
1055
1056 if (!dev_name(dev)) {
1057 error = -EINVAL;
1058 goto name_error;
1059 }
1060
1061 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
1062
1063 parent = get_device(dev->parent);
1064 kobj = get_device_parent(dev, parent);
1065 if (kobj)
1066 dev->kobj.parent = kobj;
1067
1068
1069 if (parent && (dev_to_node(dev) == NUMA_NO_NODE))
1070 set_dev_node(dev, dev_to_node(parent));
1071
1072
1073
1074 error = kobject_add(&dev->kobj, dev->kobj.parent, NULL);
1075 if (error)
1076 goto Error;
1077
1078
1079 if (platform_notify)
1080 platform_notify(dev);
1081
1082 error = device_create_file(dev, &dev_attr_uevent);
1083 if (error)
1084 goto attrError;
1085
1086 error = device_add_class_symlinks(dev);
1087 if (error)
1088 goto SymlinkError;
1089 error = device_add_attrs(dev);
1090 if (error)
1091 goto AttrsError;
1092 error = bus_add_device(dev);
1093 if (error)
1094 goto BusError;
1095 error = dpm_sysfs_add(dev);
1096 if (error)
1097 goto DPMError;
1098 device_pm_add(dev);
1099
1100 if (MAJOR(dev->devt)) {
1101 error = device_create_file(dev, &dev_attr_dev);
1102 if (error)
1103 goto DevAttrError;
1104
1105 error = device_create_sys_dev_entry(dev);
1106 if (error)
1107 goto SysEntryError;
1108
1109 devtmpfs_create_node(dev);
1110 }
1111
1112
1113
1114
1115 if (dev->bus)
1116 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
1117 BUS_NOTIFY_ADD_DEVICE, dev);
1118
1119 kobject_uevent(&dev->kobj, KOBJ_ADD);
1120 bus_probe_device(dev);
1121 if (parent)
1122 klist_add_tail(&dev->p->knode_parent,
1123 &parent->p->klist_children);
1124
1125 if (dev->class) {
1126 mutex_lock(&dev->class->p->mutex);
1127
1128 klist_add_tail(&dev->knode_class,
1129 &dev->class->p->klist_devices);
1130
1131
1132 list_for_each_entry(class_intf,
1133 &dev->class->p->interfaces, node)
1134 if (class_intf->add_dev)
1135 class_intf->add_dev(dev, class_intf);
1136 mutex_unlock(&dev->class->p->mutex);
1137 }
1138done:
1139 put_device(dev);
1140 return error;
1141 SysEntryError:
1142 if (MAJOR(dev->devt))
1143 device_remove_file(dev, &dev_attr_dev);
1144 DevAttrError:
1145 device_pm_remove(dev);
1146 dpm_sysfs_remove(dev);
1147 DPMError:
1148 bus_remove_device(dev);
1149 BusError:
1150 device_remove_attrs(dev);
1151 AttrsError:
1152 device_remove_class_symlinks(dev);
1153 SymlinkError:
1154 device_remove_file(dev, &dev_attr_uevent);
1155 attrError:
1156 kobject_uevent(&dev->kobj, KOBJ_REMOVE);
1157 kobject_del(&dev->kobj);
1158 Error:
1159 cleanup_device_parent(dev);
1160 put_device(parent);
1161name_error:
1162 kfree(dev->p);
1163 dev->p = NULL;
1164 goto done;
1165}
1166EXPORT_SYMBOL_GPL(device_add);
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186int device_register(struct device *dev)
1187{
1188 device_initialize(dev);
1189 return device_add(dev);
1190}
1191EXPORT_SYMBOL_GPL(device_register);
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201struct device *get_device(struct device *dev)
1202{
1203 return dev ? kobj_to_dev(kobject_get(&dev->kobj)) : NULL;
1204}
1205EXPORT_SYMBOL_GPL(get_device);
1206
1207
1208
1209
1210
1211void put_device(struct device *dev)
1212{
1213
1214 if (dev)
1215 kobject_put(&dev->kobj);
1216}
1217EXPORT_SYMBOL_GPL(put_device);
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232void device_del(struct device *dev)
1233{
1234 struct device *parent = dev->parent;
1235 struct class_interface *class_intf;
1236
1237
1238
1239
1240 if (dev->bus)
1241 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
1242 BUS_NOTIFY_DEL_DEVICE, dev);
1243 dpm_sysfs_remove(dev);
1244 if (parent)
1245 klist_del(&dev->p->knode_parent);
1246 if (MAJOR(dev->devt)) {
1247 devtmpfs_delete_node(dev);
1248 device_remove_sys_dev_entry(dev);
1249 device_remove_file(dev, &dev_attr_dev);
1250 }
1251 if (dev->class) {
1252 device_remove_class_symlinks(dev);
1253
1254 mutex_lock(&dev->class->p->mutex);
1255
1256 list_for_each_entry(class_intf,
1257 &dev->class->p->interfaces, node)
1258 if (class_intf->remove_dev)
1259 class_intf->remove_dev(dev, class_intf);
1260
1261 klist_del(&dev->knode_class);
1262 mutex_unlock(&dev->class->p->mutex);
1263 }
1264 device_remove_file(dev, &dev_attr_uevent);
1265 device_remove_attrs(dev);
1266 bus_remove_device(dev);
1267 device_pm_remove(dev);
1268 driver_deferred_probe_del(dev);
1269
1270
1271
1272
1273 if (platform_notify_remove)
1274 platform_notify_remove(dev);
1275 if (dev->bus)
1276 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
1277 BUS_NOTIFY_REMOVED_DEVICE, dev);
1278 kobject_uevent(&dev->kobj, KOBJ_REMOVE);
1279 cleanup_device_parent(dev);
1280 kobject_del(&dev->kobj);
1281 put_device(parent);
1282}
1283EXPORT_SYMBOL_GPL(device_del);
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296void device_unregister(struct device *dev)
1297{
1298 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
1299 device_del(dev);
1300 put_device(dev);
1301}
1302EXPORT_SYMBOL_GPL(device_unregister);
1303
1304static struct device *prev_device(struct klist_iter *i)
1305{
1306 struct klist_node *n = klist_prev(i);
1307 struct device *dev = NULL;
1308 struct device_private *p;
1309
1310 if (n) {
1311 p = to_device_private_parent(n);
1312 dev = p->device;
1313 }
1314 return dev;
1315}
1316
1317static struct device *next_device(struct klist_iter *i)
1318{
1319 struct klist_node *n = klist_next(i);
1320 struct device *dev = NULL;
1321 struct device_private *p;
1322
1323 if (n) {
1324 p = to_device_private_parent(n);
1325 dev = p->device;
1326 }
1327 return dev;
1328}
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343const char *device_get_devnode(struct device *dev,
1344 umode_t *mode, kuid_t *uid, kgid_t *gid,
1345 const char **tmp)
1346{
1347 char *s;
1348
1349 *tmp = NULL;
1350
1351
1352 if (dev->type && dev->type->devnode)
1353 *tmp = dev->type->devnode(dev, mode, uid, gid);
1354 if (*tmp)
1355 return *tmp;
1356
1357
1358 if (dev->class && dev->class->devnode)
1359 *tmp = dev->class->devnode(dev, mode);
1360 if (*tmp)
1361 return *tmp;
1362
1363
1364 if (strchr(dev_name(dev), '!') == NULL)
1365 return dev_name(dev);
1366
1367
1368 s = kstrdup(dev_name(dev), GFP_KERNEL);
1369 if (!s)
1370 return NULL;
1371 strreplace(s, '!', '/');
1372 return *tmp = s;
1373}
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387int device_for_each_child(struct device *parent, void *data,
1388 int (*fn)(struct device *dev, void *data))
1389{
1390 struct klist_iter i;
1391 struct device *child;
1392 int error = 0;
1393
1394 if (!parent->p)
1395 return 0;
1396
1397 klist_iter_init(&parent->p->klist_children, &i);
1398 while ((child = next_device(&i)) && !error)
1399 error = fn(child, data);
1400 klist_iter_exit(&i);
1401 return error;
1402}
1403EXPORT_SYMBOL_GPL(device_for_each_child);
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417int device_for_each_child_reverse(struct device *parent, void *data,
1418 int (*fn)(struct device *dev, void *data))
1419{
1420 struct klist_iter i;
1421 struct device *child;
1422 int error = 0;
1423
1424 if (!parent->p)
1425 return 0;
1426
1427 klist_iter_init(&parent->p->klist_children, &i);
1428 while ((child = prev_device(&i)) && !error)
1429 error = fn(child, data);
1430 klist_iter_exit(&i);
1431 return error;
1432}
1433EXPORT_SYMBOL_GPL(device_for_each_child_reverse);
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452struct device *device_find_child(struct device *parent, void *data,
1453 int (*match)(struct device *dev, void *data))
1454{
1455 struct klist_iter i;
1456 struct device *child;
1457
1458 if (!parent)
1459 return NULL;
1460
1461 klist_iter_init(&parent->p->klist_children, &i);
1462 while ((child = next_device(&i)))
1463 if (match(child, data) && get_device(child))
1464 break;
1465 klist_iter_exit(&i);
1466 return child;
1467}
1468EXPORT_SYMBOL_GPL(device_find_child);
1469
1470int __init devices_init(void)
1471{
1472 devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);
1473 if (!devices_kset)
1474 return -ENOMEM;
1475 dev_kobj = kobject_create_and_add("dev", NULL);
1476 if (!dev_kobj)
1477 goto dev_kobj_err;
1478 sysfs_dev_block_kobj = kobject_create_and_add("block", dev_kobj);
1479 if (!sysfs_dev_block_kobj)
1480 goto block_kobj_err;
1481 sysfs_dev_char_kobj = kobject_create_and_add("char", dev_kobj);
1482 if (!sysfs_dev_char_kobj)
1483 goto char_kobj_err;
1484
1485 return 0;
1486
1487 char_kobj_err:
1488 kobject_put(sysfs_dev_block_kobj);
1489 block_kobj_err:
1490 kobject_put(dev_kobj);
1491 dev_kobj_err:
1492 kset_unregister(devices_kset);
1493 return -ENOMEM;
1494}
1495
1496static int device_check_offline(struct device *dev, void *not_used)
1497{
1498 int ret;
1499
1500 ret = device_for_each_child(dev, NULL, device_check_offline);
1501 if (ret)
1502 return ret;
1503
1504 return device_supports_offline(dev) && !dev->offline ? -EBUSY : 0;
1505}
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518int device_offline(struct device *dev)
1519{
1520 int ret;
1521
1522 if (dev->offline_disabled)
1523 return -EPERM;
1524
1525 ret = device_for_each_child(dev, NULL, device_check_offline);
1526 if (ret)
1527 return ret;
1528
1529 device_lock(dev);
1530 if (device_supports_offline(dev)) {
1531 if (dev->offline) {
1532 ret = 1;
1533 } else {
1534 ret = dev->bus->offline(dev);
1535 if (!ret) {
1536 kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
1537 dev->offline = true;
1538 }
1539 }
1540 }
1541 device_unlock(dev);
1542
1543 return ret;
1544}
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556int device_online(struct device *dev)
1557{
1558 int ret = 0;
1559
1560 device_lock(dev);
1561 if (device_supports_offline(dev)) {
1562 if (dev->offline) {
1563 ret = dev->bus->online(dev);
1564 if (!ret) {
1565 kobject_uevent(&dev->kobj, KOBJ_ONLINE);
1566 dev->offline = false;
1567 }
1568 } else {
1569 ret = 1;
1570 }
1571 }
1572 device_unlock(dev);
1573
1574 return ret;
1575}
1576
1577struct root_device {
1578 struct device dev;
1579 struct module *owner;
1580};
1581
1582static inline struct root_device *to_root_device(struct device *d)
1583{
1584 return container_of(d, struct root_device, dev);
1585}
1586
1587static void root_device_release(struct device *dev)
1588{
1589 kfree(to_root_device(dev));
1590}
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614struct device *__root_device_register(const char *name, struct module *owner)
1615{
1616 struct root_device *root;
1617 int err = -ENOMEM;
1618
1619 root = kzalloc(sizeof(struct root_device), GFP_KERNEL);
1620 if (!root)
1621 return ERR_PTR(err);
1622
1623 err = dev_set_name(&root->dev, "%s", name);
1624 if (err) {
1625 kfree(root);
1626 return ERR_PTR(err);
1627 }
1628
1629 root->dev.release = root_device_release;
1630
1631 err = device_register(&root->dev);
1632 if (err) {
1633 put_device(&root->dev);
1634 return ERR_PTR(err);
1635 }
1636
1637#ifdef CONFIG_MODULES
1638 if (owner) {
1639 struct module_kobject *mk = &owner->mkobj;
1640
1641 err = sysfs_create_link(&root->dev.kobj, &mk->kobj, "module");
1642 if (err) {
1643 device_unregister(&root->dev);
1644 return ERR_PTR(err);
1645 }
1646 root->owner = owner;
1647 }
1648#endif
1649
1650 return &root->dev;
1651}
1652EXPORT_SYMBOL_GPL(__root_device_register);
1653
1654
1655
1656
1657
1658
1659
1660
1661void root_device_unregister(struct device *dev)
1662{
1663 struct root_device *root = to_root_device(dev);
1664
1665 if (root->owner)
1666 sysfs_remove_link(&root->dev.kobj, "module");
1667
1668 device_unregister(dev);
1669}
1670EXPORT_SYMBOL_GPL(root_device_unregister);
1671
1672
1673static void device_create_release(struct device *dev)
1674{
1675 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
1676 kfree(dev);
1677}
1678
1679static struct device *
1680device_create_groups_vargs(struct class *class, struct device *parent,
1681 dev_t devt, void *drvdata,
1682 const struct attribute_group **groups,
1683 const char *fmt, va_list args)
1684{
1685 struct device *dev = NULL;
1686 int retval = -ENODEV;
1687
1688 if (class == NULL || IS_ERR(class))
1689 goto error;
1690
1691 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1692 if (!dev) {
1693 retval = -ENOMEM;
1694 goto error;
1695 }
1696
1697 device_initialize(dev);
1698 dev->devt = devt;
1699 dev->class = class;
1700 dev->parent = parent;
1701 dev->groups = groups;
1702 dev->release = device_create_release;
1703 dev_set_drvdata(dev, drvdata);
1704
1705 retval = kobject_set_name_vargs(&dev->kobj, fmt, args);
1706 if (retval)
1707 goto error;
1708
1709 retval = device_add(dev);
1710 if (retval)
1711 goto error;
1712
1713 return dev;
1714
1715error:
1716 put_device(dev);
1717 return ERR_PTR(retval);
1718}
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745struct device *device_create_vargs(struct class *class, struct device *parent,
1746 dev_t devt, void *drvdata, const char *fmt,
1747 va_list args)
1748{
1749 return device_create_groups_vargs(class, parent, devt, drvdata, NULL,
1750 fmt, args);
1751}
1752EXPORT_SYMBOL_GPL(device_create_vargs);
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778struct device *device_create(struct class *class, struct device *parent,
1779 dev_t devt, void *drvdata, const char *fmt, ...)
1780{
1781 va_list vargs;
1782 struct device *dev;
1783
1784 va_start(vargs, fmt);
1785 dev = device_create_vargs(class, parent, devt, drvdata, fmt, vargs);
1786 va_end(vargs);
1787 return dev;
1788}
1789EXPORT_SYMBOL_GPL(device_create);
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818struct device *device_create_with_groups(struct class *class,
1819 struct device *parent, dev_t devt,
1820 void *drvdata,
1821 const struct attribute_group **groups,
1822 const char *fmt, ...)
1823{
1824 va_list vargs;
1825 struct device *dev;
1826
1827 va_start(vargs, fmt);
1828 dev = device_create_groups_vargs(class, parent, devt, drvdata, groups,
1829 fmt, vargs);
1830 va_end(vargs);
1831 return dev;
1832}
1833EXPORT_SYMBOL_GPL(device_create_with_groups);
1834
1835static int __match_devt(struct device *dev, const void *data)
1836{
1837 const dev_t *devt = data;
1838
1839 return dev->devt == *devt;
1840}
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850void device_destroy(struct class *class, dev_t devt)
1851{
1852 struct device *dev;
1853
1854 dev = class_find_device(class, NULL, &devt, __match_devt);
1855 if (dev) {
1856 put_device(dev);
1857 device_unregister(dev);
1858 }
1859}
1860EXPORT_SYMBOL_GPL(device_destroy);
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901int device_rename(struct device *dev, const char *new_name)
1902{
1903 struct kobject *kobj = &dev->kobj;
1904 char *old_device_name = NULL;
1905 int error;
1906
1907 dev = get_device(dev);
1908 if (!dev)
1909 return -EINVAL;
1910
1911 dev_dbg(dev, "renaming to %s\n", new_name);
1912
1913 old_device_name = kstrdup(dev_name(dev), GFP_KERNEL);
1914 if (!old_device_name) {
1915 error = -ENOMEM;
1916 goto out;
1917 }
1918
1919 if (dev->class) {
1920 error = sysfs_rename_link_ns(&dev->class->p->subsys.kobj,
1921 kobj, old_device_name,
1922 new_name, kobject_namespace(kobj));
1923 if (error)
1924 goto out;
1925 }
1926
1927 error = kobject_rename(kobj, new_name);
1928 if (error)
1929 goto out;
1930
1931out:
1932 put_device(dev);
1933
1934 kfree(old_device_name);
1935
1936 return error;
1937}
1938EXPORT_SYMBOL_GPL(device_rename);
1939
1940static int device_move_class_links(struct device *dev,
1941 struct device *old_parent,
1942 struct device *new_parent)
1943{
1944 int error = 0;
1945
1946 if (old_parent)
1947 sysfs_remove_link(&dev->kobj, "device");
1948 if (new_parent)
1949 error = sysfs_create_link(&dev->kobj, &new_parent->kobj,
1950 "device");
1951 return error;
1952}
1953
1954
1955
1956
1957
1958
1959
1960int device_move(struct device *dev, struct device *new_parent,
1961 enum dpm_order dpm_order)
1962{
1963 int error;
1964 struct device *old_parent;
1965 struct kobject *new_parent_kobj;
1966
1967 dev = get_device(dev);
1968 if (!dev)
1969 return -EINVAL;
1970
1971 device_pm_lock();
1972 new_parent = get_device(new_parent);
1973 new_parent_kobj = get_device_parent(dev, new_parent);
1974
1975 pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev),
1976 __func__, new_parent ? dev_name(new_parent) : "<NULL>");
1977 error = kobject_move(&dev->kobj, new_parent_kobj);
1978 if (error) {
1979 cleanup_glue_dir(dev, new_parent_kobj);
1980 put_device(new_parent);
1981 goto out;
1982 }
1983 old_parent = dev->parent;
1984 dev->parent = new_parent;
1985 if (old_parent)
1986 klist_remove(&dev->p->knode_parent);
1987 if (new_parent) {
1988 klist_add_tail(&dev->p->knode_parent,
1989 &new_parent->p->klist_children);
1990 set_dev_node(dev, dev_to_node(new_parent));
1991 }
1992
1993 if (dev->class) {
1994 error = device_move_class_links(dev, old_parent, new_parent);
1995 if (error) {
1996
1997 device_move_class_links(dev, new_parent, old_parent);
1998 if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
1999 if (new_parent)
2000 klist_remove(&dev->p->knode_parent);
2001 dev->parent = old_parent;
2002 if (old_parent) {
2003 klist_add_tail(&dev->p->knode_parent,
2004 &old_parent->p->klist_children);
2005 set_dev_node(dev, dev_to_node(old_parent));
2006 }
2007 }
2008 cleanup_glue_dir(dev, new_parent_kobj);
2009 put_device(new_parent);
2010 goto out;
2011 }
2012 }
2013 switch (dpm_order) {
2014 case DPM_ORDER_NONE:
2015 break;
2016 case DPM_ORDER_DEV_AFTER_PARENT:
2017 device_pm_move_after(dev, new_parent);
2018 devices_kset_move_after(dev, new_parent);
2019 break;
2020 case DPM_ORDER_PARENT_BEFORE_DEV:
2021 device_pm_move_before(new_parent, dev);
2022 devices_kset_move_before(new_parent, dev);
2023 break;
2024 case DPM_ORDER_DEV_LAST:
2025 device_pm_move_last(dev);
2026 devices_kset_move_last(dev);
2027 break;
2028 }
2029
2030 put_device(old_parent);
2031out:
2032 device_pm_unlock();
2033 put_device(dev);
2034 return error;
2035}
2036EXPORT_SYMBOL_GPL(device_move);
2037
2038
2039
2040
2041void device_shutdown(void)
2042{
2043 struct device *dev, *parent;
2044
2045 spin_lock(&devices_kset->list_lock);
2046
2047
2048
2049
2050
2051 while (!list_empty(&devices_kset->list)) {
2052 dev = list_entry(devices_kset->list.prev, struct device,
2053 kobj.entry);
2054
2055
2056
2057
2058
2059
2060 parent = get_device(dev->parent);
2061 get_device(dev);
2062
2063
2064
2065
2066 list_del_init(&dev->kobj.entry);
2067 spin_unlock(&devices_kset->list_lock);
2068
2069
2070 if (parent)
2071 device_lock(parent);
2072 device_lock(dev);
2073
2074
2075 pm_runtime_get_noresume(dev);
2076 pm_runtime_barrier(dev);
2077
2078 if (dev->bus && dev->bus->shutdown) {
2079 if (initcall_debug)
2080 dev_info(dev, "shutdown\n");
2081 dev->bus->shutdown(dev);
2082 } else if (dev->driver && dev->driver->shutdown) {
2083 if (initcall_debug)
2084 dev_info(dev, "shutdown\n");
2085 dev->driver->shutdown(dev);
2086 }
2087
2088 device_unlock(dev);
2089 if (parent)
2090 device_unlock(parent);
2091
2092 put_device(dev);
2093 put_device(parent);
2094
2095 spin_lock(&devices_kset->list_lock);
2096 }
2097 spin_unlock(&devices_kset->list_lock);
2098}
2099
2100
2101
2102
2103
2104#ifdef CONFIG_PRINTK
2105static int
2106create_syslog_header(const struct device *dev, char *hdr, size_t hdrlen)
2107{
2108 const char *subsys;
2109 size_t pos = 0;
2110
2111 if (dev->class)
2112 subsys = dev->class->name;
2113 else if (dev->bus)
2114 subsys = dev->bus->name;
2115 else
2116 return 0;
2117
2118 pos += snprintf(hdr + pos, hdrlen - pos, "SUBSYSTEM=%s", subsys);
2119 if (pos >= hdrlen)
2120 goto overflow;
2121
2122
2123
2124
2125
2126
2127
2128
2129 if (MAJOR(dev->devt)) {
2130 char c;
2131
2132 if (strcmp(subsys, "block") == 0)
2133 c = 'b';
2134 else
2135 c = 'c';
2136 pos++;
2137 pos += snprintf(hdr + pos, hdrlen - pos,
2138 "DEVICE=%c%u:%u",
2139 c, MAJOR(dev->devt), MINOR(dev->devt));
2140 } else if (strcmp(subsys, "net") == 0) {
2141 struct net_device *net = to_net_dev(dev);
2142
2143 pos++;
2144 pos += snprintf(hdr + pos, hdrlen - pos,
2145 "DEVICE=n%u", net->ifindex);
2146 } else {
2147 pos++;
2148 pos += snprintf(hdr + pos, hdrlen - pos,
2149 "DEVICE=+%s:%s", subsys, dev_name(dev));
2150 }
2151
2152 if (pos >= hdrlen)
2153 goto overflow;
2154
2155 return pos;
2156
2157overflow:
2158 dev_WARN(dev, "device/subsystem name too long");
2159 return 0;
2160}
2161
2162int dev_vprintk_emit(int level, const struct device *dev,
2163 const char *fmt, va_list args)
2164{
2165 char hdr[128];
2166 size_t hdrlen;
2167
2168 hdrlen = create_syslog_header(dev, hdr, sizeof(hdr));
2169
2170 return vprintk_emit(0, level, hdrlen ? hdr : NULL, hdrlen, fmt, args);
2171}
2172EXPORT_SYMBOL(dev_vprintk_emit);
2173
2174int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...)
2175{
2176 va_list args;
2177 int r;
2178
2179 va_start(args, fmt);
2180
2181 r = dev_vprintk_emit(level, dev, fmt, args);
2182
2183 va_end(args);
2184
2185 return r;
2186}
2187EXPORT_SYMBOL(dev_printk_emit);
2188
2189static void __dev_printk(const char *level, const struct device *dev,
2190 struct va_format *vaf)
2191{
2192 if (dev)
2193 dev_printk_emit(level[1] - '0', dev, "%s %s: %pV",
2194 dev_driver_string(dev), dev_name(dev), vaf);
2195 else
2196 printk("%s(NULL device *): %pV", level, vaf);
2197}
2198
2199void dev_printk(const char *level, const struct device *dev,
2200 const char *fmt, ...)
2201{
2202 struct va_format vaf;
2203 va_list args;
2204
2205 va_start(args, fmt);
2206
2207 vaf.fmt = fmt;
2208 vaf.va = &args;
2209
2210 __dev_printk(level, dev, &vaf);
2211
2212 va_end(args);
2213}
2214EXPORT_SYMBOL(dev_printk);
2215
2216#define define_dev_printk_level(func, kern_level) \
2217void func(const struct device *dev, const char *fmt, ...) \
2218{ \
2219 struct va_format vaf; \
2220 va_list args; \
2221 \
2222 va_start(args, fmt); \
2223 \
2224 vaf.fmt = fmt; \
2225 vaf.va = &args; \
2226 \
2227 __dev_printk(kern_level, dev, &vaf); \
2228 \
2229 va_end(args); \
2230} \
2231EXPORT_SYMBOL(func);
2232
2233define_dev_printk_level(dev_emerg, KERN_EMERG);
2234define_dev_printk_level(dev_alert, KERN_ALERT);
2235define_dev_printk_level(dev_crit, KERN_CRIT);
2236define_dev_printk_level(dev_err, KERN_ERR);
2237define_dev_printk_level(dev_warn, KERN_WARNING);
2238define_dev_printk_level(dev_notice, KERN_NOTICE);
2239define_dev_printk_level(_dev_info, KERN_INFO);
2240
2241#endif
2242
2243static inline bool fwnode_is_primary(struct fwnode_handle *fwnode)
2244{
2245 return fwnode && !IS_ERR(fwnode->secondary);
2246}
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)
2257{
2258 if (fwnode) {
2259 struct fwnode_handle *fn = dev->fwnode;
2260
2261 if (fwnode_is_primary(fn))
2262 fn = fn->secondary;
2263
2264 if (fn) {
2265 WARN_ON(fwnode->secondary);
2266 fwnode->secondary = fn;
2267 }
2268 dev->fwnode = fwnode;
2269 } else {
2270 dev->fwnode = fwnode_is_primary(dev->fwnode) ?
2271 dev->fwnode->secondary : NULL;
2272 }
2273}
2274EXPORT_SYMBOL_GPL(set_primary_fwnode);
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode)
2286{
2287 if (fwnode)
2288 fwnode->secondary = ERR_PTR(-ENODEV);
2289
2290 if (fwnode_is_primary(dev->fwnode))
2291 dev->fwnode->secondary = fwnode;
2292 else
2293 dev->fwnode = fwnode;
2294}
2295