1
2
3
4
5
6
7
8
9
10
11#include <linux/acpi.h>
12#include <linux/cpufreq.h>
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/mutex.h>
26#include <linux/pm_runtime.h>
27#include <linux/netdevice.h>
28#include <linux/sched/signal.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
47
48static LIST_HEAD(wait_for_suppliers);
49static DEFINE_MUTEX(wfs_lock);
50static LIST_HEAD(deferred_sync);
51static unsigned int defer_sync_state_count = 1;
52static unsigned int defer_fw_devlink_count;
53static LIST_HEAD(deferred_fw_devlink);
54static DEFINE_MUTEX(defer_fw_devlink_lock);
55static bool fw_devlink_is_permissive(void);
56
57#ifdef CONFIG_SRCU
58static DEFINE_MUTEX(device_links_lock);
59DEFINE_STATIC_SRCU(device_links_srcu);
60
61static inline void device_links_write_lock(void)
62{
63 mutex_lock(&device_links_lock);
64}
65
66static inline void device_links_write_unlock(void)
67{
68 mutex_unlock(&device_links_lock);
69}
70
71int device_links_read_lock(void) __acquires(&device_links_srcu)
72{
73 return srcu_read_lock(&device_links_srcu);
74}
75
76void device_links_read_unlock(int idx) __releases(&device_links_srcu)
77{
78 srcu_read_unlock(&device_links_srcu, idx);
79}
80
81int device_links_read_lock_held(void)
82{
83 return srcu_read_lock_held(&device_links_srcu);
84}
85#else
86static DECLARE_RWSEM(device_links_lock);
87
88static inline void device_links_write_lock(void)
89{
90 down_write(&device_links_lock);
91}
92
93static inline void device_links_write_unlock(void)
94{
95 up_write(&device_links_lock);
96}
97
98int device_links_read_lock(void)
99{
100 down_read(&device_links_lock);
101 return 0;
102}
103
104void device_links_read_unlock(int not_used)
105{
106 up_read(&device_links_lock);
107}
108
109#ifdef CONFIG_DEBUG_LOCK_ALLOC
110int device_links_read_lock_held(void)
111{
112 return lockdep_is_held(&device_links_lock);
113}
114#endif
115#endif
116
117
118
119
120
121
122
123
124
125int device_is_dependent(struct device *dev, void *target)
126{
127 struct device_link *link;
128 int ret;
129
130 if (dev == target)
131 return 1;
132
133 ret = device_for_each_child(dev, target, device_is_dependent);
134 if (ret)
135 return ret;
136
137 list_for_each_entry(link, &dev->links.consumers, s_node) {
138 if (link->flags == (DL_FLAG_SYNC_STATE_ONLY | DL_FLAG_MANAGED))
139 continue;
140
141 if (link->consumer == target)
142 return 1;
143
144 ret = device_is_dependent(link->consumer, target);
145 if (ret)
146 break;
147 }
148 return ret;
149}
150
151static void device_link_init_status(struct device_link *link,
152 struct device *consumer,
153 struct device *supplier)
154{
155 switch (supplier->links.status) {
156 case DL_DEV_PROBING:
157 switch (consumer->links.status) {
158 case DL_DEV_PROBING:
159
160
161
162
163
164
165
166 link->status = DL_STATE_CONSUMER_PROBE;
167 break;
168 default:
169 link->status = DL_STATE_DORMANT;
170 break;
171 }
172 break;
173 case DL_DEV_DRIVER_BOUND:
174 switch (consumer->links.status) {
175 case DL_DEV_PROBING:
176 link->status = DL_STATE_CONSUMER_PROBE;
177 break;
178 case DL_DEV_DRIVER_BOUND:
179 link->status = DL_STATE_ACTIVE;
180 break;
181 default:
182 link->status = DL_STATE_AVAILABLE;
183 break;
184 }
185 break;
186 case DL_DEV_UNBINDING:
187 link->status = DL_STATE_SUPPLIER_UNBIND;
188 break;
189 default:
190 link->status = DL_STATE_DORMANT;
191 break;
192 }
193}
194
195static int device_reorder_to_tail(struct device *dev, void *not_used)
196{
197 struct device_link *link;
198
199
200
201
202
203 if (device_is_registered(dev))
204 devices_kset_move_last(dev);
205
206 if (device_pm_initialized(dev))
207 device_pm_move_last(dev);
208
209 device_for_each_child(dev, NULL, device_reorder_to_tail);
210 list_for_each_entry(link, &dev->links.consumers, s_node) {
211 if (link->flags == (DL_FLAG_SYNC_STATE_ONLY | DL_FLAG_MANAGED))
212 continue;
213 device_reorder_to_tail(link->consumer, NULL);
214 }
215
216 return 0;
217}
218
219
220
221
222
223
224
225
226
227
228void device_pm_move_to_tail(struct device *dev)
229{
230 int idx;
231
232 idx = device_links_read_lock();
233 device_pm_lock();
234 device_reorder_to_tail(dev, NULL);
235 device_pm_unlock();
236 device_links_read_unlock(idx);
237}
238
239#define to_devlink(dev) container_of((dev), struct device_link, link_dev)
240
241static ssize_t status_show(struct device *dev,
242 struct device_attribute *attr, char *buf)
243{
244 char *status;
245
246 switch (to_devlink(dev)->status) {
247 case DL_STATE_NONE:
248 status = "not tracked"; break;
249 case DL_STATE_DORMANT:
250 status = "dormant"; break;
251 case DL_STATE_AVAILABLE:
252 status = "available"; break;
253 case DL_STATE_CONSUMER_PROBE:
254 status = "consumer probing"; break;
255 case DL_STATE_ACTIVE:
256 status = "active"; break;
257 case DL_STATE_SUPPLIER_UNBIND:
258 status = "supplier unbinding"; break;
259 default:
260 status = "unknown"; break;
261 }
262 return sprintf(buf, "%s\n", status);
263}
264static DEVICE_ATTR_RO(status);
265
266static ssize_t auto_remove_on_show(struct device *dev,
267 struct device_attribute *attr, char *buf)
268{
269 struct device_link *link = to_devlink(dev);
270 char *str;
271
272 if (link->flags & DL_FLAG_AUTOREMOVE_SUPPLIER)
273 str = "supplier unbind";
274 else if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER)
275 str = "consumer unbind";
276 else
277 str = "never";
278
279 return sprintf(buf, "%s\n", str);
280}
281static DEVICE_ATTR_RO(auto_remove_on);
282
283static ssize_t runtime_pm_show(struct device *dev,
284 struct device_attribute *attr, char *buf)
285{
286 struct device_link *link = to_devlink(dev);
287
288 return sprintf(buf, "%d\n", !!(link->flags & DL_FLAG_PM_RUNTIME));
289}
290static DEVICE_ATTR_RO(runtime_pm);
291
292static ssize_t sync_state_only_show(struct device *dev,
293 struct device_attribute *attr, char *buf)
294{
295 struct device_link *link = to_devlink(dev);
296
297 return sprintf(buf, "%d\n", !!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
298}
299static DEVICE_ATTR_RO(sync_state_only);
300
301static struct attribute *devlink_attrs[] = {
302 &dev_attr_status.attr,
303 &dev_attr_auto_remove_on.attr,
304 &dev_attr_runtime_pm.attr,
305 &dev_attr_sync_state_only.attr,
306 NULL,
307};
308ATTRIBUTE_GROUPS(devlink);
309
310static void device_link_free(struct device_link *link)
311{
312 while (refcount_dec_not_one(&link->rpm_active))
313 pm_runtime_put(link->supplier);
314
315 put_device(link->consumer);
316 put_device(link->supplier);
317 kfree(link);
318}
319
320#ifdef CONFIG_SRCU
321static void __device_link_free_srcu(struct rcu_head *rhead)
322{
323 device_link_free(container_of(rhead, struct device_link, rcu_head));
324}
325
326static void devlink_dev_release(struct device *dev)
327{
328 struct device_link *link = to_devlink(dev);
329
330 call_srcu(&device_links_srcu, &link->rcu_head, __device_link_free_srcu);
331}
332#else
333static void devlink_dev_release(struct device *dev)
334{
335 device_link_free(to_devlink(dev));
336}
337#endif
338
339static struct class devlink_class = {
340 .name = "devlink",
341 .owner = THIS_MODULE,
342 .dev_groups = devlink_groups,
343 .dev_release = devlink_dev_release,
344};
345
346static int devlink_add_symlinks(struct device *dev,
347 struct class_interface *class_intf)
348{
349 int ret;
350 size_t len;
351 struct device_link *link = to_devlink(dev);
352 struct device *sup = link->supplier;
353 struct device *con = link->consumer;
354 char *buf;
355
356 len = max(strlen(dev_name(sup)), strlen(dev_name(con)));
357 len += strlen("supplier:") + 1;
358 buf = kzalloc(len, GFP_KERNEL);
359 if (!buf)
360 return -ENOMEM;
361
362 ret = sysfs_create_link(&link->link_dev.kobj, &sup->kobj, "supplier");
363 if (ret)
364 goto out;
365
366 ret = sysfs_create_link(&link->link_dev.kobj, &con->kobj, "consumer");
367 if (ret)
368 goto err_con;
369
370 snprintf(buf, len, "consumer:%s", dev_name(con));
371 ret = sysfs_create_link(&sup->kobj, &link->link_dev.kobj, buf);
372 if (ret)
373 goto err_con_dev;
374
375 snprintf(buf, len, "supplier:%s", dev_name(sup));
376 ret = sysfs_create_link(&con->kobj, &link->link_dev.kobj, buf);
377 if (ret)
378 goto err_sup_dev;
379
380 goto out;
381
382err_sup_dev:
383 snprintf(buf, len, "consumer:%s", dev_name(con));
384 sysfs_remove_link(&sup->kobj, buf);
385err_con_dev:
386 sysfs_remove_link(&link->link_dev.kobj, "consumer");
387err_con:
388 sysfs_remove_link(&link->link_dev.kobj, "supplier");
389out:
390 kfree(buf);
391 return ret;
392}
393
394static void devlink_remove_symlinks(struct device *dev,
395 struct class_interface *class_intf)
396{
397 struct device_link *link = to_devlink(dev);
398 size_t len;
399 struct device *sup = link->supplier;
400 struct device *con = link->consumer;
401 char *buf;
402
403 sysfs_remove_link(&link->link_dev.kobj, "consumer");
404 sysfs_remove_link(&link->link_dev.kobj, "supplier");
405
406 len = max(strlen(dev_name(sup)), strlen(dev_name(con)));
407 len += strlen("supplier:") + 1;
408 buf = kzalloc(len, GFP_KERNEL);
409 if (!buf) {
410 WARN(1, "Unable to properly free device link symlinks!\n");
411 return;
412 }
413
414 snprintf(buf, len, "supplier:%s", dev_name(sup));
415 sysfs_remove_link(&con->kobj, buf);
416 snprintf(buf, len, "consumer:%s", dev_name(con));
417 sysfs_remove_link(&sup->kobj, buf);
418 kfree(buf);
419}
420
421static struct class_interface devlink_class_intf = {
422 .class = &devlink_class,
423 .add_dev = devlink_add_symlinks,
424 .remove_dev = devlink_remove_symlinks,
425};
426
427static int __init devlink_class_init(void)
428{
429 int ret;
430
431 ret = class_register(&devlink_class);
432 if (ret)
433 return ret;
434
435 ret = class_interface_register(&devlink_class_intf);
436 if (ret)
437 class_unregister(&devlink_class);
438
439 return ret;
440}
441postcore_initcall(devlink_class_init);
442
443#define DL_MANAGED_LINK_FLAGS (DL_FLAG_AUTOREMOVE_CONSUMER | \
444 DL_FLAG_AUTOREMOVE_SUPPLIER | \
445 DL_FLAG_AUTOPROBE_CONSUMER | \
446 DL_FLAG_SYNC_STATE_ONLY)
447
448#define DL_ADD_VALID_FLAGS (DL_MANAGED_LINK_FLAGS | DL_FLAG_STATELESS | \
449 DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE)
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507struct device_link *device_link_add(struct device *consumer,
508 struct device *supplier, u32 flags)
509{
510 struct device_link *link;
511
512 if (!consumer || !supplier || flags & ~DL_ADD_VALID_FLAGS ||
513 (flags & DL_FLAG_STATELESS && flags & DL_MANAGED_LINK_FLAGS) ||
514 (flags & DL_FLAG_SYNC_STATE_ONLY &&
515 flags != DL_FLAG_SYNC_STATE_ONLY) ||
516 (flags & DL_FLAG_AUTOPROBE_CONSUMER &&
517 flags & (DL_FLAG_AUTOREMOVE_CONSUMER |
518 DL_FLAG_AUTOREMOVE_SUPPLIER)))
519 return NULL;
520
521 if (flags & DL_FLAG_PM_RUNTIME && flags & DL_FLAG_RPM_ACTIVE) {
522 if (pm_runtime_get_sync(supplier) < 0) {
523 pm_runtime_put_noidle(supplier);
524 return NULL;
525 }
526 }
527
528 if (!(flags & DL_FLAG_STATELESS))
529 flags |= DL_FLAG_MANAGED;
530
531 device_links_write_lock();
532 device_pm_lock();
533
534
535
536
537
538
539
540
541 if (!device_pm_initialized(supplier)
542 || (!(flags & DL_FLAG_SYNC_STATE_ONLY) &&
543 device_is_dependent(consumer, supplier))) {
544 link = NULL;
545 goto out;
546 }
547
548
549
550
551
552
553 if (flags & DL_FLAG_AUTOREMOVE_SUPPLIER)
554 flags &= ~DL_FLAG_AUTOREMOVE_CONSUMER;
555
556 list_for_each_entry(link, &supplier->links.consumers, s_node) {
557 if (link->consumer != consumer)
558 continue;
559
560 if (flags & DL_FLAG_PM_RUNTIME) {
561 if (!(link->flags & DL_FLAG_PM_RUNTIME)) {
562 pm_runtime_new_link(consumer);
563 link->flags |= DL_FLAG_PM_RUNTIME;
564 }
565 if (flags & DL_FLAG_RPM_ACTIVE)
566 refcount_inc(&link->rpm_active);
567 }
568
569 if (flags & DL_FLAG_STATELESS) {
570 kref_get(&link->kref);
571 if (link->flags & DL_FLAG_SYNC_STATE_ONLY &&
572 !(link->flags & DL_FLAG_STATELESS)) {
573 link->flags |= DL_FLAG_STATELESS;
574 goto reorder;
575 } else {
576 link->flags |= DL_FLAG_STATELESS;
577 goto out;
578 }
579 }
580
581
582
583
584
585
586 if (flags & DL_FLAG_AUTOREMOVE_SUPPLIER) {
587 if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
588 link->flags &= ~DL_FLAG_AUTOREMOVE_CONSUMER;
589 link->flags |= DL_FLAG_AUTOREMOVE_SUPPLIER;
590 }
591 } else if (!(flags & DL_FLAG_AUTOREMOVE_CONSUMER)) {
592 link->flags &= ~(DL_FLAG_AUTOREMOVE_CONSUMER |
593 DL_FLAG_AUTOREMOVE_SUPPLIER);
594 }
595 if (!(link->flags & DL_FLAG_MANAGED)) {
596 kref_get(&link->kref);
597 link->flags |= DL_FLAG_MANAGED;
598 device_link_init_status(link, consumer, supplier);
599 }
600 if (link->flags & DL_FLAG_SYNC_STATE_ONLY &&
601 !(flags & DL_FLAG_SYNC_STATE_ONLY)) {
602 link->flags &= ~DL_FLAG_SYNC_STATE_ONLY;
603 goto reorder;
604 }
605
606 goto out;
607 }
608
609 link = kzalloc(sizeof(*link), GFP_KERNEL);
610 if (!link)
611 goto out;
612
613 refcount_set(&link->rpm_active, 1);
614
615 get_device(supplier);
616 link->supplier = supplier;
617 INIT_LIST_HEAD(&link->s_node);
618 get_device(consumer);
619 link->consumer = consumer;
620 INIT_LIST_HEAD(&link->c_node);
621 link->flags = flags;
622 kref_init(&link->kref);
623
624 link->link_dev.class = &devlink_class;
625 device_set_pm_not_required(&link->link_dev);
626 dev_set_name(&link->link_dev, "%s--%s",
627 dev_name(supplier), dev_name(consumer));
628 if (device_register(&link->link_dev)) {
629 put_device(consumer);
630 put_device(supplier);
631 kfree(link);
632 link = NULL;
633 goto out;
634 }
635
636 if (flags & DL_FLAG_PM_RUNTIME) {
637 if (flags & DL_FLAG_RPM_ACTIVE)
638 refcount_inc(&link->rpm_active);
639
640 pm_runtime_new_link(consumer);
641 }
642
643
644 if (flags & DL_FLAG_STATELESS)
645 link->status = DL_STATE_NONE;
646 else
647 device_link_init_status(link, consumer, supplier);
648
649
650
651
652
653 if (link->status == DL_STATE_CONSUMER_PROBE &&
654 flags & DL_FLAG_PM_RUNTIME)
655 pm_runtime_resume(supplier);
656
657 list_add_tail_rcu(&link->s_node, &supplier->links.consumers);
658 list_add_tail_rcu(&link->c_node, &consumer->links.suppliers);
659
660 if (flags & DL_FLAG_SYNC_STATE_ONLY) {
661 dev_dbg(consumer,
662 "Linked as a sync state only consumer to %s\n",
663 dev_name(supplier));
664 goto out;
665 }
666
667reorder:
668
669
670
671
672
673
674
675 device_reorder_to_tail(consumer, NULL);
676
677 dev_dbg(consumer, "Linked as a consumer to %s\n", dev_name(supplier));
678
679out:
680 device_pm_unlock();
681 device_links_write_unlock();
682
683 if ((flags & DL_FLAG_PM_RUNTIME && flags & DL_FLAG_RPM_ACTIVE) && !link)
684 pm_runtime_put(supplier);
685
686 return link;
687}
688EXPORT_SYMBOL_GPL(device_link_add);
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705static void device_link_wait_for_supplier(struct device *consumer,
706 bool need_for_probe)
707{
708 mutex_lock(&wfs_lock);
709 list_add_tail(&consumer->links.needs_suppliers, &wait_for_suppliers);
710 consumer->links.need_for_probe = need_for_probe;
711 mutex_unlock(&wfs_lock);
712}
713
714static void device_link_wait_for_mandatory_supplier(struct device *consumer)
715{
716 device_link_wait_for_supplier(consumer, true);
717}
718
719static void device_link_wait_for_optional_supplier(struct device *consumer)
720{
721 device_link_wait_for_supplier(consumer, false);
722}
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742static void device_link_add_missing_supplier_links(void)
743{
744 struct device *dev, *tmp;
745
746 mutex_lock(&wfs_lock);
747 list_for_each_entry_safe(dev, tmp, &wait_for_suppliers,
748 links.needs_suppliers) {
749 int ret = fwnode_call_int_op(dev->fwnode, add_links, dev);
750 if (!ret)
751 list_del_init(&dev->links.needs_suppliers);
752 else if (ret != -ENODEV || fw_devlink_is_permissive())
753 dev->links.need_for_probe = false;
754 }
755 mutex_unlock(&wfs_lock);
756}
757
758#ifdef CONFIG_SRCU
759static void __device_link_del(struct kref *kref)
760{
761 struct device_link *link = container_of(kref, struct device_link, kref);
762
763 dev_dbg(link->consumer, "Dropping the link to %s\n",
764 dev_name(link->supplier));
765
766 if (link->flags & DL_FLAG_PM_RUNTIME)
767 pm_runtime_drop_link(link->consumer);
768
769 list_del_rcu(&link->s_node);
770 list_del_rcu(&link->c_node);
771 device_unregister(&link->link_dev);
772}
773#else
774static void __device_link_del(struct kref *kref)
775{
776 struct device_link *link = container_of(kref, struct device_link, kref);
777
778 dev_info(link->consumer, "Dropping the link to %s\n",
779 dev_name(link->supplier));
780
781 if (link->flags & DL_FLAG_PM_RUNTIME)
782 pm_runtime_drop_link(link->consumer);
783
784 list_del(&link->s_node);
785 list_del(&link->c_node);
786 device_unregister(&link->link_dev);
787}
788#endif
789
790static void device_link_put_kref(struct device_link *link)
791{
792 if (link->flags & DL_FLAG_STATELESS)
793 kref_put(&link->kref, __device_link_del);
794 else
795 WARN(1, "Unable to drop a managed device link reference\n");
796}
797
798
799
800
801
802
803
804
805
806
807void device_link_del(struct device_link *link)
808{
809 device_links_write_lock();
810 device_link_put_kref(link);
811 device_links_write_unlock();
812}
813EXPORT_SYMBOL_GPL(device_link_del);
814
815
816
817
818
819
820
821
822
823void device_link_remove(void *consumer, struct device *supplier)
824{
825 struct device_link *link;
826
827 if (WARN_ON(consumer == supplier))
828 return;
829
830 device_links_write_lock();
831
832 list_for_each_entry(link, &supplier->links.consumers, s_node) {
833 if (link->consumer == consumer) {
834 device_link_put_kref(link);
835 break;
836 }
837 }
838
839 device_links_write_unlock();
840}
841EXPORT_SYMBOL_GPL(device_link_remove);
842
843static void device_links_missing_supplier(struct device *dev)
844{
845 struct device_link *link;
846
847 list_for_each_entry(link, &dev->links.suppliers, c_node) {
848 if (link->status != DL_STATE_CONSUMER_PROBE)
849 continue;
850
851 if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
852 WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
853 } else {
854 WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
855 WRITE_ONCE(link->status, DL_STATE_DORMANT);
856 }
857 }
858}
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876int device_links_check_suppliers(struct device *dev)
877{
878 struct device_link *link;
879 int ret = 0;
880
881
882
883
884
885 mutex_lock(&wfs_lock);
886 if (!list_empty(&dev->links.needs_suppliers) &&
887 dev->links.need_for_probe) {
888 mutex_unlock(&wfs_lock);
889 return -EPROBE_DEFER;
890 }
891 mutex_unlock(&wfs_lock);
892
893 device_links_write_lock();
894
895 list_for_each_entry(link, &dev->links.suppliers, c_node) {
896 if (!(link->flags & DL_FLAG_MANAGED))
897 continue;
898
899 if (link->status != DL_STATE_AVAILABLE &&
900 !(link->flags & DL_FLAG_SYNC_STATE_ONLY)) {
901 device_links_missing_supplier(dev);
902 ret = -EPROBE_DEFER;
903 break;
904 }
905 WRITE_ONCE(link->status, DL_STATE_CONSUMER_PROBE);
906 }
907 dev->links.status = DL_DEV_PROBING;
908
909 device_links_write_unlock();
910 return ret;
911}
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931static void __device_links_queue_sync_state(struct device *dev,
932 struct list_head *list)
933{
934 struct device_link *link;
935
936 if (!dev_has_sync_state(dev))
937 return;
938 if (dev->state_synced)
939 return;
940
941 list_for_each_entry(link, &dev->links.consumers, s_node) {
942 if (!(link->flags & DL_FLAG_MANAGED))
943 continue;
944 if (link->status != DL_STATE_ACTIVE)
945 return;
946 }
947
948
949
950
951
952
953 dev->state_synced = true;
954
955 if (WARN_ON(!list_empty(&dev->links.defer_hook)))
956 return;
957
958 get_device(dev);
959 list_add_tail(&dev->links.defer_hook, list);
960}
961
962
963
964
965
966
967
968
969
970
971
972static void device_links_flush_sync_list(struct list_head *list,
973 struct device *dont_lock_dev)
974{
975 struct device *dev, *tmp;
976
977 list_for_each_entry_safe(dev, tmp, list, links.defer_hook) {
978 list_del_init(&dev->links.defer_hook);
979
980 if (dev != dont_lock_dev)
981 device_lock(dev);
982
983 if (dev->bus->sync_state)
984 dev->bus->sync_state(dev);
985 else if (dev->driver && dev->driver->sync_state)
986 dev->driver->sync_state(dev);
987
988 if (dev != dont_lock_dev)
989 device_unlock(dev);
990
991 put_device(dev);
992 }
993}
994
995void device_links_supplier_sync_state_pause(void)
996{
997 device_links_write_lock();
998 defer_sync_state_count++;
999 device_links_write_unlock();
1000}
1001
1002void device_links_supplier_sync_state_resume(void)
1003{
1004 struct device *dev, *tmp;
1005 LIST_HEAD(sync_list);
1006
1007 device_links_write_lock();
1008 if (!defer_sync_state_count) {
1009 WARN(true, "Unmatched sync_state pause/resume!");
1010 goto out;
1011 }
1012 defer_sync_state_count--;
1013 if (defer_sync_state_count)
1014 goto out;
1015
1016 list_for_each_entry_safe(dev, tmp, &deferred_sync, links.defer_hook) {
1017
1018
1019
1020
1021 list_del_init(&dev->links.defer_hook);
1022 __device_links_queue_sync_state(dev, &sync_list);
1023 }
1024out:
1025 device_links_write_unlock();
1026
1027 device_links_flush_sync_list(&sync_list, NULL);
1028}
1029
1030static int sync_state_resume_initcall(void)
1031{
1032 device_links_supplier_sync_state_resume();
1033 return 0;
1034}
1035late_initcall(sync_state_resume_initcall);
1036
1037static void __device_links_supplier_defer_sync(struct device *sup)
1038{
1039 if (list_empty(&sup->links.defer_hook) && dev_has_sync_state(sup))
1040 list_add_tail(&sup->links.defer_hook, &deferred_sync);
1041}
1042
1043static void device_link_drop_managed(struct device_link *link)
1044{
1045 link->flags &= ~DL_FLAG_MANAGED;
1046 WRITE_ONCE(link->status, DL_STATE_NONE);
1047 kref_put(&link->kref, __device_link_del);
1048}
1049
1050static ssize_t waiting_for_supplier_show(struct device *dev,
1051 struct device_attribute *attr,
1052 char *buf)
1053{
1054 bool val;
1055
1056 device_lock(dev);
1057 mutex_lock(&wfs_lock);
1058 val = !list_empty(&dev->links.needs_suppliers)
1059 && dev->links.need_for_probe;
1060 mutex_unlock(&wfs_lock);
1061 device_unlock(dev);
1062 return sprintf(buf, "%u\n", val);
1063}
1064static DEVICE_ATTR_RO(waiting_for_supplier);
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077void device_links_driver_bound(struct device *dev)
1078{
1079 struct device_link *link, *ln;
1080 LIST_HEAD(sync_list);
1081
1082
1083
1084
1085
1086
1087 mutex_lock(&wfs_lock);
1088 list_del_init(&dev->links.needs_suppliers);
1089 mutex_unlock(&wfs_lock);
1090 device_remove_file(dev, &dev_attr_waiting_for_supplier);
1091
1092 device_links_write_lock();
1093
1094 list_for_each_entry(link, &dev->links.consumers, s_node) {
1095 if (!(link->flags & DL_FLAG_MANAGED))
1096 continue;
1097
1098
1099
1100
1101
1102
1103
1104 if (link->status == DL_STATE_CONSUMER_PROBE ||
1105 link->status == DL_STATE_ACTIVE)
1106 continue;
1107
1108 WARN_ON(link->status != DL_STATE_DORMANT);
1109 WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
1110
1111 if (link->flags & DL_FLAG_AUTOPROBE_CONSUMER)
1112 driver_deferred_probe_add(link->consumer);
1113 }
1114
1115 if (defer_sync_state_count)
1116 __device_links_supplier_defer_sync(dev);
1117 else
1118 __device_links_queue_sync_state(dev, &sync_list);
1119
1120 list_for_each_entry_safe(link, ln, &dev->links.suppliers, c_node) {
1121 struct device *supplier;
1122
1123 if (!(link->flags & DL_FLAG_MANAGED))
1124 continue;
1125
1126 supplier = link->supplier;
1127 if (link->flags & DL_FLAG_SYNC_STATE_ONLY) {
1128
1129
1130
1131
1132
1133 device_link_drop_managed(link);
1134 } else {
1135 WARN_ON(link->status != DL_STATE_CONSUMER_PROBE);
1136 WRITE_ONCE(link->status, DL_STATE_ACTIVE);
1137 }
1138
1139
1140
1141
1142
1143
1144
1145 if (defer_sync_state_count)
1146 __device_links_supplier_defer_sync(supplier);
1147 else
1148 __device_links_queue_sync_state(supplier, &sync_list);
1149 }
1150
1151 dev->links.status = DL_DEV_DRIVER_BOUND;
1152
1153 device_links_write_unlock();
1154
1155 device_links_flush_sync_list(&sync_list, dev);
1156}
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170static void __device_links_no_driver(struct device *dev)
1171{
1172 struct device_link *link, *ln;
1173
1174 list_for_each_entry_safe_reverse(link, ln, &dev->links.suppliers, c_node) {
1175 if (!(link->flags & DL_FLAG_MANAGED))
1176 continue;
1177
1178 if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
1179 device_link_drop_managed(link);
1180 continue;
1181 }
1182
1183 if (link->status != DL_STATE_CONSUMER_PROBE &&
1184 link->status != DL_STATE_ACTIVE)
1185 continue;
1186
1187 if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
1188 WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
1189 } else {
1190 WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
1191 WRITE_ONCE(link->status, DL_STATE_DORMANT);
1192 }
1193 }
1194
1195 dev->links.status = DL_DEV_NO_DRIVER;
1196}
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208void device_links_no_driver(struct device *dev)
1209{
1210 struct device_link *link;
1211
1212 device_links_write_lock();
1213
1214 list_for_each_entry(link, &dev->links.consumers, s_node) {
1215 if (!(link->flags & DL_FLAG_MANAGED))
1216 continue;
1217
1218
1219
1220
1221
1222
1223
1224
1225 if (link->status == DL_STATE_CONSUMER_PROBE ||
1226 link->status == DL_STATE_ACTIVE)
1227 WRITE_ONCE(link->status, DL_STATE_DORMANT);
1228 }
1229
1230 __device_links_no_driver(dev);
1231
1232 device_links_write_unlock();
1233}
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245void device_links_driver_cleanup(struct device *dev)
1246{
1247 struct device_link *link, *ln;
1248
1249 device_links_write_lock();
1250
1251 list_for_each_entry_safe(link, ln, &dev->links.consumers, s_node) {
1252 if (!(link->flags & DL_FLAG_MANAGED))
1253 continue;
1254
1255 WARN_ON(link->flags & DL_FLAG_AUTOREMOVE_CONSUMER);
1256 WARN_ON(link->status != DL_STATE_SUPPLIER_UNBIND);
1257
1258
1259
1260
1261
1262
1263 if (link->status == DL_STATE_SUPPLIER_UNBIND &&
1264 link->flags & DL_FLAG_AUTOREMOVE_SUPPLIER)
1265 device_link_drop_managed(link);
1266
1267 WRITE_ONCE(link->status, DL_STATE_DORMANT);
1268 }
1269
1270 list_del_init(&dev->links.defer_hook);
1271 __device_links_no_driver(dev);
1272
1273 device_links_write_unlock();
1274}
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290bool device_links_busy(struct device *dev)
1291{
1292 struct device_link *link;
1293 bool ret = false;
1294
1295 device_links_write_lock();
1296
1297 list_for_each_entry(link, &dev->links.consumers, s_node) {
1298 if (!(link->flags & DL_FLAG_MANAGED))
1299 continue;
1300
1301 if (link->status == DL_STATE_CONSUMER_PROBE
1302 || link->status == DL_STATE_ACTIVE) {
1303 ret = true;
1304 break;
1305 }
1306 WRITE_ONCE(link->status, DL_STATE_SUPPLIER_UNBIND);
1307 }
1308
1309 dev->links.status = DL_DEV_UNBINDING;
1310
1311 device_links_write_unlock();
1312 return ret;
1313}
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330void device_links_unbind_consumers(struct device *dev)
1331{
1332 struct device_link *link;
1333
1334 start:
1335 device_links_write_lock();
1336
1337 list_for_each_entry(link, &dev->links.consumers, s_node) {
1338 enum device_link_state status;
1339
1340 if (!(link->flags & DL_FLAG_MANAGED) ||
1341 link->flags & DL_FLAG_SYNC_STATE_ONLY)
1342 continue;
1343
1344 status = link->status;
1345 if (status == DL_STATE_CONSUMER_PROBE) {
1346 device_links_write_unlock();
1347
1348 wait_for_device_probe();
1349 goto start;
1350 }
1351 WRITE_ONCE(link->status, DL_STATE_SUPPLIER_UNBIND);
1352 if (status == DL_STATE_ACTIVE) {
1353 struct device *consumer = link->consumer;
1354
1355 get_device(consumer);
1356
1357 device_links_write_unlock();
1358
1359 device_release_driver_internal(consumer, NULL,
1360 consumer->parent);
1361 put_device(consumer);
1362 goto start;
1363 }
1364 }
1365
1366 device_links_write_unlock();
1367}
1368
1369
1370
1371
1372
1373static void device_links_purge(struct device *dev)
1374{
1375 struct device_link *link, *ln;
1376
1377 if (dev->class == &devlink_class)
1378 return;
1379
1380 mutex_lock(&wfs_lock);
1381 list_del(&dev->links.needs_suppliers);
1382 mutex_unlock(&wfs_lock);
1383
1384
1385
1386
1387
1388 device_links_write_lock();
1389
1390 list_for_each_entry_safe_reverse(link, ln, &dev->links.suppliers, c_node) {
1391 WARN_ON(link->status == DL_STATE_ACTIVE);
1392 __device_link_del(&link->kref);
1393 }
1394
1395 list_for_each_entry_safe_reverse(link, ln, &dev->links.consumers, s_node) {
1396 WARN_ON(link->status != DL_STATE_DORMANT &&
1397 link->status != DL_STATE_NONE);
1398 __device_link_del(&link->kref);
1399 }
1400
1401 device_links_write_unlock();
1402}
1403
1404static u32 fw_devlink_flags = DL_FLAG_SYNC_STATE_ONLY;
1405static int __init fw_devlink_setup(char *arg)
1406{
1407 if (!arg)
1408 return -EINVAL;
1409
1410 if (strcmp(arg, "off") == 0) {
1411 fw_devlink_flags = 0;
1412 } else if (strcmp(arg, "permissive") == 0) {
1413 fw_devlink_flags = DL_FLAG_SYNC_STATE_ONLY;
1414 } else if (strcmp(arg, "on") == 0) {
1415 fw_devlink_flags = DL_FLAG_AUTOPROBE_CONSUMER;
1416 } else if (strcmp(arg, "rpm") == 0) {
1417 fw_devlink_flags = DL_FLAG_AUTOPROBE_CONSUMER |
1418 DL_FLAG_PM_RUNTIME;
1419 }
1420 return 0;
1421}
1422early_param("fw_devlink", fw_devlink_setup);
1423
1424u32 fw_devlink_get_flags(void)
1425{
1426 return fw_devlink_flags;
1427}
1428
1429static bool fw_devlink_is_permissive(void)
1430{
1431 return fw_devlink_flags == DL_FLAG_SYNC_STATE_ONLY;
1432}
1433
1434static void fw_devlink_link_device(struct device *dev)
1435{
1436 int fw_ret;
1437
1438 if (!fw_devlink_flags)
1439 return;
1440
1441 mutex_lock(&defer_fw_devlink_lock);
1442 if (!defer_fw_devlink_count)
1443 device_link_add_missing_supplier_links();
1444
1445
1446
1447
1448
1449
1450 if (!fwnode_has_op(dev->fwnode, add_links))
1451 goto out;
1452
1453
1454
1455
1456
1457
1458
1459 if (!defer_fw_devlink_count) {
1460 fw_ret = fwnode_call_int_op(dev->fwnode, add_links, dev);
1461 if (fw_ret == -ENODEV && fw_devlink_is_permissive())
1462 fw_ret = -EAGAIN;
1463 } else {
1464 fw_ret = -ENODEV;
1465
1466
1467
1468
1469
1470 list_add_tail(&dev->links.defer_hook, &deferred_fw_devlink);
1471 }
1472
1473 if (fw_ret == -ENODEV)
1474 device_link_wait_for_mandatory_supplier(dev);
1475 else if (fw_ret)
1476 device_link_wait_for_optional_supplier(dev);
1477
1478out:
1479 mutex_unlock(&defer_fw_devlink_lock);
1480}
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525void fw_devlink_pause(void)
1526{
1527 mutex_lock(&defer_fw_devlink_lock);
1528 defer_fw_devlink_count++;
1529 mutex_unlock(&defer_fw_devlink_lock);
1530}
1531
1532
1533
1534
1535
1536
1537void fw_devlink_resume(void)
1538{
1539 struct device *dev, *tmp;
1540 LIST_HEAD(probe_list);
1541
1542 mutex_lock(&defer_fw_devlink_lock);
1543 if (!defer_fw_devlink_count) {
1544 WARN(true, "Unmatched fw_devlink pause/resume!");
1545 goto out;
1546 }
1547
1548 defer_fw_devlink_count--;
1549 if (defer_fw_devlink_count)
1550 goto out;
1551
1552 device_link_add_missing_supplier_links();
1553 list_splice_tail_init(&deferred_fw_devlink, &probe_list);
1554out:
1555 mutex_unlock(&defer_fw_devlink_lock);
1556
1557
1558
1559
1560
1561
1562 list_for_each_entry_safe(dev, tmp, &probe_list, links.defer_hook) {
1563 list_del_init(&dev->links.defer_hook);
1564 bus_probe_device(dev);
1565 }
1566}
1567
1568
1569int (*platform_notify)(struct device *dev) = NULL;
1570int (*platform_notify_remove)(struct device *dev) = NULL;
1571static struct kobject *dev_kobj;
1572struct kobject *sysfs_dev_char_kobj;
1573struct kobject *sysfs_dev_block_kobj;
1574
1575static DEFINE_MUTEX(device_hotplug_lock);
1576
1577void lock_device_hotplug(void)
1578{
1579 mutex_lock(&device_hotplug_lock);
1580}
1581
1582void unlock_device_hotplug(void)
1583{
1584 mutex_unlock(&device_hotplug_lock);
1585}
1586
1587int lock_device_hotplug_sysfs(void)
1588{
1589 if (mutex_trylock(&device_hotplug_lock))
1590 return 0;
1591
1592
1593 msleep(5);
1594 return restart_syscall();
1595}
1596
1597#ifdef CONFIG_BLOCK
1598static inline int device_is_not_partition(struct device *dev)
1599{
1600 return !(dev->type == &part_type);
1601}
1602#else
1603static inline int device_is_not_partition(struct device *dev)
1604{
1605 return 1;
1606}
1607#endif
1608
1609static int
1610device_platform_notify(struct device *dev, enum kobject_action action)
1611{
1612 int ret;
1613
1614 ret = acpi_platform_notify(dev, action);
1615 if (ret)
1616 return ret;
1617
1618 ret = software_node_notify(dev, action);
1619 if (ret)
1620 return ret;
1621
1622 if (platform_notify && action == KOBJ_ADD)
1623 platform_notify(dev);
1624 else if (platform_notify_remove && action == KOBJ_REMOVE)
1625 platform_notify_remove(dev);
1626 return 0;
1627}
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638const char *dev_driver_string(const struct device *dev)
1639{
1640 struct device_driver *drv;
1641
1642
1643
1644
1645
1646 drv = READ_ONCE(dev->driver);
1647 return drv ? drv->name :
1648 (dev->bus ? dev->bus->name :
1649 (dev->class ? dev->class->name : ""));
1650}
1651EXPORT_SYMBOL(dev_driver_string);
1652
1653#define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr)
1654
1655static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr,
1656 char *buf)
1657{
1658 struct device_attribute *dev_attr = to_dev_attr(attr);
1659 struct device *dev = kobj_to_dev(kobj);
1660 ssize_t ret = -EIO;
1661
1662 if (dev_attr->show)
1663 ret = dev_attr->show(dev, dev_attr, buf);
1664 if (ret >= (ssize_t)PAGE_SIZE) {
1665 printk("dev_attr_show: %pS returned bad count\n",
1666 dev_attr->show);
1667 }
1668 return ret;
1669}
1670
1671static ssize_t dev_attr_store(struct kobject *kobj, struct attribute *attr,
1672 const char *buf, size_t count)
1673{
1674 struct device_attribute *dev_attr = to_dev_attr(attr);
1675 struct device *dev = kobj_to_dev(kobj);
1676 ssize_t ret = -EIO;
1677
1678 if (dev_attr->store)
1679 ret = dev_attr->store(dev, dev_attr, buf, count);
1680 return ret;
1681}
1682
1683static const struct sysfs_ops dev_sysfs_ops = {
1684 .show = dev_attr_show,
1685 .store = dev_attr_store,
1686};
1687
1688#define to_ext_attr(x) container_of(x, struct dev_ext_attribute, attr)
1689
1690ssize_t device_store_ulong(struct device *dev,
1691 struct device_attribute *attr,
1692 const char *buf, size_t size)
1693{
1694 struct dev_ext_attribute *ea = to_ext_attr(attr);
1695 int ret;
1696 unsigned long new;
1697
1698 ret = kstrtoul(buf, 0, &new);
1699 if (ret)
1700 return ret;
1701 *(unsigned long *)(ea->var) = new;
1702
1703 return size;
1704}
1705EXPORT_SYMBOL_GPL(device_store_ulong);
1706
1707ssize_t device_show_ulong(struct device *dev,
1708 struct device_attribute *attr,
1709 char *buf)
1710{
1711 struct dev_ext_attribute *ea = to_ext_attr(attr);
1712 return snprintf(buf, PAGE_SIZE, "%lx\n", *(unsigned long *)(ea->var));
1713}
1714EXPORT_SYMBOL_GPL(device_show_ulong);
1715
1716ssize_t device_store_int(struct device *dev,
1717 struct device_attribute *attr,
1718 const char *buf, size_t size)
1719{
1720 struct dev_ext_attribute *ea = to_ext_attr(attr);
1721 int ret;
1722 long new;
1723
1724 ret = kstrtol(buf, 0, &new);
1725 if (ret)
1726 return ret;
1727
1728 if (new > INT_MAX || new < INT_MIN)
1729 return -EINVAL;
1730 *(int *)(ea->var) = new;
1731
1732 return size;
1733}
1734EXPORT_SYMBOL_GPL(device_store_int);
1735
1736ssize_t device_show_int(struct device *dev,
1737 struct device_attribute *attr,
1738 char *buf)
1739{
1740 struct dev_ext_attribute *ea = to_ext_attr(attr);
1741
1742 return snprintf(buf, PAGE_SIZE, "%d\n", *(int *)(ea->var));
1743}
1744EXPORT_SYMBOL_GPL(device_show_int);
1745
1746ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
1747 const char *buf, size_t size)
1748{
1749 struct dev_ext_attribute *ea = to_ext_attr(attr);
1750
1751 if (strtobool(buf, ea->var) < 0)
1752 return -EINVAL;
1753
1754 return size;
1755}
1756EXPORT_SYMBOL_GPL(device_store_bool);
1757
1758ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
1759 char *buf)
1760{
1761 struct dev_ext_attribute *ea = to_ext_attr(attr);
1762
1763 return snprintf(buf, PAGE_SIZE, "%d\n", *(bool *)(ea->var));
1764}
1765EXPORT_SYMBOL_GPL(device_show_bool);
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775static void device_release(struct kobject *kobj)
1776{
1777 struct device *dev = kobj_to_dev(kobj);
1778 struct device_private *p = dev->p;
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789 devres_release_all(dev);
1790
1791 if (dev->release)
1792 dev->release(dev);
1793 else if (dev->type && dev->type->release)
1794 dev->type->release(dev);
1795 else if (dev->class && dev->class->dev_release)
1796 dev->class->dev_release(dev);
1797 else
1798 WARN(1, KERN_ERR "Device '%s' does not have a release() function, it is broken and must be fixed. See Documentation/core-api/kobject.rst.\n",
1799 dev_name(dev));
1800 kfree(p);
1801}
1802
1803static const void *device_namespace(struct kobject *kobj)
1804{
1805 struct device *dev = kobj_to_dev(kobj);
1806 const void *ns = NULL;
1807
1808 if (dev->class && dev->class->ns_type)
1809 ns = dev->class->namespace(dev);
1810
1811 return ns;
1812}
1813
1814static void device_get_ownership(struct kobject *kobj, kuid_t *uid, kgid_t *gid)
1815{
1816 struct device *dev = kobj_to_dev(kobj);
1817
1818 if (dev->class && dev->class->get_ownership)
1819 dev->class->get_ownership(dev, uid, gid);
1820}
1821
1822static struct kobj_type device_ktype = {
1823 .release = device_release,
1824 .sysfs_ops = &dev_sysfs_ops,
1825 .namespace = device_namespace,
1826 .get_ownership = device_get_ownership,
1827};
1828
1829
1830static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)
1831{
1832 struct kobj_type *ktype = get_ktype(kobj);
1833
1834 if (ktype == &device_ktype) {
1835 struct device *dev = kobj_to_dev(kobj);
1836 if (dev->bus)
1837 return 1;
1838 if (dev->class)
1839 return 1;
1840 }
1841 return 0;
1842}
1843
1844static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj)
1845{
1846 struct device *dev = kobj_to_dev(kobj);
1847
1848 if (dev->bus)
1849 return dev->bus->name;
1850 if (dev->class)
1851 return dev->class->name;
1852 return NULL;
1853}
1854
1855static int dev_uevent(struct kset *kset, struct kobject *kobj,
1856 struct kobj_uevent_env *env)
1857{
1858 struct device *dev = kobj_to_dev(kobj);
1859 int retval = 0;
1860
1861
1862 if (MAJOR(dev->devt)) {
1863 const char *tmp;
1864 const char *name;
1865 umode_t mode = 0;
1866 kuid_t uid = GLOBAL_ROOT_UID;
1867 kgid_t gid = GLOBAL_ROOT_GID;
1868
1869 add_uevent_var(env, "MAJOR=%u", MAJOR(dev->devt));
1870 add_uevent_var(env, "MINOR=%u", MINOR(dev->devt));
1871 name = device_get_devnode(dev, &mode, &uid, &gid, &tmp);
1872 if (name) {
1873 add_uevent_var(env, "DEVNAME=%s", name);
1874 if (mode)
1875 add_uevent_var(env, "DEVMODE=%#o", mode & 0777);
1876 if (!uid_eq(uid, GLOBAL_ROOT_UID))
1877 add_uevent_var(env, "DEVUID=%u", from_kuid(&init_user_ns, uid));
1878 if (!gid_eq(gid, GLOBAL_ROOT_GID))
1879 add_uevent_var(env, "DEVGID=%u", from_kgid(&init_user_ns, gid));
1880 kfree(tmp);
1881 }
1882 }
1883
1884 if (dev->type && dev->type->name)
1885 add_uevent_var(env, "DEVTYPE=%s", dev->type->name);
1886
1887 if (dev->driver)
1888 add_uevent_var(env, "DRIVER=%s", dev->driver->name);
1889
1890
1891 of_device_uevent(dev, env);
1892
1893
1894 if (dev->bus && dev->bus->uevent) {
1895 retval = dev->bus->uevent(dev, env);
1896 if (retval)
1897 pr_debug("device: '%s': %s: bus uevent() returned %d\n",
1898 dev_name(dev), __func__, retval);
1899 }
1900
1901
1902 if (dev->class && dev->class->dev_uevent) {
1903 retval = dev->class->dev_uevent(dev, env);
1904 if (retval)
1905 pr_debug("device: '%s': %s: class uevent() "
1906 "returned %d\n", dev_name(dev),
1907 __func__, retval);
1908 }
1909
1910
1911 if (dev->type && dev->type->uevent) {
1912 retval = dev->type->uevent(dev, env);
1913 if (retval)
1914 pr_debug("device: '%s': %s: dev_type uevent() "
1915 "returned %d\n", dev_name(dev),
1916 __func__, retval);
1917 }
1918
1919 return retval;
1920}
1921
1922static const struct kset_uevent_ops device_uevent_ops = {
1923 .filter = dev_uevent_filter,
1924 .name = dev_uevent_name,
1925 .uevent = dev_uevent,
1926};
1927
1928static ssize_t uevent_show(struct device *dev, struct device_attribute *attr,
1929 char *buf)
1930{
1931 struct kobject *top_kobj;
1932 struct kset *kset;
1933 struct kobj_uevent_env *env = NULL;
1934 int i;
1935 size_t count = 0;
1936 int retval;
1937
1938
1939 top_kobj = &dev->kobj;
1940 while (!top_kobj->kset && top_kobj->parent)
1941 top_kobj = top_kobj->parent;
1942 if (!top_kobj->kset)
1943 goto out;
1944
1945 kset = top_kobj->kset;
1946 if (!kset->uevent_ops || !kset->uevent_ops->uevent)
1947 goto out;
1948
1949
1950 if (kset->uevent_ops && kset->uevent_ops->filter)
1951 if (!kset->uevent_ops->filter(kset, &dev->kobj))
1952 goto out;
1953
1954 env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);
1955 if (!env)
1956 return -ENOMEM;
1957
1958
1959 retval = kset->uevent_ops->uevent(kset, &dev->kobj, env);
1960 if (retval)
1961 goto out;
1962
1963
1964 for (i = 0; i < env->envp_idx; i++)
1965 count += sprintf(&buf[count], "%s\n", env->envp[i]);
1966out:
1967 kfree(env);
1968 return count;
1969}
1970
1971static ssize_t uevent_store(struct device *dev, struct device_attribute *attr,
1972 const char *buf, size_t count)
1973{
1974 int rc;
1975
1976 rc = kobject_synth_uevent(&dev->kobj, buf, count);
1977
1978 if (rc) {
1979 dev_err(dev, "uevent: failed to send synthetic uevent\n");
1980 return rc;
1981 }
1982
1983 return count;
1984}
1985static DEVICE_ATTR_RW(uevent);
1986
1987static ssize_t online_show(struct device *dev, struct device_attribute *attr,
1988 char *buf)
1989{
1990 bool val;
1991
1992 device_lock(dev);
1993 val = !dev->offline;
1994 device_unlock(dev);
1995 return sprintf(buf, "%u\n", val);
1996}
1997
1998static ssize_t online_store(struct device *dev, struct device_attribute *attr,
1999 const char *buf, size_t count)
2000{
2001 bool val;
2002 int ret;
2003
2004 ret = strtobool(buf, &val);
2005 if (ret < 0)
2006 return ret;
2007
2008 ret = lock_device_hotplug_sysfs();
2009 if (ret)
2010 return ret;
2011
2012 ret = val ? device_online(dev) : device_offline(dev);
2013 unlock_device_hotplug();
2014 return ret < 0 ? ret : count;
2015}
2016static DEVICE_ATTR_RW(online);
2017
2018int device_add_groups(struct device *dev, const struct attribute_group **groups)
2019{
2020 return sysfs_create_groups(&dev->kobj, groups);
2021}
2022EXPORT_SYMBOL_GPL(device_add_groups);
2023
2024void device_remove_groups(struct device *dev,
2025 const struct attribute_group **groups)
2026{
2027 sysfs_remove_groups(&dev->kobj, groups);
2028}
2029EXPORT_SYMBOL_GPL(device_remove_groups);
2030
2031union device_attr_group_devres {
2032 const struct attribute_group *group;
2033 const struct attribute_group **groups;
2034};
2035
2036static int devm_attr_group_match(struct device *dev, void *res, void *data)
2037{
2038 return ((union device_attr_group_devres *)res)->group == data;
2039}
2040
2041static void devm_attr_group_remove(struct device *dev, void *res)
2042{
2043 union device_attr_group_devres *devres = res;
2044 const struct attribute_group *group = devres->group;
2045
2046 dev_dbg(dev, "%s: removing group %p\n", __func__, group);
2047 sysfs_remove_group(&dev->kobj, group);
2048}
2049
2050static void devm_attr_groups_remove(struct device *dev, void *res)
2051{
2052 union device_attr_group_devres *devres = res;
2053 const struct attribute_group **groups = devres->groups;
2054
2055 dev_dbg(dev, "%s: removing groups %p\n", __func__, groups);
2056 sysfs_remove_groups(&dev->kobj, groups);
2057}
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069int devm_device_add_group(struct device *dev, const struct attribute_group *grp)
2070{
2071 union device_attr_group_devres *devres;
2072 int error;
2073
2074 devres = devres_alloc(devm_attr_group_remove,
2075 sizeof(*devres), GFP_KERNEL);
2076 if (!devres)
2077 return -ENOMEM;
2078
2079 error = sysfs_create_group(&dev->kobj, grp);
2080 if (error) {
2081 devres_free(devres);
2082 return error;
2083 }
2084
2085 devres->group = grp;
2086 devres_add(dev, devres);
2087 return 0;
2088}
2089EXPORT_SYMBOL_GPL(devm_device_add_group);
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099void devm_device_remove_group(struct device *dev,
2100 const struct attribute_group *grp)
2101{
2102 WARN_ON(devres_release(dev, devm_attr_group_remove,
2103 devm_attr_group_match,
2104 (void *)grp));
2105}
2106EXPORT_SYMBOL_GPL(devm_device_remove_group);
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121int devm_device_add_groups(struct device *dev,
2122 const struct attribute_group **groups)
2123{
2124 union device_attr_group_devres *devres;
2125 int error;
2126
2127 devres = devres_alloc(devm_attr_groups_remove,
2128 sizeof(*devres), GFP_KERNEL);
2129 if (!devres)
2130 return -ENOMEM;
2131
2132 error = sysfs_create_groups(&dev->kobj, groups);
2133 if (error) {
2134 devres_free(devres);
2135 return error;
2136 }
2137
2138 devres->groups = groups;
2139 devres_add(dev, devres);
2140 return 0;
2141}
2142EXPORT_SYMBOL_GPL(devm_device_add_groups);
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152void devm_device_remove_groups(struct device *dev,
2153 const struct attribute_group **groups)
2154{
2155 WARN_ON(devres_release(dev, devm_attr_groups_remove,
2156 devm_attr_group_match,
2157 (void *)groups));
2158}
2159EXPORT_SYMBOL_GPL(devm_device_remove_groups);
2160
2161static int device_add_attrs(struct device *dev)
2162{
2163 struct class *class = dev->class;
2164 const struct device_type *type = dev->type;
2165 int error;
2166
2167 if (class) {
2168 error = device_add_groups(dev, class->dev_groups);
2169 if (error)
2170 return error;
2171 }
2172
2173 if (type) {
2174 error = device_add_groups(dev, type->groups);
2175 if (error)
2176 goto err_remove_class_groups;
2177 }
2178
2179 error = device_add_groups(dev, dev->groups);
2180 if (error)
2181 goto err_remove_type_groups;
2182
2183 if (device_supports_offline(dev) && !dev->offline_disabled) {
2184 error = device_create_file(dev, &dev_attr_online);
2185 if (error)
2186 goto err_remove_dev_groups;
2187 }
2188
2189 if (fw_devlink_flags && !fw_devlink_is_permissive()) {
2190 error = device_create_file(dev, &dev_attr_waiting_for_supplier);
2191 if (error)
2192 goto err_remove_dev_online;
2193 }
2194
2195 return 0;
2196
2197 err_remove_dev_online:
2198 device_remove_file(dev, &dev_attr_online);
2199 err_remove_dev_groups:
2200 device_remove_groups(dev, dev->groups);
2201 err_remove_type_groups:
2202 if (type)
2203 device_remove_groups(dev, type->groups);
2204 err_remove_class_groups:
2205 if (class)
2206 device_remove_groups(dev, class->dev_groups);
2207
2208 return error;
2209}
2210
2211static void device_remove_attrs(struct device *dev)
2212{
2213 struct class *class = dev->class;
2214 const struct device_type *type = dev->type;
2215
2216 device_remove_file(dev, &dev_attr_waiting_for_supplier);
2217 device_remove_file(dev, &dev_attr_online);
2218 device_remove_groups(dev, dev->groups);
2219
2220 if (type)
2221 device_remove_groups(dev, type->groups);
2222
2223 if (class)
2224 device_remove_groups(dev, class->dev_groups);
2225}
2226
2227static ssize_t dev_show(struct device *dev, struct device_attribute *attr,
2228 char *buf)
2229{
2230 return print_dev_t(buf, dev->devt);
2231}
2232static DEVICE_ATTR_RO(dev);
2233
2234
2235struct kset *devices_kset;
2236
2237
2238
2239
2240
2241
2242static void devices_kset_move_before(struct device *deva, struct device *devb)
2243{
2244 if (!devices_kset)
2245 return;
2246 pr_debug("devices_kset: Moving %s before %s\n",
2247 dev_name(deva), dev_name(devb));
2248 spin_lock(&devices_kset->list_lock);
2249 list_move_tail(&deva->kobj.entry, &devb->kobj.entry);
2250 spin_unlock(&devices_kset->list_lock);
2251}
2252
2253
2254
2255
2256
2257
2258static void devices_kset_move_after(struct device *deva, struct device *devb)
2259{
2260 if (!devices_kset)
2261 return;
2262 pr_debug("devices_kset: Moving %s after %s\n",
2263 dev_name(deva), dev_name(devb));
2264 spin_lock(&devices_kset->list_lock);
2265 list_move(&deva->kobj.entry, &devb->kobj.entry);
2266 spin_unlock(&devices_kset->list_lock);
2267}
2268
2269
2270
2271
2272
2273void devices_kset_move_last(struct device *dev)
2274{
2275 if (!devices_kset)
2276 return;
2277 pr_debug("devices_kset: Moving %s to end of list\n", dev_name(dev));
2278 spin_lock(&devices_kset->list_lock);
2279 list_move_tail(&dev->kobj.entry, &devices_kset->list);
2280 spin_unlock(&devices_kset->list_lock);
2281}
2282
2283
2284
2285
2286
2287
2288int device_create_file(struct device *dev,
2289 const struct device_attribute *attr)
2290{
2291 int error = 0;
2292
2293 if (dev) {
2294 WARN(((attr->attr.mode & S_IWUGO) && !attr->store),
2295 "Attribute %s: write permission without 'store'\n",
2296 attr->attr.name);
2297 WARN(((attr->attr.mode & S_IRUGO) && !attr->show),
2298 "Attribute %s: read permission without 'show'\n",
2299 attr->attr.name);
2300 error = sysfs_create_file(&dev->kobj, &attr->attr);
2301 }
2302
2303 return error;
2304}
2305EXPORT_SYMBOL_GPL(device_create_file);
2306
2307
2308
2309
2310
2311
2312void device_remove_file(struct device *dev,
2313 const struct device_attribute *attr)
2314{
2315 if (dev)
2316 sysfs_remove_file(&dev->kobj, &attr->attr);
2317}
2318EXPORT_SYMBOL_GPL(device_remove_file);
2319
2320
2321
2322
2323
2324
2325
2326
2327bool device_remove_file_self(struct device *dev,
2328 const struct device_attribute *attr)
2329{
2330 if (dev)
2331 return sysfs_remove_file_self(&dev->kobj, &attr->attr);
2332 else
2333 return false;
2334}
2335EXPORT_SYMBOL_GPL(device_remove_file_self);
2336
2337
2338
2339
2340
2341
2342int device_create_bin_file(struct device *dev,
2343 const struct bin_attribute *attr)
2344{
2345 int error = -EINVAL;
2346 if (dev)
2347 error = sysfs_create_bin_file(&dev->kobj, attr);
2348 return error;
2349}
2350EXPORT_SYMBOL_GPL(device_create_bin_file);
2351
2352
2353
2354
2355
2356
2357void device_remove_bin_file(struct device *dev,
2358 const struct bin_attribute *attr)
2359{
2360 if (dev)
2361 sysfs_remove_bin_file(&dev->kobj, attr);
2362}
2363EXPORT_SYMBOL_GPL(device_remove_bin_file);
2364
2365static void klist_children_get(struct klist_node *n)
2366{
2367 struct device_private *p = to_device_private_parent(n);
2368 struct device *dev = p->device;
2369
2370 get_device(dev);
2371}
2372
2373static void klist_children_put(struct klist_node *n)
2374{
2375 struct device_private *p = to_device_private_parent(n);
2376 struct device *dev = p->device;
2377
2378 put_device(dev);
2379}
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401void device_initialize(struct device *dev)
2402{
2403 dev->kobj.kset = devices_kset;
2404 kobject_init(&dev->kobj, &device_ktype);
2405 INIT_LIST_HEAD(&dev->dma_pools);
2406 mutex_init(&dev->mutex);
2407#ifdef CONFIG_PROVE_LOCKING
2408 mutex_init(&dev->lockdep_mutex);
2409#endif
2410 lockdep_set_novalidate_class(&dev->mutex);
2411 spin_lock_init(&dev->devres_lock);
2412 INIT_LIST_HEAD(&dev->devres_head);
2413 device_pm_init(dev);
2414 set_dev_node(dev, -1);
2415#ifdef CONFIG_GENERIC_MSI_IRQ
2416 INIT_LIST_HEAD(&dev->msi_list);
2417#endif
2418 INIT_LIST_HEAD(&dev->links.consumers);
2419 INIT_LIST_HEAD(&dev->links.suppliers);
2420 INIT_LIST_HEAD(&dev->links.needs_suppliers);
2421 INIT_LIST_HEAD(&dev->links.defer_hook);
2422 dev->links.status = DL_DEV_NO_DRIVER;
2423}
2424EXPORT_SYMBOL_GPL(device_initialize);
2425
2426struct kobject *virtual_device_parent(struct device *dev)
2427{
2428 static struct kobject *virtual_dir = NULL;
2429
2430 if (!virtual_dir)
2431 virtual_dir = kobject_create_and_add("virtual",
2432 &devices_kset->kobj);
2433
2434 return virtual_dir;
2435}
2436
2437struct class_dir {
2438 struct kobject kobj;
2439 struct class *class;
2440};
2441
2442#define to_class_dir(obj) container_of(obj, struct class_dir, kobj)
2443
2444static void class_dir_release(struct kobject *kobj)
2445{
2446 struct class_dir *dir = to_class_dir(kobj);
2447 kfree(dir);
2448}
2449
2450static const
2451struct kobj_ns_type_operations *class_dir_child_ns_type(struct kobject *kobj)
2452{
2453 struct class_dir *dir = to_class_dir(kobj);
2454 return dir->class->ns_type;
2455}
2456
2457static struct kobj_type class_dir_ktype = {
2458 .release = class_dir_release,
2459 .sysfs_ops = &kobj_sysfs_ops,
2460 .child_ns_type = class_dir_child_ns_type
2461};
2462
2463static struct kobject *
2464class_dir_create_and_add(struct class *class, struct kobject *parent_kobj)
2465{
2466 struct class_dir *dir;
2467 int retval;
2468
2469 dir = kzalloc(sizeof(*dir), GFP_KERNEL);
2470 if (!dir)
2471 return ERR_PTR(-ENOMEM);
2472
2473 dir->class = class;
2474 kobject_init(&dir->kobj, &class_dir_ktype);
2475
2476 dir->kobj.kset = &class->p->glue_dirs;
2477
2478 retval = kobject_add(&dir->kobj, parent_kobj, "%s", class->name);
2479 if (retval < 0) {
2480 kobject_put(&dir->kobj);
2481 return ERR_PTR(retval);
2482 }
2483 return &dir->kobj;
2484}
2485
2486static DEFINE_MUTEX(gdp_mutex);
2487
2488static struct kobject *get_device_parent(struct device *dev,
2489 struct device *parent)
2490{
2491 if (dev->class) {
2492 struct kobject *kobj = NULL;
2493 struct kobject *parent_kobj;
2494 struct kobject *k;
2495
2496#ifdef CONFIG_BLOCK
2497
2498 if (sysfs_deprecated && dev->class == &block_class) {
2499 if (parent && parent->class == &block_class)
2500 return &parent->kobj;
2501 return &block_class.p->subsys.kobj;
2502 }
2503#endif
2504
2505
2506
2507
2508
2509
2510 if (parent == NULL)
2511 parent_kobj = virtual_device_parent(dev);
2512 else if (parent->class && !dev->class->ns_type)
2513 return &parent->kobj;
2514 else
2515 parent_kobj = &parent->kobj;
2516
2517 mutex_lock(&gdp_mutex);
2518
2519
2520 spin_lock(&dev->class->p->glue_dirs.list_lock);
2521 list_for_each_entry(k, &dev->class->p->glue_dirs.list, entry)
2522 if (k->parent == parent_kobj) {
2523 kobj = kobject_get(k);
2524 break;
2525 }
2526 spin_unlock(&dev->class->p->glue_dirs.list_lock);
2527 if (kobj) {
2528 mutex_unlock(&gdp_mutex);
2529 return kobj;
2530 }
2531
2532
2533 k = class_dir_create_and_add(dev->class, parent_kobj);
2534
2535 mutex_unlock(&gdp_mutex);
2536 return k;
2537 }
2538
2539
2540 if (!parent && dev->bus && dev->bus->dev_root)
2541 return &dev->bus->dev_root->kobj;
2542
2543 if (parent)
2544 return &parent->kobj;
2545 return NULL;
2546}
2547
2548static inline bool live_in_glue_dir(struct kobject *kobj,
2549 struct device *dev)
2550{
2551 if (!kobj || !dev->class ||
2552 kobj->kset != &dev->class->p->glue_dirs)
2553 return false;
2554 return true;
2555}
2556
2557static inline struct kobject *get_glue_dir(struct device *dev)
2558{
2559 return dev->kobj.parent;
2560}
2561
2562
2563
2564
2565
2566
2567static void cleanup_glue_dir(struct device *dev, struct kobject *glue_dir)
2568{
2569 unsigned int ref;
2570
2571
2572 if (!live_in_glue_dir(glue_dir, dev))
2573 return;
2574
2575 mutex_lock(&gdp_mutex);
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624 ref = kref_read(&glue_dir->kref);
2625 if (!kobject_has_children(glue_dir) && !--ref)
2626 kobject_del(glue_dir);
2627 kobject_put(glue_dir);
2628 mutex_unlock(&gdp_mutex);
2629}
2630
2631static int device_add_class_symlinks(struct device *dev)
2632{
2633 struct device_node *of_node = dev_of_node(dev);
2634 int error;
2635
2636 if (of_node) {
2637 error = sysfs_create_link(&dev->kobj, of_node_kobj(of_node), "of_node");
2638 if (error)
2639 dev_warn(dev, "Error %d creating of_node link\n",error);
2640
2641 }
2642
2643 if (!dev->class)
2644 return 0;
2645
2646 error = sysfs_create_link(&dev->kobj,
2647 &dev->class->p->subsys.kobj,
2648 "subsystem");
2649 if (error)
2650 goto out_devnode;
2651
2652 if (dev->parent && device_is_not_partition(dev)) {
2653 error = sysfs_create_link(&dev->kobj, &dev->parent->kobj,
2654 "device");
2655 if (error)
2656 goto out_subsys;
2657 }
2658
2659#ifdef CONFIG_BLOCK
2660
2661 if (sysfs_deprecated && dev->class == &block_class)
2662 return 0;
2663#endif
2664
2665
2666 error = sysfs_create_link(&dev->class->p->subsys.kobj,
2667 &dev->kobj, dev_name(dev));
2668 if (error)
2669 goto out_device;
2670
2671 return 0;
2672
2673out_device:
2674 sysfs_remove_link(&dev->kobj, "device");
2675
2676out_subsys:
2677 sysfs_remove_link(&dev->kobj, "subsystem");
2678out_devnode:
2679 sysfs_remove_link(&dev->kobj, "of_node");
2680 return error;
2681}
2682
2683static void device_remove_class_symlinks(struct device *dev)
2684{
2685 if (dev_of_node(dev))
2686 sysfs_remove_link(&dev->kobj, "of_node");
2687
2688 if (!dev->class)
2689 return;
2690
2691 if (dev->parent && device_is_not_partition(dev))
2692 sysfs_remove_link(&dev->kobj, "device");
2693 sysfs_remove_link(&dev->kobj, "subsystem");
2694#ifdef CONFIG_BLOCK
2695 if (sysfs_deprecated && dev->class == &block_class)
2696 return;
2697#endif
2698 sysfs_delete_link(&dev->class->p->subsys.kobj, &dev->kobj, dev_name(dev));
2699}
2700
2701
2702
2703
2704
2705
2706int dev_set_name(struct device *dev, const char *fmt, ...)
2707{
2708 va_list vargs;
2709 int err;
2710
2711 va_start(vargs, fmt);
2712 err = kobject_set_name_vargs(&dev->kobj, fmt, vargs);
2713 va_end(vargs);
2714 return err;
2715}
2716EXPORT_SYMBOL_GPL(dev_set_name);
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729static struct kobject *device_to_dev_kobj(struct device *dev)
2730{
2731 struct kobject *kobj;
2732
2733 if (dev->class)
2734 kobj = dev->class->dev_kobj;
2735 else
2736 kobj = sysfs_dev_char_kobj;
2737
2738 return kobj;
2739}
2740
2741static int device_create_sys_dev_entry(struct device *dev)
2742{
2743 struct kobject *kobj = device_to_dev_kobj(dev);
2744 int error = 0;
2745 char devt_str[15];
2746
2747 if (kobj) {
2748 format_dev_t(devt_str, dev->devt);
2749 error = sysfs_create_link(kobj, &dev->kobj, devt_str);
2750 }
2751
2752 return error;
2753}
2754
2755static void device_remove_sys_dev_entry(struct device *dev)
2756{
2757 struct kobject *kobj = device_to_dev_kobj(dev);
2758 char devt_str[15];
2759
2760 if (kobj) {
2761 format_dev_t(devt_str, dev->devt);
2762 sysfs_remove_link(kobj, devt_str);
2763 }
2764}
2765
2766static int device_private_init(struct device *dev)
2767{
2768 dev->p = kzalloc(sizeof(*dev->p), GFP_KERNEL);
2769 if (!dev->p)
2770 return -ENOMEM;
2771 dev->p->device = dev;
2772 klist_init(&dev->p->klist_children, klist_children_get,
2773 klist_children_put);
2774 INIT_LIST_HEAD(&dev->p->deferred_probe);
2775 return 0;
2776}
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805int device_add(struct device *dev)
2806{
2807 struct device *parent;
2808 struct kobject *kobj;
2809 struct class_interface *class_intf;
2810 int error = -EINVAL;
2811 struct kobject *glue_dir = NULL;
2812
2813 dev = get_device(dev);
2814 if (!dev)
2815 goto done;
2816
2817 if (!dev->p) {
2818 error = device_private_init(dev);
2819 if (error)
2820 goto done;
2821 }
2822
2823
2824
2825
2826
2827
2828 if (dev->init_name) {
2829 dev_set_name(dev, "%s", dev->init_name);
2830 dev->init_name = NULL;
2831 }
2832
2833
2834 if (!dev_name(dev) && dev->bus && dev->bus->dev_name)
2835 dev_set_name(dev, "%s%u", dev->bus->dev_name, dev->id);
2836
2837 if (!dev_name(dev)) {
2838 error = -EINVAL;
2839 goto name_error;
2840 }
2841
2842 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
2843
2844 parent = get_device(dev->parent);
2845 kobj = get_device_parent(dev, parent);
2846 if (IS_ERR(kobj)) {
2847 error = PTR_ERR(kobj);
2848 goto parent_error;
2849 }
2850 if (kobj)
2851 dev->kobj.parent = kobj;
2852
2853
2854 if (parent && (dev_to_node(dev) == NUMA_NO_NODE))
2855 set_dev_node(dev, dev_to_node(parent));
2856
2857
2858
2859 error = kobject_add(&dev->kobj, dev->kobj.parent, NULL);
2860 if (error) {
2861 glue_dir = get_glue_dir(dev);
2862 goto Error;
2863 }
2864
2865
2866 error = device_platform_notify(dev, KOBJ_ADD);
2867 if (error)
2868 goto platform_error;
2869
2870 error = device_create_file(dev, &dev_attr_uevent);
2871 if (error)
2872 goto attrError;
2873
2874 error = device_add_class_symlinks(dev);
2875 if (error)
2876 goto SymlinkError;
2877 error = device_add_attrs(dev);
2878 if (error)
2879 goto AttrsError;
2880 error = bus_add_device(dev);
2881 if (error)
2882 goto BusError;
2883 error = dpm_sysfs_add(dev);
2884 if (error)
2885 goto DPMError;
2886 device_pm_add(dev);
2887
2888 if (MAJOR(dev->devt)) {
2889 error = device_create_file(dev, &dev_attr_dev);
2890 if (error)
2891 goto DevAttrError;
2892
2893 error = device_create_sys_dev_entry(dev);
2894 if (error)
2895 goto SysEntryError;
2896
2897 devtmpfs_create_node(dev);
2898 }
2899
2900
2901
2902
2903 if (dev->bus)
2904 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
2905 BUS_NOTIFY_ADD_DEVICE, dev);
2906
2907 kobject_uevent(&dev->kobj, KOBJ_ADD);
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921 if (dev->fwnode && !dev->fwnode->dev) {
2922 dev->fwnode->dev = dev;
2923 fw_devlink_link_device(dev);
2924 }
2925
2926 bus_probe_device(dev);
2927 if (parent)
2928 klist_add_tail(&dev->p->knode_parent,
2929 &parent->p->klist_children);
2930
2931 if (dev->class) {
2932 mutex_lock(&dev->class->p->mutex);
2933
2934 klist_add_tail(&dev->p->knode_class,
2935 &dev->class->p->klist_devices);
2936
2937
2938 list_for_each_entry(class_intf,
2939 &dev->class->p->interfaces, node)
2940 if (class_intf->add_dev)
2941 class_intf->add_dev(dev, class_intf);
2942 mutex_unlock(&dev->class->p->mutex);
2943 }
2944done:
2945 put_device(dev);
2946 return error;
2947 SysEntryError:
2948 if (MAJOR(dev->devt))
2949 device_remove_file(dev, &dev_attr_dev);
2950 DevAttrError:
2951 device_pm_remove(dev);
2952 dpm_sysfs_remove(dev);
2953 DPMError:
2954 bus_remove_device(dev);
2955 BusError:
2956 device_remove_attrs(dev);
2957 AttrsError:
2958 device_remove_class_symlinks(dev);
2959 SymlinkError:
2960 device_remove_file(dev, &dev_attr_uevent);
2961 attrError:
2962 device_platform_notify(dev, KOBJ_REMOVE);
2963platform_error:
2964 kobject_uevent(&dev->kobj, KOBJ_REMOVE);
2965 glue_dir = get_glue_dir(dev);
2966 kobject_del(&dev->kobj);
2967 Error:
2968 cleanup_glue_dir(dev, glue_dir);
2969parent_error:
2970 put_device(parent);
2971name_error:
2972 kfree(dev->p);
2973 dev->p = NULL;
2974 goto done;
2975}
2976EXPORT_SYMBOL_GPL(device_add);
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996int device_register(struct device *dev)
2997{
2998 device_initialize(dev);
2999 return device_add(dev);
3000}
3001EXPORT_SYMBOL_GPL(device_register);
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011struct device *get_device(struct device *dev)
3012{
3013 return dev ? kobj_to_dev(kobject_get(&dev->kobj)) : NULL;
3014}
3015EXPORT_SYMBOL_GPL(get_device);
3016
3017
3018
3019
3020
3021void put_device(struct device *dev)
3022{
3023
3024 if (dev)
3025 kobject_put(&dev->kobj);
3026}
3027EXPORT_SYMBOL_GPL(put_device);
3028
3029bool kill_device(struct device *dev)
3030{
3031
3032
3033
3034
3035
3036
3037
3038 lockdep_assert_held(&dev->mutex);
3039
3040 if (dev->p->dead)
3041 return false;
3042 dev->p->dead = true;
3043 return true;
3044}
3045EXPORT_SYMBOL_GPL(kill_device);
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060void device_del(struct device *dev)
3061{
3062 struct device *parent = dev->parent;
3063 struct kobject *glue_dir = NULL;
3064 struct class_interface *class_intf;
3065
3066 device_lock(dev);
3067 kill_device(dev);
3068 device_unlock(dev);
3069
3070 if (dev->fwnode && dev->fwnode->dev == dev)
3071 dev->fwnode->dev = NULL;
3072
3073
3074
3075
3076 if (dev->bus)
3077 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
3078 BUS_NOTIFY_DEL_DEVICE, dev);
3079
3080 dpm_sysfs_remove(dev);
3081 if (parent)
3082 klist_del(&dev->p->knode_parent);
3083 if (MAJOR(dev->devt)) {
3084 devtmpfs_delete_node(dev);
3085 device_remove_sys_dev_entry(dev);
3086 device_remove_file(dev, &dev_attr_dev);
3087 }
3088 if (dev->class) {
3089 device_remove_class_symlinks(dev);
3090
3091 mutex_lock(&dev->class->p->mutex);
3092
3093 list_for_each_entry(class_intf,
3094 &dev->class->p->interfaces, node)
3095 if (class_intf->remove_dev)
3096 class_intf->remove_dev(dev, class_intf);
3097
3098 klist_del(&dev->p->knode_class);
3099 mutex_unlock(&dev->class->p->mutex);
3100 }
3101 device_remove_file(dev, &dev_attr_uevent);
3102 device_remove_attrs(dev);
3103 bus_remove_device(dev);
3104 device_pm_remove(dev);
3105 driver_deferred_probe_del(dev);
3106 device_platform_notify(dev, KOBJ_REMOVE);
3107 device_remove_properties(dev);
3108 device_links_purge(dev);
3109
3110 if (dev->bus)
3111 blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
3112 BUS_NOTIFY_REMOVED_DEVICE, dev);
3113 kobject_uevent(&dev->kobj, KOBJ_REMOVE);
3114 glue_dir = get_glue_dir(dev);
3115 kobject_del(&dev->kobj);
3116 cleanup_glue_dir(dev, glue_dir);
3117 put_device(parent);
3118}
3119EXPORT_SYMBOL_GPL(device_del);
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132void device_unregister(struct device *dev)
3133{
3134 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
3135 device_del(dev);
3136 put_device(dev);
3137}
3138EXPORT_SYMBOL_GPL(device_unregister);
3139
3140static struct device *prev_device(struct klist_iter *i)
3141{
3142 struct klist_node *n = klist_prev(i);
3143 struct device *dev = NULL;
3144 struct device_private *p;
3145
3146 if (n) {
3147 p = to_device_private_parent(n);
3148 dev = p->device;
3149 }
3150 return dev;
3151}
3152
3153static struct device *next_device(struct klist_iter *i)
3154{
3155 struct klist_node *n = klist_next(i);
3156 struct device *dev = NULL;
3157 struct device_private *p;
3158
3159 if (n) {
3160 p = to_device_private_parent(n);
3161 dev = p->device;
3162 }
3163 return dev;
3164}
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179const char *device_get_devnode(struct device *dev,
3180 umode_t *mode, kuid_t *uid, kgid_t *gid,
3181 const char **tmp)
3182{
3183 char *s;
3184
3185 *tmp = NULL;
3186
3187
3188 if (dev->type && dev->type->devnode)
3189 *tmp = dev->type->devnode(dev, mode, uid, gid);
3190 if (*tmp)
3191 return *tmp;
3192
3193
3194 if (dev->class && dev->class->devnode)
3195 *tmp = dev->class->devnode(dev, mode);
3196 if (*tmp)
3197 return *tmp;
3198
3199
3200 if (strchr(dev_name(dev), '!') == NULL)
3201 return dev_name(dev);
3202
3203
3204 s = kstrdup(dev_name(dev), GFP_KERNEL);
3205 if (!s)
3206 return NULL;
3207 strreplace(s, '!', '/');
3208 return *tmp = s;
3209}
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223int device_for_each_child(struct device *parent, void *data,
3224 int (*fn)(struct device *dev, void *data))
3225{
3226 struct klist_iter i;
3227 struct device *child;
3228 int error = 0;
3229
3230 if (!parent->p)
3231 return 0;
3232
3233 klist_iter_init(&parent->p->klist_children, &i);
3234 while (!error && (child = next_device(&i)))
3235 error = fn(child, data);
3236 klist_iter_exit(&i);
3237 return error;
3238}
3239EXPORT_SYMBOL_GPL(device_for_each_child);
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253int device_for_each_child_reverse(struct device *parent, void *data,
3254 int (*fn)(struct device *dev, void *data))
3255{
3256 struct klist_iter i;
3257 struct device *child;
3258 int error = 0;
3259
3260 if (!parent->p)
3261 return 0;
3262
3263 klist_iter_init(&parent->p->klist_children, &i);
3264 while ((child = prev_device(&i)) && !error)
3265 error = fn(child, data);
3266 klist_iter_exit(&i);
3267 return error;
3268}
3269EXPORT_SYMBOL_GPL(device_for_each_child_reverse);
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288struct device *device_find_child(struct device *parent, void *data,
3289 int (*match)(struct device *dev, void *data))
3290{
3291 struct klist_iter i;
3292 struct device *child;
3293
3294 if (!parent)
3295 return NULL;
3296
3297 klist_iter_init(&parent->p->klist_children, &i);
3298 while ((child = next_device(&i)))
3299 if (match(child, data) && get_device(child))
3300 break;
3301 klist_iter_exit(&i);
3302 return child;
3303}
3304EXPORT_SYMBOL_GPL(device_find_child);
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316struct device *device_find_child_by_name(struct device *parent,
3317 const char *name)
3318{
3319 struct klist_iter i;
3320 struct device *child;
3321
3322 if (!parent)
3323 return NULL;
3324
3325 klist_iter_init(&parent->p->klist_children, &i);
3326 while ((child = next_device(&i)))
3327 if (!strcmp(dev_name(child), name) && get_device(child))
3328 break;
3329 klist_iter_exit(&i);
3330 return child;
3331}
3332EXPORT_SYMBOL_GPL(device_find_child_by_name);
3333
3334int __init devices_init(void)
3335{
3336 devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);
3337 if (!devices_kset)
3338 return -ENOMEM;
3339 dev_kobj = kobject_create_and_add("dev", NULL);
3340 if (!dev_kobj)
3341 goto dev_kobj_err;
3342 sysfs_dev_block_kobj = kobject_create_and_add("block", dev_kobj);
3343 if (!sysfs_dev_block_kobj)
3344 goto block_kobj_err;
3345 sysfs_dev_char_kobj = kobject_create_and_add("char", dev_kobj);
3346 if (!sysfs_dev_char_kobj)
3347 goto char_kobj_err;
3348
3349 return 0;
3350
3351 char_kobj_err:
3352 kobject_put(sysfs_dev_block_kobj);
3353 block_kobj_err:
3354 kobject_put(dev_kobj);
3355 dev_kobj_err:
3356 kset_unregister(devices_kset);
3357 return -ENOMEM;
3358}
3359
3360static int device_check_offline(struct device *dev, void *not_used)
3361{
3362 int ret;
3363
3364 ret = device_for_each_child(dev, NULL, device_check_offline);
3365 if (ret)
3366 return ret;
3367
3368 return device_supports_offline(dev) && !dev->offline ? -EBUSY : 0;
3369}
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382int device_offline(struct device *dev)
3383{
3384 int ret;
3385
3386 if (dev->offline_disabled)
3387 return -EPERM;
3388
3389 ret = device_for_each_child(dev, NULL, device_check_offline);
3390 if (ret)
3391 return ret;
3392
3393 device_lock(dev);
3394 if (device_supports_offline(dev)) {
3395 if (dev->offline) {
3396 ret = 1;
3397 } else {
3398 ret = dev->bus->offline(dev);
3399 if (!ret) {
3400 kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
3401 dev->offline = true;
3402 }
3403 }
3404 }
3405 device_unlock(dev);
3406
3407 return ret;
3408}
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420int device_online(struct device *dev)
3421{
3422 int ret = 0;
3423
3424 device_lock(dev);
3425 if (device_supports_offline(dev)) {
3426 if (dev->offline) {
3427 ret = dev->bus->online(dev);
3428 if (!ret) {
3429 kobject_uevent(&dev->kobj, KOBJ_ONLINE);
3430 dev->offline = false;
3431 }
3432 } else {
3433 ret = 1;
3434 }
3435 }
3436 device_unlock(dev);
3437
3438 return ret;
3439}
3440
3441struct root_device {
3442 struct device dev;
3443 struct module *owner;
3444};
3445
3446static inline struct root_device *to_root_device(struct device *d)
3447{
3448 return container_of(d, struct root_device, dev);
3449}
3450
3451static void root_device_release(struct device *dev)
3452{
3453 kfree(to_root_device(dev));
3454}
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478struct device *__root_device_register(const char *name, struct module *owner)
3479{
3480 struct root_device *root;
3481 int err = -ENOMEM;
3482
3483 root = kzalloc(sizeof(struct root_device), GFP_KERNEL);
3484 if (!root)
3485 return ERR_PTR(err);
3486
3487 err = dev_set_name(&root->dev, "%s", name);
3488 if (err) {
3489 kfree(root);
3490 return ERR_PTR(err);
3491 }
3492
3493 root->dev.release = root_device_release;
3494
3495 err = device_register(&root->dev);
3496 if (err) {
3497 put_device(&root->dev);
3498 return ERR_PTR(err);
3499 }
3500
3501#ifdef CONFIG_MODULES
3502 if (owner) {
3503 struct module_kobject *mk = &owner->mkobj;
3504
3505 err = sysfs_create_link(&root->dev.kobj, &mk->kobj, "module");
3506 if (err) {
3507 device_unregister(&root->dev);
3508 return ERR_PTR(err);
3509 }
3510 root->owner = owner;
3511 }
3512#endif
3513
3514 return &root->dev;
3515}
3516EXPORT_SYMBOL_GPL(__root_device_register);
3517
3518
3519
3520
3521
3522
3523
3524
3525void root_device_unregister(struct device *dev)
3526{
3527 struct root_device *root = to_root_device(dev);
3528
3529 if (root->owner)
3530 sysfs_remove_link(&root->dev.kobj, "module");
3531
3532 device_unregister(dev);
3533}
3534EXPORT_SYMBOL_GPL(root_device_unregister);
3535
3536
3537static void device_create_release(struct device *dev)
3538{
3539 pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
3540 kfree(dev);
3541}
3542
3543static __printf(6, 0) struct device *
3544device_create_groups_vargs(struct class *class, struct device *parent,
3545 dev_t devt, void *drvdata,
3546 const struct attribute_group **groups,
3547 const char *fmt, va_list args)
3548{
3549 struct device *dev = NULL;
3550 int retval = -ENODEV;
3551
3552 if (class == NULL || IS_ERR(class))
3553 goto error;
3554
3555 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3556 if (!dev) {
3557 retval = -ENOMEM;
3558 goto error;
3559 }
3560
3561 device_initialize(dev);
3562 dev->devt = devt;
3563 dev->class = class;
3564 dev->parent = parent;
3565 dev->groups = groups;
3566 dev->release = device_create_release;
3567 dev_set_drvdata(dev, drvdata);
3568
3569 retval = kobject_set_name_vargs(&dev->kobj, fmt, args);
3570 if (retval)
3571 goto error;
3572
3573 retval = device_add(dev);
3574 if (retval)
3575 goto error;
3576
3577 return dev;
3578
3579error:
3580 put_device(dev);
3581 return ERR_PTR(retval);
3582}
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608struct device *device_create(struct class *class, struct device *parent,
3609 dev_t devt, void *drvdata, const char *fmt, ...)
3610{
3611 va_list vargs;
3612 struct device *dev;
3613
3614 va_start(vargs, fmt);
3615 dev = device_create_groups_vargs(class, parent, devt, drvdata, NULL,
3616 fmt, vargs);
3617 va_end(vargs);
3618 return dev;
3619}
3620EXPORT_SYMBOL_GPL(device_create);
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649struct device *device_create_with_groups(struct class *class,
3650 struct device *parent, dev_t devt,
3651 void *drvdata,
3652 const struct attribute_group **groups,
3653 const char *fmt, ...)
3654{
3655 va_list vargs;
3656 struct device *dev;
3657
3658 va_start(vargs, fmt);
3659 dev = device_create_groups_vargs(class, parent, devt, drvdata, groups,
3660 fmt, vargs);
3661 va_end(vargs);
3662 return dev;
3663}
3664EXPORT_SYMBOL_GPL(device_create_with_groups);
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674void device_destroy(struct class *class, dev_t devt)
3675{
3676 struct device *dev;
3677
3678 dev = class_find_device_by_devt(class, devt);
3679 if (dev) {
3680 put_device(dev);
3681 device_unregister(dev);
3682 }
3683}
3684EXPORT_SYMBOL_GPL(device_destroy);
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725int device_rename(struct device *dev, const char *new_name)
3726{
3727 struct kobject *kobj = &dev->kobj;
3728 char *old_device_name = NULL;
3729 int error;
3730
3731 dev = get_device(dev);
3732 if (!dev)
3733 return -EINVAL;
3734
3735 dev_dbg(dev, "renaming to %s\n", new_name);
3736
3737 old_device_name = kstrdup(dev_name(dev), GFP_KERNEL);
3738 if (!old_device_name) {
3739 error = -ENOMEM;
3740 goto out;
3741 }
3742
3743 if (dev->class) {
3744 error = sysfs_rename_link_ns(&dev->class->p->subsys.kobj,
3745 kobj, old_device_name,
3746 new_name, kobject_namespace(kobj));
3747 if (error)
3748 goto out;
3749 }
3750
3751 error = kobject_rename(kobj, new_name);
3752 if (error)
3753 goto out;
3754
3755out:
3756 put_device(dev);
3757
3758 kfree(old_device_name);
3759
3760 return error;
3761}
3762EXPORT_SYMBOL_GPL(device_rename);
3763
3764static int device_move_class_links(struct device *dev,
3765 struct device *old_parent,
3766 struct device *new_parent)
3767{
3768 int error = 0;
3769
3770 if (old_parent)
3771 sysfs_remove_link(&dev->kobj, "device");
3772 if (new_parent)
3773 error = sysfs_create_link(&dev->kobj, &new_parent->kobj,
3774 "device");
3775 return error;
3776}
3777
3778
3779
3780
3781
3782
3783
3784int device_move(struct device *dev, struct device *new_parent,
3785 enum dpm_order dpm_order)
3786{
3787 int error;
3788 struct device *old_parent;
3789 struct kobject *new_parent_kobj;
3790
3791 dev = get_device(dev);
3792 if (!dev)
3793 return -EINVAL;
3794
3795 device_pm_lock();
3796 new_parent = get_device(new_parent);
3797 new_parent_kobj = get_device_parent(dev, new_parent);
3798 if (IS_ERR(new_parent_kobj)) {
3799 error = PTR_ERR(new_parent_kobj);
3800 put_device(new_parent);
3801 goto out;
3802 }
3803
3804 pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev),
3805 __func__, new_parent ? dev_name(new_parent) : "<NULL>");
3806 error = kobject_move(&dev->kobj, new_parent_kobj);
3807 if (error) {
3808 cleanup_glue_dir(dev, new_parent_kobj);
3809 put_device(new_parent);
3810 goto out;
3811 }
3812 old_parent = dev->parent;
3813 dev->parent = new_parent;
3814 if (old_parent)
3815 klist_remove(&dev->p->knode_parent);
3816 if (new_parent) {
3817 klist_add_tail(&dev->p->knode_parent,
3818 &new_parent->p->klist_children);
3819 set_dev_node(dev, dev_to_node(new_parent));
3820 }
3821
3822 if (dev->class) {
3823 error = device_move_class_links(dev, old_parent, new_parent);
3824 if (error) {
3825
3826 device_move_class_links(dev, new_parent, old_parent);
3827 if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
3828 if (new_parent)
3829 klist_remove(&dev->p->knode_parent);
3830 dev->parent = old_parent;
3831 if (old_parent) {
3832 klist_add_tail(&dev->p->knode_parent,
3833 &old_parent->p->klist_children);
3834 set_dev_node(dev, dev_to_node(old_parent));
3835 }
3836 }
3837 cleanup_glue_dir(dev, new_parent_kobj);
3838 put_device(new_parent);
3839 goto out;
3840 }
3841 }
3842 switch (dpm_order) {
3843 case DPM_ORDER_NONE:
3844 break;
3845 case DPM_ORDER_DEV_AFTER_PARENT:
3846 device_pm_move_after(dev, new_parent);
3847 devices_kset_move_after(dev, new_parent);
3848 break;
3849 case DPM_ORDER_PARENT_BEFORE_DEV:
3850 device_pm_move_before(new_parent, dev);
3851 devices_kset_move_before(new_parent, dev);
3852 break;
3853 case DPM_ORDER_DEV_LAST:
3854 device_pm_move_last(dev);
3855 devices_kset_move_last(dev);
3856 break;
3857 }
3858
3859 put_device(old_parent);
3860out:
3861 device_pm_unlock();
3862 put_device(dev);
3863 return error;
3864}
3865EXPORT_SYMBOL_GPL(device_move);
3866
3867static int device_attrs_change_owner(struct device *dev, kuid_t kuid,
3868 kgid_t kgid)
3869{
3870 struct kobject *kobj = &dev->kobj;
3871 struct class *class = dev->class;
3872 const struct device_type *type = dev->type;
3873 int error;
3874
3875 if (class) {
3876
3877
3878
3879
3880 error = sysfs_groups_change_owner(kobj, class->dev_groups, kuid,
3881 kgid);
3882 if (error)
3883 return error;
3884 }
3885
3886 if (type) {
3887
3888
3889
3890
3891 error = sysfs_groups_change_owner(kobj, type->groups, kuid,
3892 kgid);
3893 if (error)
3894 return error;
3895 }
3896
3897
3898 error = sysfs_groups_change_owner(kobj, dev->groups, kuid, kgid);
3899 if (error)
3900 return error;
3901
3902 if (device_supports_offline(dev) && !dev->offline_disabled) {
3903
3904 error = sysfs_file_change_owner(kobj, dev_attr_online.attr.name,
3905 kuid, kgid);
3906 if (error)
3907 return error;
3908 }
3909
3910 return 0;
3911}
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925int device_change_owner(struct device *dev, kuid_t kuid, kgid_t kgid)
3926{
3927 int error;
3928 struct kobject *kobj = &dev->kobj;
3929
3930 dev = get_device(dev);
3931 if (!dev)
3932 return -EINVAL;
3933
3934
3935
3936
3937
3938 error = sysfs_change_owner(kobj, kuid, kgid);
3939 if (error)
3940 goto out;
3941
3942
3943
3944
3945
3946
3947 error = sysfs_file_change_owner(kobj, dev_attr_uevent.attr.name, kuid,
3948 kgid);
3949 if (error)
3950 goto out;
3951
3952
3953
3954
3955
3956
3957 error = device_attrs_change_owner(dev, kuid, kgid);
3958 if (error)
3959 goto out;
3960
3961 error = dpm_sysfs_change_owner(dev, kuid, kgid);
3962 if (error)
3963 goto out;
3964
3965#ifdef CONFIG_BLOCK
3966 if (sysfs_deprecated && dev->class == &block_class)
3967 goto out;
3968#endif
3969
3970
3971
3972
3973
3974
3975
3976 error = sysfs_link_change_owner(&dev->class->p->subsys.kobj, &dev->kobj,
3977 dev_name(dev), kuid, kgid);
3978 if (error)
3979 goto out;
3980
3981out:
3982 put_device(dev);
3983 return error;
3984}
3985EXPORT_SYMBOL_GPL(device_change_owner);
3986
3987
3988
3989
3990void device_shutdown(void)
3991{
3992 struct device *dev, *parent;
3993
3994 wait_for_device_probe();
3995 device_block_probing();
3996
3997 cpufreq_suspend();
3998
3999 spin_lock(&devices_kset->list_lock);
4000
4001
4002
4003
4004
4005 while (!list_empty(&devices_kset->list)) {
4006 dev = list_entry(devices_kset->list.prev, struct device,
4007 kobj.entry);
4008
4009
4010
4011
4012
4013
4014 parent = get_device(dev->parent);
4015 get_device(dev);
4016
4017
4018
4019
4020 list_del_init(&dev->kobj.entry);
4021 spin_unlock(&devices_kset->list_lock);
4022
4023
4024 if (parent)
4025 device_lock(parent);
4026 device_lock(dev);
4027
4028
4029 pm_runtime_get_noresume(dev);
4030 pm_runtime_barrier(dev);
4031
4032 if (dev->class && dev->class->shutdown_pre) {
4033 if (initcall_debug)
4034 dev_info(dev, "shutdown_pre\n");
4035 dev->class->shutdown_pre(dev);
4036 }
4037 if (dev->bus && dev->bus->shutdown) {
4038 if (initcall_debug)
4039 dev_info(dev, "shutdown\n");
4040 dev->bus->shutdown(dev);
4041 } else if (dev->driver && dev->driver->shutdown) {
4042 if (initcall_debug)
4043 dev_info(dev, "shutdown\n");
4044 dev->driver->shutdown(dev);
4045 }
4046
4047 device_unlock(dev);
4048 if (parent)
4049 device_unlock(parent);
4050
4051 put_device(dev);
4052 put_device(parent);
4053
4054 spin_lock(&devices_kset->list_lock);
4055 }
4056 spin_unlock(&devices_kset->list_lock);
4057}
4058
4059
4060
4061
4062
4063#ifdef CONFIG_PRINTK
4064static int
4065create_syslog_header(const struct device *dev, char *hdr, size_t hdrlen)
4066{
4067 const char *subsys;
4068 size_t pos = 0;
4069
4070 if (dev->class)
4071 subsys = dev->class->name;
4072 else if (dev->bus)
4073 subsys = dev->bus->name;
4074 else
4075 return 0;
4076
4077 pos += snprintf(hdr + pos, hdrlen - pos, "SUBSYSTEM=%s", subsys);
4078 if (pos >= hdrlen)
4079 goto overflow;
4080
4081
4082
4083
4084
4085
4086
4087
4088 if (MAJOR(dev->devt)) {
4089 char c;
4090
4091 if (strcmp(subsys, "block") == 0)
4092 c = 'b';
4093 else
4094 c = 'c';
4095 pos++;
4096 pos += snprintf(hdr + pos, hdrlen - pos,
4097 "DEVICE=%c%u:%u",
4098 c, MAJOR(dev->devt), MINOR(dev->devt));
4099 } else if (strcmp(subsys, "net") == 0) {
4100 struct net_device *net = to_net_dev(dev);
4101
4102 pos++;
4103 pos += snprintf(hdr + pos, hdrlen - pos,
4104 "DEVICE=n%u", net->ifindex);
4105 } else {
4106 pos++;
4107 pos += snprintf(hdr + pos, hdrlen - pos,
4108 "DEVICE=+%s:%s", subsys, dev_name(dev));
4109 }
4110
4111 if (pos >= hdrlen)
4112 goto overflow;
4113
4114 return pos;
4115
4116overflow:
4117 dev_WARN(dev, "device/subsystem name too long");
4118 return 0;
4119}
4120
4121int dev_vprintk_emit(int level, const struct device *dev,
4122 const char *fmt, va_list args)
4123{
4124 char hdr[128];
4125 size_t hdrlen;
4126
4127 hdrlen = create_syslog_header(dev, hdr, sizeof(hdr));
4128
4129 return vprintk_emit(0, level, hdrlen ? hdr : NULL, hdrlen, fmt, args);
4130}
4131EXPORT_SYMBOL(dev_vprintk_emit);
4132
4133int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...)
4134{
4135 va_list args;
4136 int r;
4137
4138 va_start(args, fmt);
4139
4140 r = dev_vprintk_emit(level, dev, fmt, args);
4141
4142 va_end(args);
4143
4144 return r;
4145}
4146EXPORT_SYMBOL(dev_printk_emit);
4147
4148static void __dev_printk(const char *level, const struct device *dev,
4149 struct va_format *vaf)
4150{
4151 if (dev)
4152 dev_printk_emit(level[1] - '0', dev, "%s %s: %pV",
4153 dev_driver_string(dev), dev_name(dev), vaf);
4154 else
4155 printk("%s(NULL device *): %pV", level, vaf);
4156}
4157
4158void dev_printk(const char *level, const struct device *dev,
4159 const char *fmt, ...)
4160{
4161 struct va_format vaf;
4162 va_list args;
4163
4164 va_start(args, fmt);
4165
4166 vaf.fmt = fmt;
4167 vaf.va = &args;
4168
4169 __dev_printk(level, dev, &vaf);
4170
4171 va_end(args);
4172}
4173EXPORT_SYMBOL(dev_printk);
4174
4175#define define_dev_printk_level(func, kern_level) \
4176void func(const struct device *dev, const char *fmt, ...) \
4177{ \
4178 struct va_format vaf; \
4179 va_list args; \
4180 \
4181 va_start(args, fmt); \
4182 \
4183 vaf.fmt = fmt; \
4184 vaf.va = &args; \
4185 \
4186 __dev_printk(kern_level, dev, &vaf); \
4187 \
4188 va_end(args); \
4189} \
4190EXPORT_SYMBOL(func);
4191
4192define_dev_printk_level(_dev_emerg, KERN_EMERG);
4193define_dev_printk_level(_dev_alert, KERN_ALERT);
4194define_dev_printk_level(_dev_crit, KERN_CRIT);
4195define_dev_printk_level(_dev_err, KERN_ERR);
4196define_dev_printk_level(_dev_warn, KERN_WARNING);
4197define_dev_printk_level(_dev_notice, KERN_NOTICE);
4198define_dev_printk_level(_dev_info, KERN_INFO);
4199
4200#endif
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226int dev_err_probe(const struct device *dev, int err, const char *fmt, ...)
4227{
4228 struct va_format vaf;
4229 va_list args;
4230
4231 va_start(args, fmt);
4232 vaf.fmt = fmt;
4233 vaf.va = &args;
4234
4235 if (err != -EPROBE_DEFER) {
4236 dev_err(dev, "error %pe: %pV", ERR_PTR(err), &vaf);
4237 } else {
4238 device_set_deferred_probe_reason(dev, &vaf);
4239 dev_dbg(dev, "error %pe: %pV", ERR_PTR(err), &vaf);
4240 }
4241
4242 va_end(args);
4243
4244 return err;
4245}
4246EXPORT_SYMBOL_GPL(dev_err_probe);
4247
4248static inline bool fwnode_is_primary(struct fwnode_handle *fwnode)
4249{
4250 return fwnode && !IS_ERR(fwnode->secondary);
4251}
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)
4262{
4263 struct fwnode_handle *fn = dev->fwnode;
4264
4265 if (fwnode) {
4266 if (fwnode_is_primary(fn))
4267 fn = fn->secondary;
4268
4269 if (fn) {
4270 WARN_ON(fwnode->secondary);
4271 fwnode->secondary = fn;
4272 }
4273 dev->fwnode = fwnode;
4274 } else {
4275 if (fwnode_is_primary(fn)) {
4276 dev->fwnode = fn->secondary;
4277 fn->secondary = NULL;
4278 } else {
4279 dev->fwnode = NULL;
4280 }
4281 }
4282}
4283EXPORT_SYMBOL_GPL(set_primary_fwnode);
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode)
4295{
4296 if (fwnode)
4297 fwnode->secondary = ERR_PTR(-ENODEV);
4298
4299 if (fwnode_is_primary(dev->fwnode))
4300 dev->fwnode->secondary = fwnode;
4301 else
4302 dev->fwnode = fwnode;
4303}
4304EXPORT_SYMBOL_GPL(set_secondary_fwnode);
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314void device_set_of_node_from_dev(struct device *dev, const struct device *dev2)
4315{
4316 of_node_put(dev->of_node);
4317 dev->of_node = of_node_get(dev2->of_node);
4318 dev->of_node_reused = true;
4319}
4320EXPORT_SYMBOL_GPL(device_set_of_node_from_dev);
4321
4322int device_match_name(struct device *dev, const void *name)
4323{
4324 return sysfs_streq(dev_name(dev), name);
4325}
4326EXPORT_SYMBOL_GPL(device_match_name);
4327
4328int device_match_of_node(struct device *dev, const void *np)
4329{
4330 return dev->of_node == np;
4331}
4332EXPORT_SYMBOL_GPL(device_match_of_node);
4333
4334int device_match_fwnode(struct device *dev, const void *fwnode)
4335{
4336 return dev_fwnode(dev) == fwnode;
4337}
4338EXPORT_SYMBOL_GPL(device_match_fwnode);
4339
4340int device_match_devt(struct device *dev, const void *pdevt)
4341{
4342 return dev->devt == *(dev_t *)pdevt;
4343}
4344EXPORT_SYMBOL_GPL(device_match_devt);
4345
4346int device_match_acpi_dev(struct device *dev, const void *adev)
4347{
4348 return ACPI_COMPANION(dev) == adev;
4349}
4350EXPORT_SYMBOL(device_match_acpi_dev);
4351
4352int device_match_any(struct device *dev, const void *unused)
4353{
4354 return 1;
4355}
4356EXPORT_SYMBOL_GPL(device_match_any);
4357