From: Daan De Meyer Date: Wed, 6 Mar 2024 12:01:35 +0000 (+0100) Subject: Speed up kernel modules initrd generation if no excludes were specified X-Git-Tag: v21~2^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F2465%2Fhead;p=thirdparty%2Fmkosi.git 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. --- 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