diff options
author | Rasmus Villemoes <linux@rasmusvillemoes.dk> | 2022-10-26 00:13:56 +0200 |
---|---|---|
committer | Luis Chamberlain <mcgrof@kernel.org> | 2022-11-11 10:19:52 -0800 |
commit | 96a1a2412acba8c057c041833641d9b7dbf52170 (patch) | |
tree | 13dc35e8462f2f60cbe91e2991097898d1f7be12 | |
parent | 89a6b5917650edd1542194fd5b5ada64fb94a790 (diff) |
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>
-rw-r--r-- | kernel/params.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/kernel/params.c b/kernel/params.c index 8d4e9a3f0df2..a06f80c56f19 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -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) { @@ -964,11 +968,24 @@ static int __init param_sysfs_init(void) 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(); param_sysfs_builtin(); return 0; } -subsys_initcall(param_sysfs_init); +late_initcall(param_sysfs_builtin_init); #endif /* CONFIG_SYSFS */ |