Re: [PATCH 2/2] module: add support to avoid duplicates early on load

From: Johan Hovold
Date: Tue May 30 2023 - 06:01:16 EST


On Mon, May 29, 2023 at 01:47:28PM -0400, Linus Torvalds wrote:
> On Mon, May 29, 2023 at 8:44 AM Johan Hovold <johan@xxxxxxxxxx> wrote:

> > > I do wonder what it is that is different in your setup, and maybe you
> > > could also enable the
> > >
> > > pr_debug("finit_module: fd=%d, uargs=%p, flags=%i\n", fd, uargs, flags);
> >
> > Below is the corresponding output with a working kernel: 174 requests
> > for the 131 modules that end up being loaded (without the revert there
> > is only around 110 modules loaded).

> And yeah, that dmesg output is useless, I didn't think of the fact
> that it only prints out the file descriptor, not the actual path to
> the file. In fact, without that change in place, the module code never
> actually looks at the file and leaves it all to
> kernel_read_file_from_fd().

Yeah, I added a printk with the module name to load_module() to make
some sense of it.

> With my change, it woul dhave been trivial to use "%pD" and point it
> at the file pointer instead, and get the dentry name that way, but
> never mind. I think you're entirely right that it's probably due to a
> shared dependency module, and I just didn't happen to trigger that
> case.

For completeness, here's a corresponding log from when running with your
RFC. Those duplicate requests that now wait for loading to complete
would have failed, and that explains why some modules like
qcom-spmi-adc5 and qcom-spmi-adc-tm5 that both depend on
qcom-vadc-common would in turn fail to load.

Johan

