Skip to content

Commit a18d783

Browse files
committed
Merge tag 'driver-core-4.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core updates from Greg KH: "Here are all of the driver core and related patches for 4.19-rc1. Nothing huge here, just a number of small cleanups and the ability to now stop the deferred probing after init happens. All of these have been in linux-next for a while with only a merge issue reported" * tag 'driver-core-4.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (21 commits) base: core: Remove WARN_ON from link dependencies check drivers/base: stop new probing during shutdown drivers: core: Remove glue dirs from sysfs earlier driver core: remove unnecessary function extern declare sysfs.h: fix non-kernel-doc comment PM / Domains: Stop deferring probe at the end of initcall iommu: Remove IOMMU_OF_DECLARE iommu: Stop deferring probe at end of initcalls pinctrl: Support stopping deferred probe after initcalls dt-bindings: pinctrl: add a 'pinctrl-use-default' property driver core: allow stopping deferred probe after init driver core: add a debugfs entry to show deferred devices sysfs: Fix internal_create_group() for named group updates base: fix order of OF initialization linux/device.h: fix kernel-doc notation warning Documentation: update firmware loader fallback reference kobject: Replace strncpy with memcpy drivers: base: cacheinfo: use OF property_read_u32 instead of get_property,read_number kernfs: Replace strncpy with memcpy device: Add #define dev_fmt similar to #define pr_fmt ...
2 parents d5acba2 + d2fc88a commit a18d783

File tree

26 files changed

+272
-161
lines changed

26 files changed

+272
-161
lines changed

Documentation/admin-guide/kernel-parameters.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,15 @@
812812
Defaults to the default architecture's huge page size
813813
if not specified.
814814

815+
deferred_probe_timeout=
816+
[KNL] Debugging option to set a timeout in seconds for
817+
deferred probe to give up waiting on dependencies to
818+
probe. Only specific dependencies (subsystems or
819+
drivers) that have opted in will be ignored. A timeout of 0
820+
will timeout at the end of initcalls. This option will also
821+
dump out devices still on the deferred probe list after
822+
retrying.
823+
815824
dhash_entries= [KNL]
816825
Set number of hash buckets for dentry cache.
817826

Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ Optional properties:
103103
#pinctrl-cells: Number of pin control cells in addition to the index within the
104104
pin controller device instance
105105

106+
pinctrl-use-default: Boolean. Indicates that the OS can use the boot default
107+
pin configuration. This allows using an OS that does not have a
108+
driver for the pin controller. This property can be set either
109+
globally for the pin controller or in child nodes for individual
110+
pin group control.
111+
106112
Pin controller devices should contain the pin configuration nodes that client
107113
devices reference.
108114

Documentation/driver-api/firmware/fallback-mechanisms.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ the loading file.
9292

9393
The firmware device used to help load firmware using sysfs is only created if
9494
direct firmware loading fails and if the fallback mechanism is enabled for your
95-
firmware request, this is set up with fw_load_from_user_helper(). It is
95+
firmware request, this is set up with :c:func:`firmware_fallback_sysfs`. It is
9696
important to re-iterate that no device is created if a direct filesystem lookup
9797
succeeded.
9898

@@ -108,6 +108,11 @@ firmware_data_read() and firmware_loading_show() are just provided for the
108108
test_firmware driver for testing, they are not called in normal use or
109109
expected to be used regularly by userspace.
110110

111+
firmware_fallback_sysfs
112+
-----------------------
113+
.. kernel-doc:: drivers/base/firmware_loader/fallback.c
114+
:functions: firmware_fallback_sysfs
115+
111116
Firmware kobject uevent fallback mechanism
112117
==========================================
113118

