The usermode helper declarations were previously provided by linux/kmod.h but commit c1f3fa2a4fde ("kmod: split off umh headers into its own file") moved them to linux/umh.h in 2017. Add explicit includes of linux/umh.h to files that use usermode helpers and remove linux/kmod.h where it is no longer needed.
Also add a missing include of linux/sysctl.h to kernel/time/jiffies.c.
Finally, clean up linux/kmod.h so that it includes only the headers that it actually requires, importantly removing the compat linux/umh.h include.
This cleanup is motivated by trying to reduce the preprocessed size of linux/module.h, which includes linux/kmod.h. The linux/module.h header is included by every *.mod.c file to provide `struct module` and other related definitions, so it should avoid pulling in unnecessary dependencies. Note that this series doesn't immediately improve the situation, since most of the files included by linux/kmod.h are, for now, also included by linux/module.h through other paths.
Apologies for the wide distribution. Acked-bys are appreciated.
Changes in v2: - Remove the linux/kmod.h include from kernel/cgroup/cgroup-v1.c. - Add a missing include of linux/sysctl.h to kernel/time/jiffies.c. - Link to v1: https://lore.kernel.org/linux-modules/20260708154510.6794-1-petr.pavlu@suse....
Petr Pavlu (3): umh, treewide: Explicitly include linux/umh.h where needed time/jiffies: Include linux/sysctl.h for proc_int_u2k_conv_uop(), ... module: Bring includes in linux/kmod.h up to date
arch/x86/kernel/cpu/mce/dev-mcelog.c | 2 +- drivers/block/drbd/drbd_nl.c | 1 + drivers/greybus/svc_watchdog.c | 1 + drivers/macintosh/windfarm_core.c | 1 + drivers/pnp/pnpbios/core.c | 2 +- drivers/video/fbdev/uvesafb.c | 1 + fs/coredump.c | 2 +- fs/nfs/cache_lib.c | 2 +- fs/nfsd/nfs4layouts.c | 2 +- fs/nfsd/nfs4recover.c | 1 + fs/ocfs2/stackglue.c | 1 + include/linux/kmod.h | 12 ++---------- kernel/cgroup/cgroup-v1.c | 2 +- kernel/module/kmod.c | 1 + kernel/power/process.c | 2 +- kernel/reboot.c | 2 +- kernel/time/jiffies.c | 1 + kernel/umh.c | 2 +- lib/kobject_uevent.c | 2 +- net/bridge/br_stp_if.c | 2 +- security/keys/request_key.c | 2 +- security/tomoyo/common.h | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-)
The usermode helper declarations were previously provided by linux/kmod.h but commit c1f3fa2a4fde ("kmod: split off umh headers into its own file") moved them to linux/umh.h in 2017. Add explicit includes of linux/umh.h to files that use usermode helpers and remove linux/kmod.h where it is no longer needed.
Signed-off-by: Petr Pavlu petr.pavlu@suse.com --- arch/x86/kernel/cpu/mce/dev-mcelog.c | 2 +- drivers/block/drbd/drbd_nl.c | 1 + drivers/greybus/svc_watchdog.c | 1 + drivers/macintosh/windfarm_core.c | 1 + drivers/pnp/pnpbios/core.c | 2 +- drivers/video/fbdev/uvesafb.c | 1 + fs/coredump.c | 2 +- fs/nfs/cache_lib.c | 2 +- fs/nfsd/nfs4layouts.c | 2 +- fs/nfsd/nfs4recover.c | 1 + fs/ocfs2/stackglue.c | 1 + kernel/cgroup/cgroup-v1.c | 2 +- kernel/module/kmod.c | 1 + kernel/power/process.c | 2 +- kernel/reboot.c | 2 +- kernel/umh.c | 2 +- lib/kobject_uevent.c | 2 +- net/bridge/br_stp_if.c | 2 +- security/keys/request_key.c | 2 +- security/tomoyo/common.h | 2 +- 20 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/arch/x86/kernel/cpu/mce/dev-mcelog.c b/arch/x86/kernel/cpu/mce/dev-mcelog.c index 053555206d81..af4e76babe7a 100644 --- a/arch/x86/kernel/cpu/mce/dev-mcelog.c +++ b/arch/x86/kernel/cpu/mce/dev-mcelog.c @@ -11,7 +11,7 @@
#include <linux/miscdevice.h> #include <linux/slab.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/poll.h>
#include "internal.h" diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index f9ffcd67607b..de90cf4a0789 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -14,6 +14,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/module.h> +#include <linux/umh.h> #include <linux/drbd.h> #include <linux/in.h> #include <linux/fs.h> diff --git a/drivers/greybus/svc_watchdog.c b/drivers/greybus/svc_watchdog.c index 16e6de5e9eff..b318eb34bcca 100644 --- a/drivers/greybus/svc_watchdog.c +++ b/drivers/greybus/svc_watchdog.c @@ -7,6 +7,7 @@
#include <linux/delay.h> #include <linux/suspend.h> +#include <linux/umh.h> #include <linux/workqueue.h> #include <linux/greybus.h>
diff --git a/drivers/macintosh/windfarm_core.c b/drivers/macintosh/windfarm_core.c index 5307b1e34261..e66de11c69a3 100644 --- a/drivers/macintosh/windfarm_core.c +++ b/drivers/macintosh/windfarm_core.c @@ -34,6 +34,7 @@ #include <linux/platform_device.h> #include <linux/mutex.h> #include <linux/freezer.h> +#include <linux/umh.h>
#include "windfarm.h"
diff --git a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c index f7e86ae9f72f..46af1f549337 100644 --- a/drivers/pnp/pnpbios/core.c +++ b/drivers/pnp/pnpbios/core.c @@ -47,7 +47,7 @@ #include <linux/delay.h> #include <linux/acpi.h> #include <linux/freezer.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/kthread.h>
#include <asm/page.h> diff --git a/drivers/video/fbdev/uvesafb.c b/drivers/video/fbdev/uvesafb.c index 9d82326c744f..6c503e6914d6 100644 --- a/drivers/video/fbdev/uvesafb.c +++ b/drivers/video/fbdev/uvesafb.c @@ -23,6 +23,7 @@ #include <linux/io.h> #include <linux/mutex.h> #include <linux/slab.h> +#include <linux/umh.h> #include <video/edid.h> #include <video/uvesafb.h> #ifdef CONFIG_X86 diff --git a/fs/coredump.c b/fs/coredump.c index e68a76ff92a3..4908b44f6fdc 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -32,7 +32,7 @@ #include <linux/tsacct_kern.h> #include <linux/cn_proc.h> #include <linux/audit.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/fsnotify.h> #include <linux/fs_struct.h> #include <linux/pipe_fs_i.h> diff --git a/fs/nfs/cache_lib.c b/fs/nfs/cache_lib.c index 9738a1ae92ca..ca4e81d4e315 100644 --- a/fs/nfs/cache_lib.c +++ b/fs/nfs/cache_lib.c @@ -6,7 +6,7 @@ * * Copyright (c) 2009 Trond Myklebust Trond.Myklebust@netapp.com */ -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/mount.h> diff --git a/fs/nfsd/nfs4layouts.c b/fs/nfsd/nfs4layouts.c index f34320e4c2f4..008f0f088c3a 100644 --- a/fs/nfsd/nfs4layouts.c +++ b/fs/nfsd/nfs4layouts.c @@ -3,7 +3,7 @@ * Copyright (c) 2014 Christoph Hellwig. */ #include <linux/exportfs_block.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/file.h> #include <linux/jhash.h> #include <linux/sched.h> diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index 6ea25a52d2f4..20b98e43f668 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c @@ -41,6 +41,7 @@ #include <linux/fs.h> #include <linux/hex.h> #include <linux/module.h> +#include <linux/umh.h> #include <net/net_namespace.h> #include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/sunrpc/clnt.h> diff --git a/fs/ocfs2/stackglue.c b/fs/ocfs2/stackglue.c index 741d6191d871..0ccaab29426d 100644 --- a/fs/ocfs2/stackglue.c +++ b/fs/ocfs2/stackglue.c @@ -18,6 +18,7 @@ #include <linux/kobject.h> #include <linux/sysfs.h> #include <linux/sysctl.h> +#include <linux/umh.h>
#include "ocfs2_fs.h"
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c index a4337c9b5287..cbcde5c28b18 100644 --- a/kernel/cgroup/cgroup-v1.c +++ b/kernel/cgroup/cgroup-v1.c @@ -2,7 +2,7 @@ #include "cgroup-internal.h"
#include <linux/ctype.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/sort.h> #include <linux/delay.h> #include <linux/mm.h> diff --git a/kernel/module/kmod.c b/kernel/module/kmod.c index a25dccdf7aa7..dcaad5d65275 100644 --- a/kernel/module/kmod.c +++ b/kernel/module/kmod.c @@ -28,6 +28,7 @@ #include <linux/ptrace.h> #include <linux/async.h> #include <linux/uaccess.h> +#include <linux/umh.h>
#include <trace/events/module.h> #include "internal.h" diff --git a/kernel/power/process.c b/kernel/power/process.c index dc0dfc349f22..295904ec9a82 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -16,7 +16,7 @@ #include <linux/freezer.h> #include <linux/delay.h> #include <linux/workqueue.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <trace/events/power.h> #include <linux/cpuset.h>
diff --git a/kernel/reboot.c b/kernel/reboot.c index 695c33e75efd..3d4a262973e7 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -11,13 +11,13 @@ #include <linux/ctype.h> #include <linux/export.h> #include <linux/kexec.h> -#include <linux/kmod.h> #include <linux/kmsg_dump.h> #include <linux/reboot.h> #include <linux/suspend.h> #include <linux/syscalls.h> #include <linux/syscore_ops.h> #include <linux/uaccess.h> +#include <linux/umh.h>
/* * this indicates whether you can reboot with ctrl-alt-del: the default is yes diff --git a/kernel/umh.c b/kernel/umh.c index 48117c569e1a..72b2d9a878aa 100644 --- a/kernel/umh.c +++ b/kernel/umh.c @@ -8,7 +8,7 @@ #include <linux/binfmts.h> #include <linux/syscalls.h> #include <linux/unistd.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/slab.h> #include <linux/completion.h> #include <linux/cred.h> diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c index ddbc4d7482d2..a67129e452a3 100644 --- a/lib/kobject_uevent.c +++ b/lib/kobject_uevent.c @@ -17,7 +17,7 @@ #include <linux/string.h> #include <linux/kobject.h> #include <linux/export.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/slab.h> #include <linux/socket.h> #include <linux/skbuff.h> diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c index a7e5422eb5d1..89bc161a4b47 100644 --- a/net/bridge/br_stp_if.c +++ b/net/bridge/br_stp_if.c @@ -8,7 +8,7 @@ */
#include <linux/kernel.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/etherdevice.h> #include <linux/rtnetlink.h> #include <net/switchdev.h> diff --git a/security/keys/request_key.c b/security/keys/request_key.c index fa2bb9f2f538..e6ba2d054399 100644 --- a/security/keys/request_key.c +++ b/security/keys/request_key.c @@ -9,7 +9,7 @@
#include <linux/export.h> #include <linux/sched.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/err.h> #include <linux/keyctl.h> #include <linux/slab.h> diff --git a/security/tomoyo/common.h b/security/tomoyo/common.h index d098cf8aae61..d26034000913 100644 --- a/security/tomoyo/common.h +++ b/security/tomoyo/common.h @@ -16,7 +16,7 @@ #include <linux/string.h> #include <linux/mm.h> #include <linux/file.h> -#include <linux/kmod.h> +#include <linux/umh.h> #include <linux/fs.h> #include <linux/sched.h> #include <linux/namei.h>
The kernel/time/jiffies.c file uses proc_int_u2k_conv_uop(), proc_int_k2u_conv_kop(), proc_int_conv(), proc_dointvec_conv() and proc_doulongvec_minmax_conv(), which are declared in linux/sysctl.h. It currently relies on this header being included indirectly through linux/module.h -> linux/kmod.h. Add the missing include in preparation for removing the linux/sysctl.h include from linux/kmod.h.
Signed-off-by: Petr Pavlu petr.pavlu@suse.com --- kernel/time/jiffies.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/kernel/time/jiffies.c b/kernel/time/jiffies.c index d51428867a33..17cdb5ef8893 100644 --- a/kernel/time/jiffies.c +++ b/kernel/time/jiffies.c @@ -8,6 +8,7 @@ #include <linux/jiffies.h> #include <linux/module.h> #include <linux/init.h> +#include <linux/sysctl.h>
#include "timekeeping.h" #include "tick-internal.h"
On Tue, Jul 21 2026 at 15:11, Petr Pavlu wrote:
The kernel/time/jiffies.c file uses proc_int_u2k_conv_uop(),
jiffies.c uses ...
proc_int_k2u_conv_kop(), proc_int_conv(), proc_dointvec_conv() and proc_doulongvec_minmax_conv(), which are declared in linux/sysctl.h. It currently relies on this header being included indirectly through linux/module.h -> linux/kmod.h. Add the missing include in preparation for removing the linux/sysctl.h include from linux/kmod.h.
Can you please split that spaghetti sentence into paragraphs?
https://docs.kernel.org/process/maintainer-tip.html#changelog
Signed-off-by: Petr Pavlu petr.pavlu@suse.com
Other than that.
Acked-by: Thomas Gleixner tglx@kernel.org
On 7/25/26 10:31 PM, Thomas Gleixner wrote:
On Tue, Jul 21 2026 at 15:11, Petr Pavlu wrote:
The kernel/time/jiffies.c file uses proc_int_u2k_conv_uop(),
jiffies.c uses ...
proc_int_k2u_conv_kop(), proc_int_conv(), proc_dointvec_conv() and proc_doulongvec_minmax_conv(), which are declared in linux/sysctl.h. It currently relies on this header being included indirectly through linux/module.h -> linux/kmod.h. Add the missing include in preparation for removing the linux/sysctl.h include from linux/kmod.h.
Can you please split that spaghetti sentence into paragraphs?
https://docs.kernel.org/process/maintainer-tip.html#changelog
I will update it to:
jiffies.c uses proc_int_u2k_conv_uop(), proc_int_k2u_conv_kop(), proc_int_conv(), proc_dointvec_conv() and proc_doulongvec_minmax_conv(), which are declared in linux/sysctl.h. It currently gets that header indirectly through linux/module.h -> linux/kmod.h, but the latter no longer needs to include linux/sysctl.h.
Include linux/sysctl.h directly in jiffies.c ahead of removing the unnecessary include from linux/kmod.h.
Signed-off-by: Petr Pavlu petr.pavlu@suse.com
Other than that.
Acked-by: Thomas Gleixner tglx@kernel.org
Including linux/kmod.h alone results in 1.5 MB of preprocessed output, even though it provides only a few functions and macros.
The header currently depends on:
* __printf() -> linux/compiler_attributes.h, * ENOSYS -> linux/errno.h, * bool -> linux/types.h.
Include only these files, reducing the preprocessed output to 10 kB.
Signed-off-by: Petr Pavlu petr.pavlu@suse.com Reviewed-by: Aaron Tomlin atomlin@atomlin.com --- include/linux/kmod.h | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/include/linux/kmod.h b/include/linux/kmod.h index 9a07c3215389..b9474a62a568 100644 --- a/include/linux/kmod.h +++ b/include/linux/kmod.h @@ -2,17 +2,9 @@ #ifndef __LINUX_KMOD_H__ #define __LINUX_KMOD_H__
-/* - * include/linux/kmod.h - */ - -#include <linux/umh.h> -#include <linux/gfp.h> -#include <linux/stddef.h> +#include <linux/compiler_attributes.h> #include <linux/errno.h> -#include <linux/compiler.h> -#include <linux/workqueue.h> -#include <linux/sysctl.h> +#include <linux/types.h>
#ifdef CONFIG_MODULES /* modprobe exit status on success, -ve on error. Return value