Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp4356342imb; Wed, 6 Mar 2019 11:21:02 -0800 (PST) X-Google-Smtp-Source: APXvYqyxP7CdiJwOunLktahR+7jmDJ3E/hv+Adm9YxyoHWshh+ffmfibqLNMr0OOJTadHC/HddZX X-Received: by 2002:a62:3001:: with SMTP id w1mr8782901pfw.59.1551900062545; Wed, 06 Mar 2019 11:21:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551900062; cv=none; d=google.com; s=arc-20160816; b=TrvZwsQSzEoCUSAxSY9oqRFi7RMhcY3v1DOW/FGnrkndI1vztlNYSLjH3vXhnNLFWq KQ9TcBKty4LOUo3O/xxim/seLMXsqRWYukmyWWDY3hKSh6BevhlVSLQRWgcUVDJYFUHB KJmra/5kXTvOP7FJJcbb+eGxbL34mgq5XJk2FYxxGeGWQx+MZYQyxyeRayicRZm4ueDQ ir3NexPyzrm/GoGE0nrK0m4M7Tk6i/GDJLsepg7y6gjkDLwLRBi74RXbHJoJw++fbD6L hS+Z/mHpYeORxdv1Vt6OhuvtYOyA/JuhVVpDu68aMs0CLJpS6YNu9A5WfrSKxIKg1oHo wbNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition:mime-version :message-id:subject:cc:to:from:date; bh=jpRjIIRksjc2CezImaJ8sE4IGbnAcaiANXHQ2vnPxF4=; b=ipu/JhwQHlGGE4gQghr8GQAUX+3VYrIuAiFpuY0De6iozRBZ90qevL2mNU0DNO+8w7 Z7XC5N7AJuu80xePPP4/yIzdibCeuFaHttjs6jR4UQ03E4waWOC71hz6uLcgsMtOqCA8 vvefYP+gNFf84PF5x0CEUu8L79zX2DL5Cz92SRGeaBkLV4dwyji2ThrSqa46JlLjE110 tdEgyIxIbbGhz7NL+7zUrsU45CBDWmoODsGjybX/T2IxeoU1GBa5qBRiayaamlHZCgDg Xo+uz01CJ42wXLW5nSu6SALk6/WTjjiDrE6YsTsth9ty9UXJHeOUSOZOk5xrchgFmYf8 kxNQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m3si2099217plt.310.2019.03.06.11.20.47; Wed, 06 Mar 2019 11:21:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730323AbfCFREO (ORCPT + 99 others); Wed, 6 Mar 2019 12:04:14 -0500 Received: from monster.unsafe.ru ([5.9.28.80]:53618 "EHLO mail.unsafe.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726722AbfCFREN (ORCPT ); Wed, 6 Mar 2019 12:04:13 -0500 X-Greylist: delayed 584 seconds by postgrey-1.27 at vger.kernel.org; Wed, 06 Mar 2019 12:04:12 EST Received: from MacBook-PC.fortress (nat-pool-brq-t.redhat.com [213.175.37.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.unsafe.ru (Postfix) with ESMTPSA id 7C3C0C61ABD; Wed, 6 Mar 2019 16:54:27 +0000 (UTC) Date: Wed, 6 Mar 2019 17:54:25 +0100 From: Alexey Gladkov To: linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-api@vger.kernel.org Cc: "Kirill A . Shutemov" , Gleb Fotengauer-Malinovskiy , "Dmitry V. Levin" Subject: [PATCH v1] moduleparam: Save information about built-in modules in separate file Message-ID: <20190306165425.GD14017@MacBook-PC.fortress> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="0OWHXb1mYLuhj1Ox" Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --0OWHXb1mYLuhj1Ox Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Problem: When a kernel module is compiled as a separate module, some important information about the kernel module is available via .modinfo section of the module. In contrast, when the kernel module is compiled into the kernel, that information is not available. Information about built-in modules is necessary in the following cases: 1. When it is necessary to find out what additional parameters can be passed to the kernel at boot time. 2. When you need to know which module names and their aliases are in the kernel. This is very useful for creating an initrd image. Proposal: The proposed patch does not remove .modinfo section with module information from the vmlinux at the build time and saves it into a separate file after kernel linking. So, the kernel does not increase in size and no additional information remains in it. Information is stored in the same format as in the separate modules (null-terminated string array). Because the .modinfo section is already exported with a separate modules, we are not creating a new API. It can be easily read in the userspace: $ tr '\0' '\n' < kernel.builtin.modinfo ext4.softdep=3Dpre: crc32c ext4.license=3DGPL ext4.description=3DFourth Extended Filesystem ext4.author=3DRemy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Th= eodore Ts'o and others ext4.alias=3Dfs-ext4 ext4.alias=3Dext3 ext4.alias=3Dfs-ext3 ext4.alias=3Dext2 ext4.alias=3Dfs-ext2 md_mod.alias=3Dblock-major-9-* md_mod.alias=3Dmd md_mod.description=3DMD RAID framework md_mod.license=3DGPL md_mod.parmtype=3Dcreate_on_open:bool md_mod.parmtype=3Dstart_dirty_degraded:int =2E.. Signed-off-by: Alexey Gladkov Signed-off-by: Gleb Fotengauer-Malinovskiy --- Makefile | 1 + include/linux/moduleparam.h | 12 +++++------- scripts/link-vmlinux.sh | 8 ++++++++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index d5713e7b1e50..971102194c92 100644 --- a/Makefile +++ b/Makefile @@ -1288,6 +1288,7 @@ _modinst_: fi @cp -f $(objtree)/modules.order $(MODLIB)/ @cp -f $(objtree)/modules.builtin $(MODLIB)/ + @cp -f $(objtree)/kernel.builtin.modinfo $(MODLIB)/ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst =20 # This depmod is only for convenience to give the initial diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index ba36506db4fb..5ba250d9172a 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h @@ -10,23 +10,21 @@ module name. */ #ifdef MODULE #define MODULE_PARAM_PREFIX /* empty */ +#define __MODULE_INFO_PREFIX /* empty */ #else #define MODULE_PARAM_PREFIX KBUILD_MODNAME "." +/* We cannot use MODULE_PARAM_PREFIX because some modules override it. */ +#define __MODULE_INFO_PREFIX KBUILD_MODNAME "." #endif =20 /* Chosen so that structs with an unsigned long line up. */ #define MAX_PARAM_PREFIX_LEN (64 - sizeof(unsigned long)) =20 -#ifdef MODULE #define __MODULE_INFO(tag, name, info) \ static const char __UNIQUE_ID(name)[] \ __used __attribute__((section(".modinfo"), unused, aligned(1))) \ - =3D __stringify(tag) "=3D" info -#else /* !MODULE */ -/* This struct is here for syntactic coherency, it is not used */ -#define __MODULE_INFO(tag, name, info) \ - struct __UNIQUE_ID(name) {} -#endif + =3D __MODULE_INFO_PREFIX __stringify(tag) "=3D" info + #define __MODULE_PARM_TYPE(name, _type) \ __MODULE_INFO(parmtype, name##type, #name ":" _type) =20 diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index c8cf45362bd6..399d7e4d11ec 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -258,10 +258,12 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then =20 # step 1 vmlinux_link "" .tmp_vmlinux1 + "${OBJCOPY}" -R .modinfo .tmp_vmlinux1 kallsyms .tmp_vmlinux1 .tmp_kallsyms1.o =20 # step 2 vmlinux_link .tmp_kallsyms1.o .tmp_vmlinux2 + "${OBJCOPY}" -R .modinfo .tmp_vmlinux2 kallsyms .tmp_vmlinux2 .tmp_kallsyms2.o =20 # step 3 @@ -273,6 +275,7 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then kallsyms_vmlinux=3D.tmp_vmlinux3 =20 vmlinux_link .tmp_kallsyms2.o .tmp_vmlinux3 + "${OBJCOPY}" -R .modinfo .tmp_vmlinux3 =20 kallsyms .tmp_vmlinux3 .tmp_kallsyms3.o fi @@ -281,6 +284,11 @@ fi info LD vmlinux vmlinux_link "${kallsymso}" vmlinux =20 +info MODINFO kernel.builtin.modinfo +"${OBJCOPY}" -j .modinfo -O binary vmlinux kernel.builtin.modinfo +chmod 444 kernel.builtin.modinfo +"${OBJCOPY}" -R .modinfo vmlinux + if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then info SORTEX vmlinux sortextable vmlinux --=20 2.19.2 --0OWHXb1mYLuhj1Ox Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIcBAEBAgAGBQJcf/s1AAoJEKRaulRM/9Q0u+oP/1vxXnWlVM43EVSoQes8LsAd P9mLCkEWPWdAyTnlCgcPwOetr2drGfh1rX8mhC4YLM0zCZ4LVUJybXLZbZU1K7Ue pGfywG5ac3+ux4d/tcemShRfoiEbt4pfAwNoDJmeFBRct9wjXVjPwiLckEmOSk6f Rp7aEIr/qtThhofAqe4ycSp+FW4V39pa+qg5DpmYiPxjqGsMcPW5jUUBP0d/j1u5 Ojo+ExKnYy7WLXI212fH3XuHCAyoTUPn9uYRyYwiZ2XLdPtEQzf5jI8MAxbU7HLF oDxPBITOFLlqTWYm0M29aGNsx2HFNSFHKzKbjV0CuOonVJql2kl1zIzEBfGJ1bPd WKyX/XhIZpF8p2nKSylbad985t+24SpCDFonriduaesMFgyyTORxoW6HF6QDjo27 i4/RqxYGNanTDn/FV70+zbyhu5r0/Ph+i/bKc+BSWcvuTFTSgzEjkZ+GsLIzjE3J 2P5jJQa8QFboJLiN0iMrUQE4UbiWscCf/4azeWndnNlDiMtAkNt0q5eqhqo4qbAK NQJLkjNjuBBYeC+XeoNdE5sE/8ieC870yGS0GTTyilKUNCbZllXvertrVZ5H1c0Q ImI9/10n1CxOqe/ssHrKi/C1nsDdZ+Gr8uG3PhdgTZLOFroFhZDVzC2BPoGSGQ2t d2EdYqiSg1WbF8cOfXLY =bKn9 -----END PGP SIGNATURE----- --0OWHXb1mYLuhj1Ox--