[ 0.633127] init_module_from_file - i2c-core.ko
[ 0.638320] init_module_from_file - i2c-hid.ko
[ 0.640654] init_module_from_file - i2c-hid-of.ko
[ 0.642572] init_module_from_file - i2c-qcom-geni.ko
[ 0.826911] init_module_from_file - hid-multitouch.ko
[ 0.827861] init_module_from_file - nvme-core.ko
[ 0.833011] init_module_from_file - nvme.ko
[ 0.835558] init_module_from_file - phy-qcom-qmp-pcie.ko
[ 0.841050] init_module_from_file - crc8.ko
[ 0.841371] init_module_from_file - pcie-qcom.ko
[ 3.390182] init_module_from_file - ipv6.ko
[ 3.402261] init_module_from_file - x_tables.ko
[ 3.406573] init_module_from_file - ip_tables.ko
[ 4.180345] init_module_from_file - dm-mod.ko
[ 4.186611] init_module_from_file - drm.ko
[ 4.793481] init_module_from_file - pwm_bl.ko
[ 4.798935] init_module_from_file - soundwire-bus.ko
[ 4.802551] init_module_from_file - qmi_helpers.ko
[ 4.805664] init_module_from_file - socinfo.ko
[ 4.814729] init_module_from_file - pdr_interface.ko
[ 4.830809] init_module_from_file - soundcore.ko
[ 4.832227] init_module_from_file - qcom-wdt.ko
[ 4.832242] init_module_from_file - qcom-rng.ko
[ 4.832311] init_module_from_file - icc-osm-l3.ko
[ 4.867903] init_module_from_file - pmic_glink.ko
[ 4.867904] init_module_from_file - snd.ko
[ 4.868045] init_module_from_file - mdt_loader.ko
[ 4.890274] init_module_from_file - snd.ko
[ 4.893962] init_module_from_file - snd.ko
[ 4.894620] init_module_from_file - snd.ko
[ 4.896162] init_module_from_file - snd.ko
[ 4.896797] init_module_from_file - snd.ko
[ 4.896907] init_module_from_file - snd.ko
[ 4.898087] init_module_from_file - snd.ko
[ 4.907548] init_module_from_file - qcom_sysmon.ko
[ 4.907560] init_module_from_file - qcom_sysmon.ko
[ 4.918690] init_module_from_file - snd.ko - waited, ret = 0
[ 4.918692] init_module_from_file - snd.ko - waited, ret = 0
[ 4.918694] init_module_from_file - snd.ko - waited, ret = 0
[ 4.918695] init_module_from_file - snd.ko - waited, ret = 0
[ 4.918699] init_module_from_file - snd.ko - waited, ret = 0
[ 4.918700] init_module_from_file - snd.ko - waited, ret = 0
[ 4.920849] init_module_from_file - snd.ko - waited, ret = 0
[ 4.937139] init_module_from_file - qrtr.ko
[ 4.937163] init_module_from_file - icc-bwmon.ko
[ 4.937185] init_module_from_file - icc-bwmon.ko
[ 4.938603] init_module_from_file - qcom_sysmon.ko - waited, ret = 0
[ 4.939866] init_module_from_file - snd-timer.ko
[ 4.939877] init_module_from_file - snd-timer.ko
[ 4.939885] init_module_from_file - snd-timer.ko
[ 4.939897] init_module_from_file - snd-timer.ko
[ 4.939905] init_module_from_file - snd-timer.ko
[ 4.939914] init_module_from_file - snd-timer.ko
[ 4.939982] init_module_from_file - snd-timer.ko
[ 4.940050] init_module_from_file - snd-timer.ko
[ 4.943465] init_module_from_file - pinctrl-lpass-lpi.ko
[ 4.943493] init_module_from_file - phy-qcom-snps-femto-v2.ko
[ 4.943512] init_module_from_file - phy-qcom-snps-femto-v2.ko
[ 4.944176] init_module_from_file - qcom_q6v5.ko
[ 4.944362] init_module_from_file - qcom_q6v5.ko
[ 4.946140] init_module_from_file - qcom_q6v5.ko - waited, ret = 0
[ 4.946758] init_module_from_file - snd-timer.ko - waited, ret = 0
[ 4.946762] init_module_from_file - snd-timer.ko - waited, ret = 0
[ 4.946919] init_module_from_file - snd-timer.ko - waited, ret = 0
[ 4.947484] init_module_from_file - snd-timer.ko - waited, ret = 0
[ 4.947827] init_module_from_file - snd-timer.ko - waited, ret = 0
[ 4.948101] init_module_from_file - snd-timer.ko - waited, ret = 0
[ 4.948163] init_module_from_file - snd-timer.ko - waited, ret = 0
[ 4.948483] init_module_from_file - phy-qcom-snps-femto-v2.ko - waited, ret = 0
[ 4.950639] init_module_from_file - icc-bwmon.ko - waited, ret = 0
[ 4.951178] init_module_from_file - snd-pcm.ko
[ 4.951279] init_module_from_file - snd-pcm.ko
[ 4.951616] init_module_from_file - qcom_glink_smem.ko
[ 4.952049] init_module_from_file - snd-pcm.ko
[ 4.952122] init_module_from_file - snd-pcm.ko
[ 4.952132] init_module_from_file - snd-pcm.ko
[ 4.952185] init_module_from_file - snd-pcm.ko
[ 4.952231] init_module_from_file - pinctrl-sc8280xp-lpass-lpi.ko
[ 4.952238] init_module_from_file - snd-pcm.ko
[ 4.952326] init_module_from_file - qcom_glink_smem.ko
[ 4.957870] init_module_from_file - snd-pcm.ko
[ 4.971513] init_module_from_file - typec.ko
[ 4.971529] init_module_from_file - typec.ko
[ 4.971544] init_module_from_file - phy-qcom-edp.ko
[ 4.971619] init_module_from_file - typec.ko
[ 4.971806] init_module_from_file - snd-pcm.ko
[ 4.971961] init_module_from_file - qcom_common.ko
[ 4.972583] init_module_from_file - qcom_common.ko
[ 4.972676] init_module_from_file - rfkill.ko
[ 4.972898] init_module_from_file - qcom_stats.ko
[ 4.973031] init_module_from_file - typec.ko
[ 4.973917] init_module_from_file - snd-pcm.ko - waited, ret = 0
[ 4.974024] init_module_from_file - snd-pcm.ko - waited, ret = 0
[ 4.974090] init_module_from_file - qcom_common.ko - waited, ret = 0
[ 4.974134] init_module_from_file - snd-pcm.ko - waited, ret = 0
[ 4.974205] init_module_from_file - snd-pcm.ko - waited, ret = 0
[ 4.974265] init_module_from_file - snd-pcm.ko - waited, ret = 0
[ 4.974307] init_module_from_file - snd-pcm.ko - waited, ret = 0
[ 4.974385] init_module_from_file - snd-pcm.ko - waited, ret = 0
[ 4.974436] init_module_from_file - snd-pcm.ko - waited, ret = 0
[ 4.979168] init_module_from_file - qcom_pil_info.ko
[ 4.979352] init_module_from_file - snd-compress.ko
[ 4.979399] init_module_from_file - qcom_pil_info.ko
[ 4.979668] init_module_from_file - snd-compress.ko
[ 4.979912] init_module_from_file - snd-compress.ko
[ 4.980022] init_module_from_file - rtc-pm8xxx.ko
[ 4.980107] init_module_from_file - snd-compress.ko
[ 4.980216] init_module_from_file - sysimgblt.ko
[ 4.980490] init_module_from_file - nvmem_qcom-spmi-sdam.ko
[ 4.980593] init_module_from_file - snd-compress.ko
[ 4.981109] init_module_from_file - snd-compress.ko
[ 4.981136] init_module_from_file - qcom_pil_info.ko - waited, ret = 0
[ 4.981285] init_module_from_file - snd-compress.ko
[ 4.981378] init_module_from_file - typec.ko - waited, ret = 0
[ 4.981382] init_module_from_file - typec.ko - waited, ret = 0
[ 4.981402] init_module_from_file - snd-compress.ko - waited, ret = 0
[ 4.981404] init_module_from_file - snd-compress.ko - waited, ret = 0
[ 4.981412] init_module_from_file - typec.ko - waited, ret = 0
[ 4.981453] init_module_from_file - snd-compress.ko - waited, ret = 0
[ 4.981482] init_module_from_file - snd-compress.ko - waited, ret = 0
[ 4.981516] init_module_from_file - snd-compress.ko - waited, ret = 0
[ 4.981620] init_module_from_file - snd-compress.ko
[ 4.982970] init_module_from_file - snd-compress.ko
[ 4.985063] init_module_from_file - qcom_q6v5_pas.ko
[ 4.985132] init_module_from_file - qcom_q6v5_pas.ko
[ 4.985200] init_module_from_file - snd-soc-core.ko
[ 4.985222] init_module_from_file - qcom-vadc-common.ko
[ 4.985254] init_module_from_file - sysfillrect.ko
[ 4.985654] init_module_from_file - snd-soc-core.ko
[ 4.985697] init_module_from_file - sysfillrect.ko
[ 4.985862] init_module_from_file - snd-soc-core.ko
[ 4.985883] init_module_from_file - ecc.ko
[ 4.985950] init_module_from_file - reboot-mode.ko
[ 4.985982] init_module_from_file - snd-soc-core.ko
[ 4.986159] init_module_from_file - snd-soc-core.ko
[ 4.986304] init_module_from_file - snd-soc-core.ko
[ 4.986829] init_module_from_file - qcom-vadc-common.ko
[ 4.987106] init_module_from_file - snd-soc-core.ko
[ 4.987546] init_module_from_file - qcom-vadc-common.ko - waited, ret = 0
[ 4.987889] init_module_from_file - snd-soc-core.ko
[ 4.988198] init_module_from_file - snd-soc-core.ko
[ 4.989151] init_module_from_file - industrialio.ko
[ 4.989220] init_module_from_file - industrialio.ko
[ 4.989588] init_module_from_file - gpio-sbu-mux.ko
[ 4.989651] init_module_from_file - gpio-sbu-mux.ko
[ 4.990037] init_module_from_file - qcom-pon.ko
[ 4.991354] init_module_from_file - mhi.ko
[ 4.992889] init_module_from_file - industrialio.ko - waited, ret = 0
[ 4.993473] init_module_from_file - cfg80211.ko
[ 4.994053] init_module_from_file - snd-soc-core.ko - waited, ret = 0
[ 4.994073] init_module_from_file - snd-soc-core.ko - waited, ret = 0
[ 4.994103] init_module_from_file - snd-soc-core.ko - waited, ret = 0
[ 4.994107] init_module_from_file - snd-soc-core.ko - waited, ret = 0
[ 4.994129] init_module_from_file - snd-soc-core.ko - waited, ret = 0
[ 4.994147] init_module_from_file - snd-soc-core.ko - waited, ret = 0
[ 4.994166] init_module_from_file - sysfillrect.ko
[ 4.994176] init_module_from_file - snd-soc-core.ko - waited, ret = 0
[ 4.994206] init_module_from_file - snd-soc-core.ko - waited, ret = 0
[ 4.994319] init_module_from_file - qcom-spmi-adc5.ko
[ 4.994621] init_module_from_file - ecdh_generic.ko
[ 4.994975] init_module_from_file - snd-soc-lpass-macro-common.ko
[ 4.994999] init_module_from_file - qcom-spmi-adc-tm5.ko
[ 4.996797] init_module_from_file - gpio-sbu-mux.ko - waited, ret = 0
[ 4.997487] init_module_from_file - snd-soc-qcom-sdw.ko
[ 4.997511] init_module_from_file - snd-soc-lpass-macro-common.ko
[ 4.997546] init_module_from_file - snd-soc-wcd-mbhc.ko
[ 4.997573] init_module_from_file - sysfillrect.ko - waited, ret = 0
[ 4.997754] init_module_from_file - syscopyarea.ko
[ 4.997762] init_module_from_file - syscopyarea.ko
[ 4.999053] init_module_from_file - sysfillrect.ko - waited, ret = 0
[ 4.999247] init_module_from_file - snd-soc-lpass-macro-common.ko
[ 4.999482] init_module_from_file - snd-soc-lpass-wsa-macro.ko
[ 4.999587] init_module_from_file - soundwire-qcom.ko
[ 5.000338] init_module_from_file - soundwire-qcom.ko
[ 5.000745] init_module_from_file - soundwire-qcom.ko
[ 5.001008] init_module_from_file - syscopyarea.ko
[ 5.015734] init_module_from_file - bluetooth.ko
[ 5.016020] init_module_from_file - regmap-sdw.ko
[ 5.016434] init_module_from_file - snd-soc-qcom-common.ko
[ 5.017416] init_module_from_file - syscopyarea.ko - waited, ret = 0
[ 5.018912] init_module_from_file - snd-soc-lpass-macro-common.ko - waited, ret = 0
[ 5.018952] init_module_from_file - syscopyarea.ko - waited, ret = 0
[ 5.019196] init_module_from_file - snd-soc-lpass-macro-common.ko - waited, ret = 0
[ 5.020220] init_module_from_file - drm_kms_helper.ko
[ 5.020230] init_module_from_file - snd-soc-lpass-rx-macro.ko
[ 5.023262] init_module_from_file - drm_kms_helper.ko
[ 5.023366] init_module_from_file - snd-soc-wcd938x-sdw.ko
[ 5.023705] init_module_from_file - snd-soc-lpass-va-macro.ko
[ 5.024133] init_module_from_file - drm_kms_helper.ko
[ 5.024223] init_module_from_file - snd-soc-sc8280xp.ko
[ 5.024814] init_module_from_file - snd-soc-lpass-tx-macro.ko
[ 5.027886] init_module_from_file - drm_kms_helper.ko - waited, ret = 0
[ 5.027937] init_module_from_file - drm_kms_helper.ko - waited, ret = 0
[ 5.028550] init_module_from_file - phy-qcom-qmp-combo.ko
[ 5.028828] init_module_from_file - snd-soc-wcd938x.ko
[ 5.029106] init_module_from_file - drm_dp_aux_bus.ko
[ 5.030265] init_module_from_file - phy-qcom-qmp-combo.ko
[ 5.037773] init_module_from_file - qcom_q6v5_pas.ko - waited, ret = 0
[ 5.038034] init_module_from_file - soundwire-qcom.ko - waited, ret = 0
[ 5.038548] init_module_from_file - libarc4.ko
[ 5.038551] init_module_from_file - soundwire-qcom.ko - waited, ret = 0
[ 5.042176] init_module_from_file - btqca.ko
[ 5.044433] init_module_from_file - mac80211.ko
[ 5.044480] init_module_from_file - drm_display_helper.ko
[ 5.046672] init_module_from_file - qcom-spmi-temp-alarm.ko
[ 5.048163] init_module_from_file - hci_uart.ko
[ 5.056843] init_module_from_file - gpu-sched.ko
[ 5.073356] init_module_from_file - led-class-multicolor.ko
[ 5.087906] init_module_from_file - qcom-spmi-temp-alarm.ko
[ 5.106010] init_module_from_file - ath11k.ko
[ 5.106084] init_module_from_file - msm.ko
[ 5.125345] init_module_from_file - leds-qcom-lpg.ko
[ 5.150715] init_module_from_file - ath11k_pci.ko
[ 5.157163] init_module_from_file - qcom-spmi-temp-alarm.ko - waited, ret = 0
[ 5.157894] init_module_from_file - qcom_battmgr.ko
[ 5.158102] init_module_from_file - phy-qcom-qmp-combo.ko - waited, ret = 0
[ 5.159204] init_module_from_file - pmic_glink_altmode.ko
[ 5.258217] init_module_from_file - qrtr-smd.ko
[ 5.258238] init_module_from_file - qrtr-smd.ko
[ 5.258294] init_module_from_file - rpmsg_char.ko
[ 5.259157] init_module_from_file - apr.ko
[ 5.259160] init_module_from_file - rpmsg_char.ko
[ 5.276634] init_module_from_file - qrtr-smd.ko - waited, ret = 0
[ 5.277698] init_module_from_file - fastrpc.ko
[ 5.278293] init_module_from_file - rpmsg_char.ko - waited, ret = 0
[ 5.278926] init_module_from_file - rpmsg_ctrl.ko
[ 5.279642] init_module_from_file - rpmsg_ctrl.ko
[ 5.281399] init_module_from_file - rpmsg_ctrl.ko - waited, ret = 0
[ 5.330747] init_module_from_file - snd-soc-hdmi-codec.ko
[ 5.330826] init_module_from_file - snd-soc-hdmi-codec.ko
[ 5.333130] init_module_from_file - snd-soc-hdmi-codec.ko
[ 5.333201] init_module_from_file - snd-soc-hdmi-codec.ko - waited, ret = 0
[ 5.333214] init_module_from_file - snd-soc-hdmi-codec.ko - waited, ret = 0
[ 5.396803] init_module_from_file - panel-edp.ko
[ 6.101509] init_module_from_file - qrtr-mhi.ko
[ 6.196359] init_module_from_file - iptable_filter.ko
[ 6.203333] init_module_from_file - nf_defrag_ipv4.ko
[ 6.203903] init_module_from_file - nf_defrag_ipv6.ko
[ 6.204628] init_module_from_file - libcrc32c.ko
[ 6.204727] init_module_from_file - snd-q6apm.ko
[ 6.204985] init_module_from_file - snd-q6apm.ko
[ 6.205007] init_module_from_file - nf_conntrack.ko
[ 6.207137] init_module_from_file - xt_conntrack.ko
[ 6.211214] init_module_from_file - xt_tcpudp.ko
[ 6.215535] init_module_from_file - nf_reject_ipv4.ko
[ 6.216071] init_module_from_file - ipt_REJECT.ko
[ 6.222201] init_module_from_file - nf_log_syslog.ko
[ 6.223050] init_module_from_file - xt_LOG.ko
[ 6.241544] init_module_from_file - ip6_tables.ko
[ 6.286511] init_module_from_file - af_alg.ko
[ 6.293272] init_module_from_file - algif_hash.ko
[ 6.304773] init_module_from_file - md5.ko
[ 6.333540] init_module_from_file - mii.ko
[ 6.333550] init_module_from_file - mii.ko
[ 6.334785] init_module_from_file - mii.ko - waited, ret = 0
[ 6.335170] init_module_from_file - r8152.ko
[ 6.335282] init_module_from_file - r8152.ko
[ 6.370285] init_module_from_file - algif_skcipher.ko
[ 6.384424] init_module_from_file - ecb.ko
[ 6.392643] init_module_from_file - libdes.ko
[ 6.397046] init_module_from_file - des_generic.ko
[ 6.416039] init_module_from_file - cbc.ko
[ 6.643702] init_module_from_file - r8152.ko - waited, ret = 0
[ 7.940666] init_module_from_file - michael_mic.ko
[ 11.233648] init_module_from_file - snd-q6apm.ko - waited, ret = 0
[ 11.234264] init_module_from_file - q6prm.ko
[ 11.303802] init_module_from_file - q6apm-dai.ko
[ 11.304498] init_module_from_file - snd-q6dsp-common.ko
[ 11.305476] init_module_from_file - q6apm-lpass-dais.ko
[ 11.309858] init_module_from_file - q6prm-clocks.ko
[ 11.446919] init_module_from_file - snd-soc-wsa883x.ko
[ 11.446953] init_module_from_file - snd-soc-wsa883x.ko
[ 11.456469] init_module_from_file - snd-soc-wsa883x.ko - waited, ret = 0