drivers/base/base.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,6 @@ struct device_private {
8484
#define to_device_private_bus(obj) \
8585
container_of(obj, struct device_private, knode_bus)
8686

87-
extern int device_private_init(struct device *dev);
88-
8987
/* initialisation functions */
9088
extern int devices_init(void);
9189
extern int buses_init(void);

drivers/base/cacheinfo.c

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,52 +74,48 @@ static inline int get_cacheinfo_idx(enum cache_type type)
7474
static void cache_size(struct cacheinfo *this_leaf, struct device_node *np)
7575
{
7676
const char *propname;
77-
const __be32 *cache_size;
7877
int ct_idx;
7978

8079
ct_idx = get_cacheinfo_idx(this_leaf->type);
8180
propname = cache_type_info[ct_idx].size_prop;
8281

83-
cache_size = of_get_property(np, propname, NULL);
84-
if (cache_size)
85-
this_leaf->size = of_read_number(cache_size, 1);
82+
if (of_property_read_u32(np, propname, &this_leaf->size))
83+
this_leaf->size = 0;
8684
}
8785

8886
/* not cache_line_size() because that's a macro in include/linux/cache.h */
8987
static void cache_get_line_size(struct cacheinfo *this_leaf,
9088
struct device_node *np)
9189
{
92-
const __be32 *line_size;
9390
int i, lim, ct_idx;
9491

9592
ct_idx = get_cacheinfo_idx(this_leaf->type);
9693
lim = ARRAY_SIZE(cache_type_info[ct_idx].line_size_props);
9794

9895
for (i = 0; i < lim; i++) {
96+
int ret;
97+
u32 line_size;
9998
const char *propname;
10099

101100
propname = cache_type_info[ct_idx].line_size_props[i];
102-
line_size = of_get_property(np, propname, NULL);
103-
if (line_size)
101+
ret = of_property_read_u32(np, propname, &line_size);
102+
if (!ret) {
103+
this_leaf->coherency_line_size = line_size;
104104
break;
105+
}
105106
}
106-
107-
if (line_size)
108-
this_leaf->coherency_line_size = of_read_number(line_size, 1);
109107
}
110108

111109
static void cache_nr_sets(struct cacheinfo *this_leaf, struct device_node *np)
112110
{
113111
const char *propname;
114-
const __be32 *nr_sets;
115112
int ct_idx;
116113

117114
ct_idx = get_cacheinfo_idx(this_leaf->type);
118115
propname = cache_type_info[ct_idx].nr_sets_prop;
119116

120-
nr_sets = of_get_property(np, propname, NULL);
121-
if (nr_sets)
122-
this_leaf->number_of_sets = of_read_number(nr_sets, 1);
117+
if (of_property_read_u32(np, propname, &this_leaf->number_of_sets))
118+
this_leaf->number_of_sets = 0;
123119
}
124120

125121
static void cache_associativity(struct cacheinfo *this_leaf)

drivers/base/core.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,15 @@ static int device_is_dependent(struct device *dev, void *target)
105105
struct device_link *link;
106106
int ret;
107107

108-
if (WARN_ON(dev == target))
108+
if (dev == target)
109109
return 1;
110110

111111
ret = device_for_each_child(dev, target, device_is_dependent);
112112
if (ret)
113113
return ret;
114114

115115
list_for_each_entry(link, &dev->links.consumers, s_node) {
116-
if (WARN_ON(link->consumer == target))
116+
if (link->consumer == target)
117117
return 1;
118118

119119
ret = device_is_dependent(link->consumer, target);
@@ -1647,6 +1647,8 @@ static void cleanup_glue_dir(struct device *dev, struct kobject *glue_dir)
16471647
return;
16481648

16491649
mutex_lock(&gdp_mutex);
1650+
if (!kobject_has_children(glue_dir))
1651+
kobject_del(glue_dir);
16501652
kobject_put(glue_dir);
16511653
mutex_unlock(&gdp_mutex);
16521654
}
@@ -1786,7 +1788,7 @@ static void device_remove_sys_dev_entry(struct device *dev)
17861788
}
17871789
}
17881790

