From: Jessica Yu <jeyu@kernel.org>
To: Prarit Bhargava <prarit@redhat.com>
Cc: linux-kernel@vger.kernel.org, Barret Rhoden <brho@google.com>,
David Arcari <darcari@redhat.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>
Subject: Re: [PATCH v3] kernel/module.c: Only return -EEXIST for modules that have finished loading
Date: Tue, 4 Jun 2019 16:29:31 +0200 [thread overview]
Message-ID: <20190604142931.GA3570@linux-8ccs> (raw)
In-Reply-To: <20190529112625.28699-1-prarit@redhat.com>
+++ Prarit Bhargava [29/05/19 07:26 -0400]:
>Microsoft HyperV disables the X86_FEATURE_SMCA bit on AMD systems, and
>linux guests boot with repeated errors:
>
>amd64_edac_mod: Unknown symbol amd_unregister_ecc_decoder (err -2)
>amd64_edac_mod: Unknown symbol amd_register_ecc_decoder (err -2)
>amd64_edac_mod: Unknown symbol amd_report_gart_errors (err -2)
>amd64_edac_mod: Unknown symbol amd_unregister_ecc_decoder (err -2)
>amd64_edac_mod: Unknown symbol amd_register_ecc_decoder (err -2)
>amd64_edac_mod: Unknown symbol amd_report_gart_errors (err -2)
>
>The warnings occur because the module code erroneously returns -EEXIST
>for modules that have failed to load and are in the process of being
>removed from the module list.
>
>module amd64_edac_mod has a dependency on module edac_mce_amd. Using
>modules.dep, systemd will load edac_mce_amd for every request of
>amd64_edac_mod. When the edac_mce_amd module loads, the module has
>state MODULE_STATE_UNFORMED and once the module load fails and the state
>becomes MODULE_STATE_GOING. Another request for edac_mce_amd module
>executes and add_unformed_module() will erroneously return -EEXIST even
>though the previous instance of edac_mce_amd has MODULE_STATE_GOING.
>Upon receiving -EEXIST, systemd attempts to load amd64_edac_mod, which
>fails because of unknown symbols from edac_mce_amd.
>
>add_unformed_module() must wait to return for any case other than
>MODULE_STATE_LIVE to prevent a race between multiple loads of
>dependent modules.
>
>Signed-off-by: Prarit Bhargava <prarit@redhat.com>
>Signed-off-by: Barret Rhoden <brho@google.com>
>Cc: David Arcari <darcari@redhat.com>
>Cc: Jessica Yu <jeyu@kernel.org>
>Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Applied. Thanks!
Jessica
>---
> kernel/module.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
>diff --git a/kernel/module.c b/kernel/module.c
>index 6e6712b3aaf5..1e7dcbe527af 100644
>--- a/kernel/module.c
>+++ b/kernel/module.c
>@@ -3397,8 +3397,7 @@ static bool finished_loading(const char *name)
> sched_annotate_sleep();
> mutex_lock(&module_mutex);
> mod = find_module_all(name, strlen(name), true);
>- ret = !mod || mod->state == MODULE_STATE_LIVE
>- || mod->state == MODULE_STATE_GOING;
>+ ret = !mod || mod->state == MODULE_STATE_LIVE;
> mutex_unlock(&module_mutex);
>
> return ret;
>@@ -3588,8 +3587,7 @@ static int add_unformed_module(struct module *mod)
> mutex_lock(&module_mutex);
> old = find_module_all(mod->name, strlen(mod->name), true);
> if (old != NULL) {
>- if (old->state == MODULE_STATE_COMING
>- || old->state == MODULE_STATE_UNFORMED) {
>+ if (old->state != MODULE_STATE_LIVE) {
> /* Wait in case it fails to load. */
> mutex_unlock(&module_mutex);
> err = wait_event_interruptible(module_wq,
>--
>2.21.0
>
prev parent reply other threads:[~2019-06-04 14:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-29 11:26 [PATCH v3] kernel/module.c: Only return -EEXIST for modules that have finished loading Prarit Bhargava
2019-06-04 14:29 ` Jessica Yu [this message]
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=20190604142931.GA3570@linux-8ccs \
--to=jeyu@kernel.org \
--cc=brho@google.com \
--cc=darcari@redhat.com \
--cc=heiko.carstens@de.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=prarit@redhat.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.