Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1314815yba; Tue, 2 Apr 2019 06:43:35 -0700 (PDT) X-Google-Smtp-Source: APXvYqyGHQ1palBSBkVutp+RLoiQ9BdAlV3GHBQrxsmwvaOvISd8OUg0zMBsikOJVi/o3LpjVtCa X-Received: by 2002:a17:902:801:: with SMTP id 1mr38186867plk.299.1554212615788; Tue, 02 Apr 2019 06:43:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554212615; cv=none; d=google.com; s=arc-20160816; b=ZonoRO2URPyywi/Rlu8dduEOqQq/eiPGQhJu9D+yj7oGOWX6k76DF5ylkQZqqqDPgE Pt1Xcc5PZgJG5z28P/pnd96xx/fqgVWY7F38ApsQmgtZGFuqWcfAbNxUPTbBvE1GIVYu +hPpGmn63JcPBbU8gh6fhuZy2DmQ2qFCEsrxAxjxVasoeK5nQZRHvrjia5nzauwafqa1 k+1YPTlDkY4aUNlC8XbyAtEbMcPQ+0jF7Qq2dTCp8/RpVn91A3kw8bD9dTeZRd+UQvRz DZZ3Zgg19PlE+XmAhUOiRWmxygs5/ZfaEZDiC2UjpITxUtNljodd/oIILmlHtbM6ylr9 E/jQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=aHIHiFuRfsXmSIZ3Twal1IxYrQJ8NUj4OOW47DLGTpU=; b=zIru6bMDNBAzQ9SEzEAxknJOIOpEr1kimfrXw5CPv1dBRKFrsm7XvUoCXk36jitenV +u/kbKjEpimNsZxWSieQZOWaR9JsFzVYYAiIJEUA+hTnIfN+lf1sJLrxTz4FRtW9eMU4 K73keWSHuaZY0vi3DqOa5h4WOjrvkkurqayq/SyNL13hoQVw0QKHKt7gBKCSBGiL7fqM AGXNyoAxgiocVhcS2JBQCBEXuefWbIqAIv2jjxrlAf/o1KjaE8YZHd6EyqwpY9nIWukk OrFj+q2a+eVvqgIT6IUvahqkiH4g0orDpNUHdpLSH2ZMTjRGKRKshaUqeCdv/VJVtGNM AjZw== 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=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c141si11149501pfc.169.2019.04.02.06.43.20; Tue, 02 Apr 2019 06:43:35 -0700 (PDT) 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=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731818AbfDBNmT (ORCPT + 99 others); Tue, 2 Apr 2019 09:42:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60468 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731540AbfDBNmR (ORCPT ); Tue, 2 Apr 2019 09:42:17 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9B89C85376; Tue, 2 Apr 2019 13:42:17 +0000 (UTC) Received: from prarit.khw1.lab.eng.bos.redhat.com (prarit-guest.khw1.lab.eng.bos.redhat.com [10.16.200.63]) by smtp.corp.redhat.com (Postfix) with ESMTP id 16A4918661; Tue, 2 Apr 2019 13:42:17 +0000 (UTC) From: Prarit Bhargava To: linux-kernel@vger.kernel.org Cc: cavery@redhat.com, Prarit Bhargava , Jessica Yu Subject: [PATCH] modules: Only return -EEXIST for modules that have finished loading Date: Tue, 2 Apr 2019 09:39:16 -0400 Message-Id: <20190402133916.13513-1-prarit@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 02 Apr 2019 13:42:17 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Reported-by: Cathy Avery Cc: Jessica Yu --- kernel/module.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/module.c b/kernel/module.c index 0b9aa8ab89f0..e8c1de2ab4e1 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -3566,8 +3566,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.17.2