1789-
int device_private_init(struct device *dev)
1791+
static int device_private_init(struct device *dev)
17901792
{
17911793
dev->p = kzalloc(sizeof(*dev->p), GFP_KERNEL);
17921794
if (!dev->p)
@@ -2859,6 +2861,9 @@ void device_shutdown(void)
28592861
{
28602862
struct device *dev, *parent;
28612863

2864+
wait_for_device_probe();
2865+
device_block_probing();
2866+
28622867
spin_lock(&devices_kset->list_lock);
28632868
/*
28642869
* Walk the devices list backward, shutting down each in turn.
@@ -3052,12 +3057,12 @@ void func(const struct device *dev, const char *fmt, ...) \
30523057
} \
30533058
EXPORT_SYMBOL(func);
30543059

3055-
define_dev_printk_level(dev_emerg, KERN_EMERG);
3056-
define_dev_printk_level(dev_alert, KERN_ALERT);
3057-
define_dev_printk_level(dev_crit, KERN_CRIT);
3058-
define_dev_printk_level(dev_err, KERN_ERR);
3059-
define_dev_printk_level(dev_warn, KERN_WARNING);
3060-
define_dev_printk_level(dev_notice, KERN_NOTICE);
3060+
define_dev_printk_level(_dev_emerg, KERN_EMERG);
3061+
define_dev_printk_level(_dev_alert, KERN_ALERT);
3062+
define_dev_printk_level(_dev_crit, KERN_CRIT);
3063+
define_dev_printk_level(_dev_err, KERN_ERR);
3064+
define_dev_printk_level(_dev_warn, KERN_WARNING);
3065+
define_dev_printk_level(_dev_notice, KERN_NOTICE);
30613066
define_dev_printk_level(_dev_info, KERN_INFO);
30623067

30633068
#endif

drivers/base/dd.c

Lines changed: 108 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* Copyright (c) 2007-2009 Novell Inc.
1717
*/
1818

19+
#include <linux/debugfs.h>
1920
#include <linux/device.h>
2021
#include <linux/delay.h>
2122
#include <linux/dma-mapping.h>
@@ -53,6 +54,7 @@ static DEFINE_MUTEX(deferred_probe_mutex);
5354
static LIST_HEAD(deferred_probe_pending_list);
5455
static LIST_HEAD(deferred_probe_active_list);
5556
static atomic_t deferred_trigger_count = ATOMIC_INIT(0);
57+
static struct dentry *deferred_devices;
5658
static bool initcalls_done;
5759

5860
/*
@@ -62,26 +64,6 @@ static bool initcalls_done;
6264
*/
6365
static bool defer_all_probes;
6466

65-
/*
66-
* For initcall_debug, show the deferred probes executed in late_initcall
67-
* processing.
68-
*/
69-
static void deferred_probe_debug(struct device *dev)
70-
{
71-
ktime_t calltime, delta, rettime;
72-
unsigned long long duration;
73-
74-
printk(KERN_DEBUG "deferred probe %s @ %i\n", dev_name(dev),
75-
task_pid_nr(current));
76-
calltime = ktime_get();
77-
bus_probe_device(dev);
78-
rettime = ktime_get();
79-
delta = ktime_sub(rettime, calltime);
80-
duration = (unsigned long long) ktime_to_ns(delta) >> 10;
81-
printk(KERN_DEBUG "deferred probe %s returned after %lld usecs\n",
82-
dev_name(dev), duration);
83-
}
84-
8567
/*
8668
* deferred_probe_work_func() - Retry probing devices in the active list.
8769
*/
@@ -125,11 +107,7 @@ static void deferred_probe_work_func(struct work_struct *work)
125107
device_pm_move_to_tail(dev);
126108

127109
dev_dbg(dev, "Retrying from deferred list\n");
128-
if (initcall_debug && !initcalls_done)
129-
deferred_probe_debug(dev);
130-
else
131-
bus_probe_device(dev);
132-
110+
bus_probe_device(dev);
133111
mutex_lock(&deferred_probe_mutex);
134112

135113
put_device(dev);
@@ -224,6 +202,69 @@ void device_unblock_probing(void)
224202
driver_deferred_probe_trigger();
225203
}
226204

205+
/*
206+
* deferred_devs_show() - Show the devices in the deferred probe pending list.
207+
*/
208+
static int deferred_devs_show(struct seq_file *s, void *data)
209+
{
210+
struct device_private *curr;
211+
212+
mutex_lock(&deferred_probe_mutex);
213+
214+
list_for_each_entry(curr, &deferred_probe_pending_list, deferred_probe)
215+
seq_printf(s, "%s\n", dev_name(curr->device));
216+
217+
mutex_unlock(&deferred_probe_mutex);
218+
219+
return 0;
220+
}
221+
DEFINE_SHOW_ATTRIBUTE(deferred_devs);
222+
223+
static int deferred_probe_timeout = -1;
224+
static int __init deferred_probe_timeout_setup(char *str)
225+
{
226+
deferred_probe_timeout = simple_strtol(str, NULL, 10);
227+
return 1;
228+
}
229+
__setup("deferred_probe_timeout=", deferred_probe_timeout_setup);
230+
231+
/**
232+
* driver_deferred_probe_check_state() - Check deferred probe state
233+
* @dev: device to check
234+
*
235+
* Returns -ENODEV if init is done and all built-in drivers have had a chance
236+
* to probe (i.e. initcalls are done), -ETIMEDOUT if deferred probe debug
237+
* timeout has expired, or -EPROBE_DEFER if none of those conditions are met.
238+
*
239+
* Drivers or subsystems can opt-in to calling this function instead of directly
240+
* returning -EPROBE_DEFER.
241+
*/
242+
int driver_deferred_probe_check_state(struct device *dev)
243+
{
244+
if (initcalls_done) {
245+
if (!deferred_probe_timeout) {
246+
dev_WARN(dev, "deferred probe timeout, ignoring dependency");
247+
return -ETIMEDOUT;
248+
}
249+
dev_warn(dev, "ignoring dependency for device, assuming no driver");
250+
return -ENODEV;
251+
}
252+
return -EPROBE_DEFER;
253+
}
254+
255+
static void deferred_probe_timeout_work_func(struct work_struct *work)
256+
{
257+
struct device_private *private, *p;
258+
259+
deferred_probe_timeout = 0;
260+
driver_deferred_probe_trigger();
261+
flush_work(&deferred_probe_work);
262+
263+
list_for_each_entry_safe(private, p, &deferred_probe_pending_list, deferred_probe)
264+
dev_info(private->device, "deferred probe pending");
265+
}
266+
static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func);
267+
227268
/**
228269
* deferred_probe_initcall() - Enable probing of deferred devices
229270
*
@@ -233,15 +274,36 @@ void device_unblock_probing(void)
233274
*/
234275
static int deferred_probe_initcall(void)
235276
{
277+
deferred_devices = debugfs_create_file("devices_deferred", 0444, NULL,
278+
NULL, &deferred_devs_fops);
279+
236280
driver_deferred_probe_enable = true;
237281
driver_deferred_probe_trigger();
238282
/* Sort as many dependencies as possible before exiting initcalls */
239283
flush_work(&deferred_probe_work);
240284
initcalls_done = true;
285+
286+
/*
287+
* Trigger deferred probe again, this time we won't defer anything
288+
* that is optional
289+
*/
290+
driver_deferred_probe_trigger();
291+
flush_work(&deferred_probe_work);
292+
293+
if (deferred_probe_timeout > 0) {
294+
schedule_delayed_work(&deferred_probe_timeout_work,
295+
deferred_probe_timeout * HZ);
296+
}
241297
return 0;
242298
}
243299
late_initcall(deferred_probe_initcall);
244300

