From 0963257fe2114a56069c286605d3ec306223b724 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 6 Mar 2024 13:01:35 +0100 Subject: [PATCH] Speed up kernel modules initrd generation if no excludes were specified If no excludes were specified, we can just glob all modules and firmware without going via modinfo. We can only do this if no firmware was installed as otherwise we end up copying firmware into the initrd that's not depended on by any kernel modules. --- mkosi/kmod.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/mkosi/kmod.py b/mkosi/kmod.py index abe7a8305..06dfed618 100644 --- a/mkosi/kmod.py +++ b/mkosi/kmod.py @@ -159,10 +159,18 @@ def gen_required_kernel_modules( sandbox: SandboxProtocol = nosandbox, ) -> Iterator[Path]: modulesd = root / "usr/lib/modules" / kver - modules = filter_kernel_modules(root, kver, include=include, exclude=exclude, host=host) - names = [module_path_to_name(m) for m in modules] - mods, firmware = resolve_module_dependencies(root, kver, names, sandbox=sandbox) + # There is firmware in /usr/lib/firmware that is not depended on by any modules so if any firmware was installed + # we have to take the slow path to make sure we don't copy firmware into the initrd that is not depended on by any + # kernel modules. + if exclude or not (root / "usr/lib/firmware").glob("*"): + modules = filter_kernel_modules(root, kver, include=include, exclude=exclude, host=host) + names = [module_path_to_name(m) for m in modules] + mods, firmware = resolve_module_dependencies(root, kver, names, sandbox=sandbox) + else: + logging.debug("No modules excluded and no firmware installed, using kernel modules generation fast path") + mods = set((modulesd / "kernel").rglob("*.ko*")) + firmware = set() yield modulesd.parent yield modulesd -- 2.47.2