From: Alexey Gladkov <legion@kernel.org>
To: Petr Pavlu <petr.pavlu@suse.com>
Cc: Luis Chamberlain <mcgrof@kernel.org>,
Sami Tolvanen <samitolvanen@google.com>,
Daniel Gomez <da.gomez@samsung.com>,
Masahiro Yamada <masahiroy@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Nicolas Schier <nicolas.schier@linux.dev>,
linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org,
linux-kbuild@vger.kernel.org
Subject: Re: [PATCH v1 5/7] modpost: Create modalias for builtin modules
Date: Tue, 29 Apr 2025 12:04:38 +0200 [thread overview]
Message-ID: <aBCkNh0Q2hwpMchj@example.org> (raw)
In-Reply-To: <cf3ff619-6177-42e1-8f64-74cf4cbb8672@suse.com>
On Tue, Apr 29, 2025 at 11:25:47AM +0200, Petr Pavlu wrote:
> On 4/26/25 18:16, Alexey Gladkov wrote:
> > For some modules, modalias is generated using the modpost utility and
> > the section is added to the module file.
> >
> > When a module is added inside vmlinux, modpost does not generate
> > modalias for such modules and the information is lost.
> >
> > As a result kmod (which uses modules.builtin.modinfo in userspace)
> > cannot determine that modalias is handled by a builtin kernel module.
> >
> > $ cat /sys/devices/pci0000:00/0000:00:14.0/modalias
> > pci:v00008086d0000A36Dsv00001043sd00008694bc0Csc03i30
> >
> > $ modinfo xhci_pci
> > name: xhci_pci
> > filename: (builtin)
> > license: GPL
> > file: drivers/usb/host/xhci-pci
> > description: xHCI PCI Host Controller Driver
> >
> > Missing modalias "pci:v*d*sv*sd*bc0Csc03i30*" which will be generated by
> > modpost if the module is built separately.
> >
> > To fix this it is necessary to generate the same modalias for vmlinux as
> > for the individual modules. Fortunately '.vmlinux.export.o' is already
> > generated from which '.modinfo' can be extracted in the same way as for
> > vmlinux.o.
> >
> > Signed-off-by: Alexey Gladkov <legion@kernel.org>
> > ---
> > include/linux/module.h | 4 ----
> > scripts/mod/file2alias.c | 13 ++++++++++++-
> > scripts/mod/modpost.c | 21 ++++++++++++++++++---
> > scripts/mod/modpost.h | 7 ++++++-
> > 4 files changed, 36 insertions(+), 9 deletions(-)
> >
> > diff --git a/include/linux/module.h b/include/linux/module.h
> > index 7250b4a527ec..6225793ddcd4 100644
> > --- a/include/linux/module.h
> > +++ b/include/linux/module.h
> > @@ -257,14 +257,10 @@ extern void cleanup_module(void);
> > __PASTE(type, \
> > __PASTE(__, name)))))))
> >
> > -#ifdef MODULE
> > /* Creates an alias so file2alias.c can find device table. */
> > #define MODULE_DEVICE_TABLE(type, name) \
> > extern typeof(name) __mod_device_table(type, name) \
> > __attribute__ ((unused, alias(__stringify(name))))
> > -#else /* !MODULE */
> > -#define MODULE_DEVICE_TABLE(type, name)
> > -#endif
> >
> > /* Version of form [<epoch>:]<version>[-<extra-version>].
> > * Or for CVS/RCS ID version, everything but the number is stripped.
> > diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
> > index dff1799a4c79..0fa3f031b904 100644
> > --- a/scripts/mod/file2alias.c
> > +++ b/scripts/mod/file2alias.c
> > @@ -1471,7 +1471,8 @@ static const struct devtable devtable[] = {
> > /* Create MODULE_ALIAS() statements.
> > * At this time, we cannot write the actual output C source yet,
> > * so we write into the mod->dev_table_buf buffer. */
> > -void handle_moddevtable(struct module *mod, struct elf_info *info,
> > +void handle_moddevtable(struct list_head *modules,
> > + struct module *mod, struct elf_info *info,
> > Elf_Sym *sym, const char *symname)
> > {
> > void *symval;
>
> The new modules parameter is unused.
Indeed. It is no longer needed after the optimization. Thank you.
> > @@ -1509,6 +1510,16 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
> > typelen = name - type;
> > name += strlen("__");
> >
> > + if (mod->is_vmlinux) {
> > + struct module *builtin_mod;
> > +
> > + builtin_mod = new_module(modname, modnamelen);
> > + builtin_mod->is_vmlinux = mod->is_vmlinux;
> > + builtin_mod->dump_file = MODULE_BUILTIN_FNAME;
>
> The module.dump_file member is described in scripts/mod/modpost.h as
> "path to the .symvers file if loaded from a file". However, that is not
> the case here.
>
> Similarly, the module struct in scripts/mod/modpost.h is commented as
> "represent a module (vmlinux or *.ko)", but this patch expands its scope
> to also include builtin modules.
Well, an alternative would be to add a separate flag. I used dump_file
because it allows you to exclude such "builtin" modules from processing in
write_dump(), write_namespace_deps_files(), etc.
But yes, I agree that it's an abuse.
> I'm not sure it's best to overload this data in this way. I think mixing
> actual files and "logical" modules in the modules list is somewhat
> confusing.
>
> An alternative would be to keep a single module struct for vmlinux and
> record the discovered aliases under it?
It is possible to extend struct module_alias and add the module name. The
problem is that alias is added by module_alias_printf() and we will have
to add the module name to the arguments to each do_entry handler in
addition to struct module where there is already a name (but in our case
it is vmlinux).
I can do that if you think it's a better way.
--
Rgrds, legion
next prev parent reply other threads:[~2025-04-29 10:04 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-26 16:16 [PATCH v1 0/7] Add generated modalias to modules.builtin.modinfo Alexey Gladkov
2025-04-26 16:16 ` [PATCH v1 1/7] mfd: stmpe-spi: Correct the name used in MODULE_DEVICE_TABLE Alexey Gladkov
2025-04-27 11:01 ` Krzysztof Kozlowski
2025-05-01 12:29 ` Lee Jones
2025-05-01 12:27 ` (subset) " Lee Jones
2025-04-26 16:16 ` [PATCH v1 2/7] scsi: Define MODULE_DEVICE_TABLE only if necessary Alexey Gladkov
2025-04-26 16:16 ` [PATCH v1 3/7] modules: Add macros to specify modinfo prefix Alexey Gladkov
2025-04-26 16:16 ` [PATCH v1 4/7] modpost: Make mod_device_table aliases more unique Alexey Gladkov
2025-04-26 16:16 ` [PATCH v1 5/7] modpost: Create modalias for builtin modules Alexey Gladkov
2025-04-27 18:03 ` kernel test robot
2025-04-29 9:25 ` Petr Pavlu
2025-04-29 10:04 ` Alexey Gladkov [this message]
2025-04-29 12:49 ` Alexey Gladkov
2025-04-29 14:14 ` Petr Pavlu
2025-04-29 15:15 ` Alexey Gladkov
2025-05-03 10:26 ` Petr Pavlu
2025-05-05 9:38 ` [PATCH v2 " Alexey Gladkov
2025-05-05 9:46 ` Alexey Gladkov
2025-05-08 15:42 ` Masahiro Yamada
2025-05-09 16:44 ` Alexey Gladkov
2025-04-26 16:16 ` [PATCH v1 6/7] kbuild: Move modules.builtin.modinfo to another makefile Alexey Gladkov
2025-04-26 16:16 ` [PATCH v1 7/7] kbuild: Create modules.builtin.modinfo for modpost results Alexey Gladkov
2025-04-28 13:47 ` [PATCH v1 0/7] Add generated modalias to modules.builtin.modinfo Petr Pavlu
2025-04-28 15:35 ` Alexey Gladkov
2025-05-09 16:42 ` [PATCH v2 0/6] " Alexey Gladkov
2025-05-09 16:42 ` [PATCH v2 1/6] scsi: Define MODULE_DEVICE_TABLE only if necessary Alexey Gladkov
2025-05-09 16:42 ` [PATCH v2 2/6] modules: Add macros to specify modinfo prefix Alexey Gladkov
2025-05-12 14:50 ` Petr Pavlu
2025-05-09 16:42 ` [PATCH v2 3/6] modpost: Make mod_device_table aliases more unique Alexey Gladkov
2025-05-12 14:51 ` Petr Pavlu
2025-05-09 16:42 ` [PATCH v2 4/6] modpost: Create modalias for builtin modules Alexey Gladkov
2025-05-12 14:52 ` Petr Pavlu
2025-05-09 16:42 ` [PATCH v2 5/6] kbuild: Move modules.builtin.modinfo to another makefile Alexey Gladkov
2025-05-09 16:42 ` [PATCH v2 6/6] kbuild: Create modules.builtin.modinfo for modpost results Alexey Gladkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aBCkNh0Q2hwpMchj@example.org \
--to=legion@kernel.org \
--cc=da.gomez@samsung.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-modules@vger.kernel.org \
--cc=masahiroy@kernel.org \
--cc=mcgrof@kernel.org \
--cc=nathan@kernel.org \
--cc=nicolas.schier@linux.dev \
--cc=petr.pavlu@suse.com \
--cc=samitolvanen@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.