301+
static void __exit deferred_probe_exit(void)
302+
{
303+
debugfs_remove_recursive(deferred_devices);
304+
}
305+
__exitcall(deferred_probe_exit);
306+
245307
/**
246308
* device_is_bound() - Check if device is bound to a driver
247309
* @dev: device to check
@@ -519,6 +581,23 @@ static int really_probe(struct device *dev, struct device_driver *drv)
519581
return ret;
520582
}
521583

584+
/*
585+
* For initcall_debug, show the driver probe time.
586+
*/
587+
static int really_probe_debug(struct device *dev, struct device_driver *drv)
588+
{
589+
ktime_t calltime, delta, rettime;
590+
int ret;
591+
592+
calltime = ktime_get();
593+
ret = really_probe(dev, drv);
594+
rettime = ktime_get();
595+
delta = ktime_sub(rettime, calltime);
596+
printk(KERN_DEBUG "probe of %s returned %d after %lld usecs\n",
597+
dev_name(dev), ret, (s64) ktime_to_us(delta));
598+
return ret;
599+
}
600+
522601
/**
523602
* driver_probe_done
524603
* Determine if the probe sequence is finished or not.
@@ -577,7 +656,10 @@ int driver_probe_device(struct device_driver *drv, struct device *dev)
577656
pm_runtime_get_sync(dev->parent);
578657

579658
pm_runtime_barrier(dev);
580-
ret = really_probe(dev, drv);
659+
if (initcall_debug)
660+
ret = really_probe_debug(dev, drv);
661+
else
662+
ret = really_probe(dev, drv);
581663
pm_request_idle(dev);
582664

583665
if (dev->parent)

drivers/base/init.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ void __init driver_init(void)
3030
/* These are also core pieces, but must come after the
3131
* core core pieces.
3232
*/
33+
of_core_init();
3334
platform_bus_init();
3435
cpu_dev_init();
3536
memory_dev_init();
3637
container_dev_init();
37-
of_core_init();
3838
}

0 commit comments

Comments
 (0)