mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
kernel/params.c: defer most of param_sysfs_init() to late_initcall time
param_sysfs_init(), and in particular param_sysfs_builtin() is rather time-consuming; for my board, it currently takes about 30ms. That amounts to about 3% of the time budget I have from U-Boot hands over control to linux and linux must assume responsibility for keeping the external watchdog happy. We must still continue to initialize module_kset at subsys_initcall time, since otherwise any request_module() would fail in mod_sysfs_init(). However, the bulk of the work in param_sysfs_builtin(), namely populating /sys/module/*/version and/or /sys/module/*/parameters/ for builtin modules, can be deferred to late_initcall time - there's no userspace yet anyway to observe contents of /sys or the lack thereof. Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
This commit is contained in:
parent
89a6b59176
commit
96a1a2412a
1 changed files with 19 additions and 2 deletions
|
@ -953,7 +953,11 @@ struct kobj_type module_ktype = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* param_sysfs_init - wrapper for built-in params support
|
* param_sysfs_init - create "module" kset
|
||||||
|
*
|
||||||
|
* This must be done before the initramfs is unpacked and
|
||||||
|
* request_module() thus becomes possible, because otherwise the
|
||||||
|
* module load would fail in mod_sysfs_init.
|
||||||
*/
|
*/
|
||||||
static int __init param_sysfs_init(void)
|
static int __init param_sysfs_init(void)
|
||||||
{
|
{
|
||||||
|
@ -964,11 +968,24 @@ static int __init param_sysfs_init(void)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
subsys_initcall(param_sysfs_init);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* param_sysfs_builtin_init - add sysfs version and parameter
|
||||||
|
* attributes for built-in modules
|
||||||
|
*/
|
||||||
|
static int __init param_sysfs_builtin_init(void)
|
||||||
|
{
|
||||||
|
if (!module_kset)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
version_sysfs_builtin();
|
version_sysfs_builtin();
|
||||||
param_sysfs_builtin();
|
param_sysfs_builtin();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
subsys_initcall(param_sysfs_init);
|
late_initcall(param_sysfs_builtin_init);
|
||||||
|
|
||||||
#endif /* CONFIG_SYSFS */
|
#endif /* CONFIG_SYSFS */
|
||||||
|
|
Loading…
Add table
Reference in a new issue