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 inline bool live_in_glue_dir(struct kobject *kobj,
840 struct device *dev)
841{
842 if (!kobj || !dev->class ||
843 kobj->kset != &dev->class->p->glue_dirs)
844 return false;
845 return true;
846}
847
848static inline struct kobject *get_glue_dir(struct device *dev)
849{
850 return dev->kobj.parent;
851}
852
853
854
855
856
857
858static void cleanup_glue_dir(struct device *dev, struct kobject *glue_dir)
859{
860
861 if (!live_in_glue_dir(glue_dir, dev))
862 return;
863
864 mutex_lock(&gdp_mutex);
865 kobject_put(glue_dir);
866 mutex_unlock(&gdp_mutex);
867}
868
869static int device_add_class_symlinks(struct device *dev)
870{
871 struct device_node *of_node = dev_of_node(dev);
872 int error;
873
874 if (of_node) {
875 error = sysfs_create_link(&dev->kobj, &of_node->kobj,"of_node");
876 if (error)
877 dev_warn(dev, "Error %d creating of_node link\n",error);
878
879 }
880
881 if (!dev->class)
882 return 0;
883
884 error = sysfs_create_link(&dev->kobj,
885 &dev->class->p->subsys.kobj,
886 "subsystem");
887 if (error)
888 goto out_devnode;
889
890 if (dev->parent && device_is_not_partition(dev)) {
891 error = sysfs_create_link(&dev->kobj, &dev->parent->kobj,
892 "device");
893 if (error)
894 goto out_subsys;
895 }
896
897#ifdef CONFIG_BLOCK
898
899 if (sysfs_deprecated && dev->class == &block_class)
900 return 0;
901#endif
902
903
904 error = sysfs_create_link(&dev->class->p->subsys.kobj,
905 &dev->kobj, dev_name(dev));
906 if (error)
907 goto out_device;
908
909 return 0;
910
911out_device:
912 sysfs_remove_link(&dev->kobj, "device");
913
914out_subsys:
915 sysfs_remove_link(&dev->kobj, "subsystem");
916out_devnode:
917 sysfs_remove_link(&dev->kobj, "of_node");
918 return error;
919}
920
921static void device_remove_class_symlinks(struct device *dev)
922{
923 if (dev_of_node(dev))
924 sysfs_remove_link(&dev->kobj, "of_node");
925
926 if (!dev->class)
927 return;
928
929 if (dev->parent && device_is_not_partition(dev))
930 sysfs_remove_link(&dev->kobj, "device");
931 sysfs_remove_link(&dev->kobj, "subsystem");
932#ifdef CONFIG_BLOCK
933 if (sysfs_deprecated && dev->class == &block_class)
934 return;
935#endif
936 sysfs_delete_link(&dev->class->p->subsys.kobj, &dev->kobj, dev_name(dev));
937}
938
939
940
941
942
943
944int dev_set_name(struct device *dev, const char *fmt, ...)
945{
946 va_list vargs;
947 int err;
948
949 va_start(vargs, fmt);
950 err = kobject_set_name_vargs(&dev->kobj, fmt, vargs);
951 va_end(vargs);
952 return err;
953}
954EXPORT_SYMBOL_GPL(dev_set_name);
955
956
957
958
959
960
961
962
963
964
965
966
967static struct kobject *device_to_dev_kobj(struct device *dev)
968{
969 struct kobject *kobj;
970
971 if (dev->class)
972 kobj = dev->class->dev_kobj;
973 else
974 kobj = sysfs_dev_char_kobj;
975
976 return kobj;
977}
978
979static int device_create_sys_dev_entry(struct device *dev)
980{
981 struct kobject *kobj = device_to_dev_kobj(dev);
982 int error = 0;
983 char devt_str[15];
984
985 if (kobj) {
986 format_dev_t(devt_str, dev->devt);
987 error = sysfs_create_link(kobj, &dev->kobj, devt_str);
988 }
989
990 return error;
991}
992
993static void device_remove_sys_dev_entry(struct device *dev)
994{
995 struct kobject *kobj = device_to_dev_kobj(dev);
996 char devt_str[15];
997
998 if (kobj) {
999 format_dev_t(devt_str, dev->devt);
1000 sysfs_remove_link(kobj, devt_str);
1001 }
1002}
1003
1004int device_private_init(struct device *dev)
1005{
1006 dev->p = kzalloc(sizeof(*dev->p), GFP_KERNEL);
1007 if (!dev->p)
1008 return -ENOMEM;
1009 dev->p->device = dev;
1010 klist_init(&dev->p->klist_children, klist_children_get,
1011 klist_children_put);
1012 INIT_LIST_HEAD(&dev->p->deferred_probe);
1013 return 0;
1014}
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038int device_add(struct device *dev)
1039{
1040 struct device *parent = NULL;
1041 struct kobject *kobj;
1042 struct class_interface *class_intf;
1043 int error = -EINVAL;
1044 struct kobject *glue_dir = NULL;
1045
1046 dev = get_device(dev);
1047 if (!dev)
1048 goto done;
1049
1050 if (!dev->p) {
1051 error = device_private_init(dev);
1052 if (error)
1053 goto done;
1054 }
1055
1056
1057
1058
1059
1060
1061 if (dev->init_name) {
1062 dev_set_name(dev, "%s", dev->init_name);
1063 dev->init_name = NULL;
1064 }
1065
1066
1067 if (!dev_name(dev) && dev->bus && dev->bus->dev_name)
1068 dev_set_name(dev, "%s%u", dev->bus->dev_name, dev->id);
1069
1070 if (!dev_name(dev)) {
1071 error = -EINVAL;
1072 goto name_error;
1073 }
1074
1075 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
1076
1077 parent = get_device(dev->parent);
1078 kobj = get_device_parent(dev, parent);
1079 if (kobj)
1080 dev->kobj.parent = kobj;
1081
1082
1083 if (parent && (dev_to_node(dev) == NUMA_NO_NODE))
1084 set_dev_node(dev, dev_to_node(parent));
1085
1086
1087
1088 error = kobject_add(&dev->kobj, dev->kobj.parent, NULL);
1089 if (error) {
1090 glue_dir = get_glue_dir(dev);
1091 goto Error;
1092 }
1093
1094
1095 if (platform_notify)
1096 platform_notify(dev);
1097
1098 error = device_create_file(dev, &dev_attr_uevent);
1099 if (error)
1100 goto attrError;
1101
1102 error = device_add_class_symlinks(dev);
1103 if (error)
1104 goto SymlinkError;
1105 error = device_add_attrs(dev);
1106 if (error)
1107 goto AttrsError;
1108 error = bus_add_device(dev);
1109 if (error)
1110 goto BusError;
1111 error = dpm_sysfs_add(dev);
1112 if (error)
1113 goto DPMError;
1114 device_pm_add(dev);
1115
1116 if (MAJOR(dev->devt)) {
1117 error = device_create_file(dev, &dev_attr_dev);
1118 if (error)
1119 goto DevAttrError;
1120
1121 error = device_create_sys_dev_entry(dev);
1122 if (error)
1123 goto SysEntryError;
1124
1125 devtmpfs_create_node(dev);
1126 }
1127
1128
1129
1130
1131 if (dev->bus)
1132 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
1133 BUS_NOTIFY_ADD_DEVICE, dev);
1134
1135 kobject_uevent(&dev->kobj, KOBJ_ADD);
1136 bus_probe_device(dev);
1137 if (parent)
1138 klist_add_tail(&dev->p->knode_parent,
1139 &parent->p->klist_children);
1140
1141 if (dev->class) {
1142 mutex_lock(&dev->class->p->mutex);
1143
1144 klist_add_tail(&dev->knode_class,
1145 &dev->class->p->klist_devices);
1146
1147
1148 list_for_each_entry(class_intf,
1149 &dev->class->p->interfaces, node)
1150 if (class_intf->add_dev)
1151 class_intf->add_dev(dev, class_intf);
1152 mutex_unlock(&dev->class->p->mutex);
1153 }
1154done:
1155 put_device(dev);
1156 return error;
1157 SysEntryError:
1158 if (MAJOR(dev->devt))
1159 device_remove_file(dev, &dev_attr_dev);
1160 DevAttrError:
1161 device_pm_remove(dev);
1162 dpm_sysfs_remove(dev);
1163 DPMError:
1164 bus_remove_device(dev);
1165 BusError:
1166 device_remove_attrs(dev);
1167 AttrsError:
1168 device_remove_class_symlinks(dev);
1169 SymlinkError:
1170 device_remove_file(dev, &dev_attr_uevent);
1171 attrError:
1172 kobject_uevent(&dev->kobj, KOBJ_REMOVE);
1173 glue_dir = get_glue_dir(dev);
1174 kobject_del(&dev->kobj);
1175 Error:
1176 cleanup_glue_dir(dev, glue_dir);
1177 put_device(parent);
1178name_error:
1179 kfree(dev->p);
1180 dev->p = NULL;
1181 goto done;
1182}
1183EXPORT_SYMBOL_GPL(device_add);
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203int device_register(struct device *dev)
1204{
1205 device_initialize(dev);
1206 return device_add(dev);
1207}
1208EXPORT_SYMBOL_GPL(device_register);
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218struct device *get_device(struct device *dev)
1219{
1220 return dev ? kobj_to_dev(kobject_get(&dev->kobj)) : NULL;
1221}
1222EXPORT_SYMBOL_GPL(get_device);
1223
1224
1225
1226
1227
1228void put_device(struct device *dev)
1229{
1230
1231 if (dev)
1232 kobject_put(&dev->kobj);
1233}
1234EXPORT_SYMBOL_GPL(put_device);
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249void device_del(struct device *dev)
1250{
1251 struct device *parent = dev->parent;
1252 struct kobject *glue_dir = NULL;
1253 struct class_interface *class_intf;
1254
1255
1256
1257
1258 if (dev->bus)
1259 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
1260 BUS_NOTIFY_DEL_DEVICE, dev);
1261 dpm_sysfs_remove(dev);
1262 if (parent)
1263 klist_del(&dev->p->knode_parent);
1264 if (MAJOR(dev->devt)) {
1265 devtmpfs_delete_node(dev);
1266 device_remove_sys_dev_entry(dev);
1267 device_remove_file(dev, &dev_attr_dev);
1268 }
1269 if (dev->class) {
1270 device_remove_class_symlinks(dev);
1271
1272 mutex_lock(&dev->class->p->mutex);
1273
1274 list_for_each_entry(class_intf,
1275 &dev->class->p->interfaces, node)
1276 if (class_intf->remove_dev)
1277 class_intf->remove_dev(dev, class_intf);
1278
1279 klist_del(&dev->knode_class);
1280 mutex_unlock(&dev->class->p->mutex);
1281 }
1282 device_remove_file(dev, &dev_attr_uevent);
1283 device_remove_attrs(dev);
1284 bus_remove_device(dev);
1285 device_pm_remove(dev);
1286 driver_deferred_probe_del(dev);
1287 device_remove_properties(dev);
1288
1289
1290
1291
1292 if (platform_notify_remove)
1293 platform_notify_remove(dev);
1294 if (dev->bus)
1295 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
1296 BUS_NOTIFY_REMOVED_DEVICE, dev);
1297 kobject_uevent(&dev->kobj, KOBJ_REMOVE);
1298 glue_dir = get_glue_dir(dev);
1299 kobject_del(&dev->kobj);
1300 cleanup_glue_dir(dev, glue_dir);
1301 put_device(parent);
1302}
1303EXPORT_SYMBOL_GPL(device_del);
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316void device_unregister(struct device *dev)
1317{
1318 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
1319 device_del(dev);
1320 put_device(dev);
1321}
1322EXPORT_SYMBOL_GPL(device_unregister);
1323
1324static struct device *prev_device(struct klist_iter *i)
1325{
1326 struct klist_node *n = klist_prev(i);
1327 struct device *dev = NULL;
1328 struct device_private *p;
1329
1330 if (n) {
1331 p = to_device_private_parent(n);
1332 dev = p->device;
1333 }
1334 return dev;
1335}
1336
1337static struct device *next_device(struct klist_iter *i)
1338{
1339 struct klist_node *n = klist_next(i);
1340 struct device *dev = NULL;
1341 struct device_private *p;
1342
1343 if (n) {
1344 p = to_device_private_parent(n);
1345 dev = p->device;
1346 }
1347 return dev;
1348}
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363const char *device_get_devnode(struct device *dev,
1364 umode_t *mode, kuid_t *uid, kgid_t *gid,
1365 const char **tmp)
1366{
1367 char *s;
1368
1369 *tmp = NULL;
1370
1371
1372 if (dev->type && dev->type->devnode)
1373 *tmp = dev->type->devnode(dev, mode, uid, gid);
1374 if (*tmp)
1375 return *tmp;
1376
1377
1378 if (dev->class && dev->class->devnode)
1379 *tmp = dev->class->devnode(dev, mode);
1380 if (*tmp)
1381 return *tmp;
1382
1383
1384 if (strchr(dev_name(dev), '!') == NULL)
1385 return dev_name(dev);
1386
1387
1388 s = kstrdup(dev_name(dev), GFP_KERNEL);
1389 if (!s)
1390 return NULL;
1391 strreplace(s, '!', '/');
1392 return *tmp = s;
1393}
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407int device_for_each_child(struct device *parent, void *data,
1408 int (*fn)(struct device *dev, void *data))
1409{
1410 struct klist_iter i;
1411 struct device *child;
1412 int error = 0;
1413
1414 if (!parent->p)
1415 return 0;
1416
1417 klist_iter_init(&parent->p->klist_children, &i);
1418 while ((child = next_device(&i)) && !error)
1419 error = fn(child, data);
1420 klist_iter_exit(&i);
1421 return error;
1422}
1423EXPORT_SYMBOL_GPL(device_for_each_child);
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437int device_for_each_child_reverse(struct device *parent, void *data,
1438 int (*fn)(struct device *dev, void *data))
1439{
1440 struct klist_iter i;
1441 struct device *child;
1442 int error = 0;
1443
1444 if (!parent->p)
1445 return 0;
1446
1447 klist_iter_init(&parent->p->klist_children, &i);
1448 while ((child = prev_device(&i)) && !error)
1449 error = fn(child, data);
1450 klist_iter_exit(&i);
1451 return error;
1452}
1453EXPORT_SYMBOL_GPL(device_for_each_child_reverse);
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472struct device *device_find_child(struct device *parent, void *data,
1473 int (*match)(struct device *dev, void *data))
1474{
1475 struct klist_iter i;
1476 struct device *child;
1477
1478 if (!parent)
1479 return NULL;
1480
1481 klist_iter_init(&parent->p->klist_children, &i);
1482 while ((child = next_device(&i)))
1483 if (match(child, data) && get_device(child))
1484 break;
1485 klist_iter_exit(&i);
1486 return child;
1487}
1488EXPORT_SYMBOL_GPL(device_find_child);
1489
1490int __init devices_init(void)
1491{
1492 devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);
1493 if (!devices_kset)
1494 return -ENOMEM;
1495 dev_kobj = kobject_create_and_add("dev", NULL);
1496 if (!dev_kobj)
1497 goto dev_kobj_err;
1498 sysfs_dev_block_kobj = kobject_create_and_add("block", dev_kobj);
1499 if (!sysfs_dev_block_kobj)
1500 goto block_kobj_err;
1501 sysfs_dev_char_kobj = kobject_create_and_add("char", dev_kobj);
1502 if (!sysfs_dev_char_kobj)
1503 goto char_kobj_err;
1504
1505 return 0;
1506
1507 char_kobj_err:
1508 kobject_put(sysfs_dev_block_kobj);
1509 block_kobj_err:
1510 kobject_put(dev_kobj);
1511 dev_kobj_err:
1512 kset_unregister(devices_kset);
1513 return -ENOMEM;
1514}
1515
1516static int device_check_offline(struct device *dev, void *not_used)
1517{
1518 int ret;
1519
1520 ret = device_for_each_child(dev, NULL, device_check_offline);
1521 if (ret)
1522 return ret;
1523
1524 return device_supports_offline(dev) && !dev->offline ? -EBUSY : 0;
1525}
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538int device_offline(struct device *dev)
1539{
1540 int ret;
1541
1542 if (dev->offline_disabled)
1543 return -EPERM;
1544
1545 ret = device_for_each_child(dev, NULL, device_check_offline);
1546 if (ret)
1547 return ret;
1548
1549 device_lock(dev);
1550 if (device_supports_offline(dev)) {
1551 if (dev->offline) {
1552 ret = 1;
1553 } else {
1554 ret = dev->bus->offline(dev);
1555 if (!ret) {
1556 kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
1557 dev->offline = true;
1558 }
1559 }
1560 }
1561 device_unlock(dev);
1562
1563 return ret;
1564}
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576int device_online(struct device *dev)
1577{
1578 int ret = 0;
1579
1580 device_lock(dev);
1581 if (device_supports_offline(dev)) {
1582 if (dev->offline) {
1583 ret = dev->bus->online(dev);
1584 if (!ret) {
1585 kobject_uevent(&dev->kobj, KOBJ_ONLINE);
1586 dev->offline = false;
1587 }
1588 } else {
1589 ret = 1;
1590 }
1591 }
1592 device_unlock(dev);
1593
1594 return ret;
1595}
1596
1597struct root_device {
1598 struct device dev;
1599 struct module *owner;
1600};
1601
1602static inline struct root_device *to_root_device(struct device *d)
1603{
1604 return container_of(d, struct root_device, dev);
1605}
1606
1607static void root_device_release(struct device *dev)
1608{
1609 kfree(to_root_device(dev));
1610}
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634struct device *__root_device_register(const char *name, struct module *owner)
1635{
1636 struct root_device *root;
1637 int err = -ENOMEM;
1638
1639 root = kzalloc(sizeof(struct root_device), GFP_KERNEL);
1640 if (!root)
1641 return ERR_PTR(err);
1642
1643 err = dev_set_name(&root->dev, "%s", name);
1644 if (err) {
1645 kfree(root);
1646 return ERR_PTR(err);
1647 }
1648
1649 root->dev.release = root_device_release;
1650
1651 err = device_register(&root->dev);
1652 if (err) {
1653 put_device(&root->dev);
1654 return ERR_PTR(err);
1655 }
1656
1657#ifdef CONFIG_MODULES
1658 if (owner) {
1659 struct module_kobject *mk = &owner->mkobj;
1660
1661 err = sysfs_create_link(&root->dev.kobj, &mk->kobj, "module");
1662 if (err) {
1663 device_unregister(&root->dev);
1664 return ERR_PTR(err);
1665 }
1666 root->owner = owner;
1667 }
1668#endif
1669
1670 return &root->dev;
1671}
1672EXPORT_SYMBOL_GPL(__root_device_register);
1673
1674
1675
1676
1677
1678
1679
1680
1681void root_device_unregister(struct device *dev)
1682{
1683 struct root_device *root = to_root_device(dev);
1684
1685 if (root->owner)
1686 sysfs_remove_link(&root->dev.kobj, "module");
1687
1688 device_unregister(dev);
1689}
1690EXPORT_SYMBOL_GPL(root_device_unregister);
1691
1692
1693static void device_create_release(struct device *dev)
1694{
1695 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
1696 kfree(dev);
1697}
1698
1699static struct device *
1700device_create_groups_vargs(struct class *class, struct device *parent,
1701 dev_t devt, void *drvdata,
1702 const struct attribute_group **groups,
1703 const char *fmt, va_list args)
1704{
1705 struct device *dev = NULL;
1706 int retval = -ENODEV;
1707
1708 if (class == NULL || IS_ERR(class))
1709 goto error;
1710
1711 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1712 if (!dev) {
1713 retval = -ENOMEM;
1714 goto error;
1715 }
1716
1717 device_initialize(dev);
1718 dev->devt = devt;
1719 dev->class = class;
1720 dev->parent = parent;
1721 dev->groups = groups;
1722 dev->release = device_create_release;
1723 dev_set_drvdata(dev, drvdata);
1724
1725 retval = kobject_set_name_vargs(&dev->kobj, fmt, args);
1726 if (retval)
1727 goto error;
1728
1729 retval = device_add(dev);
1730 if (retval)
1731 goto error;
1732
1733 return dev;
1734
1735error:
1736 put_device(dev);
1737 return ERR_PTR(retval);
1738}
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765struct device *device_create_vargs(struct class *class, struct device *parent,
1766 dev_t devt, void *drvdata, const char *fmt,
1767 va_list args)
1768{
1769 return device_create_groups_vargs(class, parent, devt, drvdata, NULL,
1770 fmt, args);
1771}
1772EXPORT_SYMBOL_GPL(device_create_vargs);
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798struct device *device_create(struct class *class, struct device *parent,
1799 dev_t devt, void *drvdata, const char *fmt, ...)
1800{
1801 va_list vargs;
1802 struct device *dev;
1803
1804 va_start(vargs, fmt);
1805 dev = device_create_vargs(class, parent, devt, drvdata, fmt, vargs);
1806 va_end(vargs);
1807 return dev;
1808}
1809EXPORT_SYMBOL_GPL(device_create);
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838struct device *device_create_with_groups(struct class *class,
1839 struct device *parent, dev_t devt,
1840 void *drvdata,
1841 const struct attribute_group **groups,
1842 const char *fmt, ...)
1843{
1844 va_list vargs;
1845 struct device *dev;
1846
1847 va_start(vargs, fmt);
1848 dev = device_create_groups_vargs(class, parent, devt, drvdata, groups,
1849 fmt, vargs);
1850 va_end(vargs);
1851 return dev;
1852}
1853EXPORT_SYMBOL_GPL(device_create_with_groups);
1854
1855static int __match_devt(struct device *dev, const void *data)
1856{
1857 const dev_t *devt = data;
1858
1859 return dev->devt == *devt;
1860}
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870void device_destroy(struct class *class, dev_t devt)
1871{
1872 struct device *dev;
1873
1874 dev = class_find_device(class, NULL, &devt, __match_devt);
1875 if (dev) {
1876 put_device(dev);
1877 device_unregister(dev);
1878 }
1879}
1880EXPORT_SYMBOL_GPL(device_destroy);
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921int device_rename(struct device *dev, const char *new_name)
1922{
1923 struct kobject *kobj = &dev->kobj;
1924 char *old_device_name = NULL;
1925 int error;
1926
1927 dev = get_device(dev);
1928 if (!dev)
1929 return -EINVAL;
1930
1931 dev_dbg(dev, "renaming to %s\n", new_name);
1932
1933 old_device_name = kstrdup(dev_name(dev), GFP_KERNEL);
1934 if (!old_device_name) {
1935 error = -ENOMEM;
1936 goto out;
1937 }
1938
1939 if (dev->class) {
1940 error = sysfs_rename_link_ns(&dev->class->p->subsys.kobj,
1941 kobj, old_device_name,
1942 new_name, kobject_namespace(kobj));
1943 if (error)
1944 goto out;
1945 }
1946
1947 error = kobject_rename(kobj, new_name);
1948 if (error)
1949 goto out;
1950
1951out:
1952 put_device(dev);
1953
1954 kfree(old_device_name);
1955
1956 return error;
1957}
1958EXPORT_SYMBOL_GPL(device_rename);
1959
1960static int device_move_class_links(struct device *dev,
1961 struct device *old_parent,
1962 struct device *new_parent)
1963{
1964 int error = 0;
1965
1966 if (old_parent)
1967 sysfs_remove_link(&dev->kobj, "device");
1968 if (new_parent)
1969 error = sysfs_create_link(&dev->kobj, &new_parent->kobj,
1970 "device");
1971 return error;
1972}
1973
1974
1975
1976
1977
1978
1979
1980int device_move(struct device *dev, struct device *new_parent,
1981 enum dpm_order dpm_order)
1982{
1983 int error;
1984 struct device *old_parent;
1985 struct kobject *new_parent_kobj;
1986
1987 dev = get_device(dev);
1988 if (!dev)
1989 return -EINVAL;
1990
1991 device_pm_lock();
1992 new_parent = get_device(new_parent);
1993 new_parent_kobj = get_device_parent(dev, new_parent);
1994
1995 pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev),
1996 __func__, new_parent ? dev_name(new_parent) : "<NULL>");
1997 error = kobject_move(&dev->kobj, new_parent_kobj);
1998 if (error) {
1999 cleanup_glue_dir(dev, new_parent_kobj);
2000 put_device(new_parent);
2001 goto out;
2002 }
2003 old_parent = dev->parent;
2004 dev->parent = new_parent;
2005 if (old_parent)
2006 klist_remove(&dev->p->knode_parent);
2007 if (new_parent) {
2008 klist_add_tail(&dev->p->knode_parent,
2009 &new_parent->p->klist_children);
2010 set_dev_node(dev, dev_to_node(new_parent));
2011 }
2012
2013 if (dev->class) {
2014 error = device_move_class_links(dev, old_parent, new_parent);
2015 if (error) {
2016
2017 device_move_class_links(dev, new_parent, old_parent);
2018 if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
2019 if (new_parent)
2020 klist_remove(&dev->p->knode_parent);
2021 dev->parent = old_parent;
2022 if (old_parent) {
2023 klist_add_tail(&dev->p->knode_parent,
2024 &old_parent->p->klist_children);
2025 set_dev_node(dev, dev_to_node(old_parent));
2026 }
2027 }
2028 cleanup_glue_dir(dev, new_parent_kobj);
2029 put_device(new_parent);
2030 goto out;
2031 }
2032 }
2033 switch (dpm_order) {
2034 case DPM_ORDER_NONE:
2035 break;
2036 case DPM_ORDER_DEV_AFTER_PARENT:
2037 device_pm_move_after(dev, new_parent);
2038 devices_kset_move_after(dev, new_parent);
2039 break;
2040 case DPM_ORDER_PARENT_BEFORE_DEV:
2041 device_pm_move_before(new_parent, dev);
2042 devices_kset_move_before(new_parent, dev);
2043 break;
2044 case DPM_ORDER_DEV_LAST:
2045 device_pm_move_last(dev);
2046 devices_kset_move_last(dev);
2047 break;
2048 }
2049
2050 put_device(old_parent);
2051out:
2052 device_pm_unlock();
2053 put_device(dev);
2054 return error;
2055}
2056EXPORT_SYMBOL_GPL(device_move);
2057
2058
2059
2060
2061void device_shutdown(void)
2062{
2063 struct device *dev, *parent;
2064
2065 spin_lock(&devices_kset->list_lock);
2066
2067
2068
2069
2070
2071 while (!list_empty(&devices_kset->list)) {
2072 dev = list_entry(devices_kset->list.prev, struct device,
2073 kobj.entry);
2074
2075
2076
2077
2078
2079
2080 parent = get_device(dev->parent);
2081 get_device(dev);
2082
2083
2084
2085
2086 list_del_init(&dev->kobj.entry);
2087 spin_unlock(&devices_kset->list_lock);
2088
2089
2090 if (parent)
2091 device_lock(parent);
2092 device_lock(dev);
2093
2094
2095 pm_runtime_get_noresume(dev);
2096 pm_runtime_barrier(dev);
2097
2098 if (dev->bus && dev->bus->shutdown) {
2099 if (initcall_debug)
2100 dev_info(dev, "shutdown\n");
2101 dev->bus->shutdown(dev);
2102 } else if (dev->driver && dev->driver->shutdown) {
2103 if (initcall_debug)
2104 dev_info(dev, "shutdown\n");
2105 dev->driver->shutdown(dev);
2106 }
2107
2108 device_unlock(dev);
2109 if (parent)
2110 device_unlock(parent);
2111
2112 put_device(dev);
2113 put_device(parent);
2114
2115 spin_lock(&devices_kset->list_lock);
2116 }
2117 spin_unlock(&devices_kset->list_lock);
2118}
2119
2120
2121
2122
2123
2124#ifdef CONFIG_PRINTK
2125static int
2126create_syslog_header(const struct device *dev, char *hdr, size_t hdrlen)
2127{
2128 const char *subsys;
2129 size_t pos = 0;
2130
2131 if (dev->class)
2132 subsys = dev->class->name;
2133 else if (dev->bus)
2134 subsys = dev->bus->name;
2135 else
2136 return 0;
2137
2138 pos += snprintf(hdr + pos, hdrlen - pos, "SUBSYSTEM=%s", subsys);
2139 if (pos >= hdrlen)
2140 goto overflow;
2141
2142
2143
2144
2145
2146
2147
2148
2149 if (MAJOR(dev->devt)) {
2150 char c;
2151
2152 if (strcmp(subsys, "block") == 0)
2153 c = 'b';
2154 else
2155 c = 'c';
2156 pos++;
2157 pos += snprintf(hdr + pos, hdrlen - pos,
2158 "DEVICE=%c%u:%u",
2159 c, MAJOR(dev->devt), MINOR(dev->devt));
2160 } else if (strcmp(subsys, "net") == 0) {
2161 struct net_device *net = to_net_dev(dev);
2162
2163 pos++;
2164 pos += snprintf(hdr + pos, hdrlen - pos,
2165 "DEVICE=n%u", net->ifindex);
2166 } else {
2167 pos++;
2168 pos += snprintf(hdr + pos, hdrlen - pos,
2169 "DEVICE=+%s:%s", subsys, dev_name(dev));
2170 }
2171
2172 if (pos >= hdrlen)
2173 goto overflow;
2174
2175 return pos;
2176
2177overflow:
2178 dev_WARN(dev, "device/subsystem name too long");
2179 return 0;
2180}
2181
2182int dev_vprintk_emit(int level, const struct device *dev,
2183 const char *fmt, va_list args)
2184{
2185 char hdr[128];
2186 size_t hdrlen;
2187
2188 hdrlen = create_syslog_header(dev, hdr, sizeof(hdr));
2189
2190 return vprintk_emit(0, level, hdrlen ? hdr : NULL, hdrlen, fmt, args);
2191}
2192EXPORT_SYMBOL(dev_vprintk_emit);
2193
2194int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...)
2195{
2196 va_list args;
2197 int r;
2198
2199 va_start(args, fmt);
2200
2201 r = dev_vprintk_emit(level, dev, fmt, args);
2202
2203 va_end(args);
2204
2205 return r;
2206}
2207EXPORT_SYMBOL(dev_printk_emit);
2208
2209static void __dev_printk(const char *level, const struct device *dev,
2210 struct va_format *vaf)
2211{
2212 if (dev)
2213 dev_printk_emit(level[1] - '0', dev, "%s %s: %pV",
2214 dev_driver_string(dev), dev_name(dev), vaf);
2215 else
2216 printk("%s(NULL device *): %pV", level, vaf);
2217}
2218
2219void dev_printk(const char *level, const struct device *dev,
2220 const char *fmt, ...)
2221{
2222 struct va_format vaf;
2223 va_list args;
2224
2225 va_start(args, fmt);
2226
2227 vaf.fmt = fmt;
2228 vaf.va = &args;
2229
2230 __dev_printk(level, dev, &vaf);
2231
2232 va_end(args);
2233}
2234EXPORT_SYMBOL(dev_printk);
2235
2236#define define_dev_printk_level(func, kern_level) \
2237void func(const struct device *dev, const char *fmt, ...) \
2238{ \
2239 struct va_format vaf; \
2240 va_list args; \
2241 \
2242 va_start(args, fmt); \
2243 \
2244 vaf.fmt = fmt; \
2245 vaf.va = &args; \
2246 \
2247 __dev_printk(kern_level, dev, &vaf); \
2248 \
2249 va_end(args); \
2250} \
2251EXPORT_SYMBOL(func);
2252
2253define_dev_printk_level(dev_emerg, KERN_EMERG);
2254define_dev_printk_level(dev_alert, KERN_ALERT);
2255define_dev_printk_level(dev_crit, KERN_CRIT);
2256define_dev_printk_level(dev_err, KERN_ERR);
2257define_dev_printk_level(dev_warn, KERN_WARNING);
2258define_dev_printk_level(dev_notice, KERN_NOTICE);
2259define_dev_printk_level(_dev_info, KERN_INFO);
2260
2261#endif
2262
2263static inline bool fwnode_is_primary(struct fwnode_handle *fwnode)
2264{
2265 return fwnode && !IS_ERR(fwnode->secondary);
2266}
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)
2277{
2278 if (fwnode) {
2279 struct fwnode_handle *fn = dev->fwnode;
2280
2281 if (fwnode_is_primary(fn))
2282 fn = fn->secondary;
2283
2284 if (fn) {
2285 WARN_ON(fwnode->secondary);
2286 fwnode->secondary = fn;
2287 }
2288 dev->fwnode = fwnode;
2289 } else {
2290 dev->fwnode = fwnode_is_primary(dev->fwnode) ?
2291 dev->fwnode->secondary : NULL;
2292 }
2293}
2294EXPORT_SYMBOL_GPL(set_primary_fwnode);
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode)
2306{
2307 if (fwnode)
2308 fwnode->secondary = ERR_PTR(-ENODEV);
2309
2310 if (fwnode_is_primary(dev->fwnode))
2311 dev->fwnode->secondary = fwnode;
2312 else
2313 dev->fwnode = fwnode;
2314}
2315