From patchwork Wed Feb 1 10:15:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 4807 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp192099wrn; Wed, 1 Feb 2023 02:18:51 -0800 (PST) X-Google-Smtp-Source: AK7set8won8eTomOLRHc2jNCtzg1TuqyKIPnSNQMMfjiQSGIvaSOPUIQDiRAMPOairNL+cN95Tx/ X-Received: by 2002:a17:907:629b:b0:878:4e5a:18b8 with SMTP id nd27-20020a170907629b00b008784e5a18b8mr1120763ejc.66.1675246731412; Wed, 01 Feb 2023 02:18:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675246731; cv=none; d=google.com; s=arc-20160816; b=oF350k2PpNa0+8I3pyaua0OYYJ00qruYNeSORfxr46kw3qtvj/PaOUytgclVq+oysJ ak2h39wtpOoynr5DDq0T/0vltsoLg71z5CmnYZsRtPAlCMAy0Vawcf+AqGGcf/N+aKZI eT+TORSUMJoJUIF88BdycIjnhbPdmGGRpiPSw2/y8q5RWADOX07al86blZj3wnlOmErN 402qFclZ6BgK6tTo8dD5SFUsYnRq3DBxDp8CzedSBtMwO3N/ZDxSvly+qxWEAQLMUGC+ 7faly2kPNdlFhwVC2jCJMajsReiTbTtGL38+CT3ihBPd8q0HoFe0lftUn9NZbhm86Td2 xKXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=dE7bgm+T/oNQgnspx6nYEK84LHmsBEdh6qFIrG6xrDY=; b=y3o24cNqBbCjQssATeM0NbtBTK6d1F7qbyhyC4nCS05PSNif1byp1TGyOmhn6rqb/a ilBCcdrhBBW/WKalcdhplWh0UThAQhdOPwNHI/NZTf1A71EUSHWQWg1YuqxXi9uL+n72 Q+E5Qr4/sUiNdHLCpyoFC9RC2imCsJM+UsP6CecoFTMNHN72OdbGV9MbS8sI3TJsFRtb uU3zCj4PcfqdlADGCR7RWD2J1sO0084sd1VDiFZEQ8f5FhF/ledZDxC3tQft11o8m0h7 v5sENrKETgFKjWgI4HS8ZQuBEljs2vfZTYIfj1NvY0vJf8Vg5ZgrCiFcZX5haAgxKRmG OHtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=NFnfkoB2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id es15-20020a056402380f00b004a2662a697bsi5982171edb.493.2023.02.01.02.18.11; Wed, 01 Feb 2023 02:18:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=NFnfkoB2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231967AbjBAKQi (ORCPT + 99 others); Wed, 1 Feb 2023 05:16:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230294AbjBAKQe (ORCPT ); Wed, 1 Feb 2023 05:16:34 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 541762ED46; Wed, 1 Feb 2023 02:16:33 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E4EFC61719; Wed, 1 Feb 2023 10:16:32 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 54262C433D2; Wed, 1 Feb 2023 10:16:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1675246592; bh=+WgLPL8WT0FxtagHVUrZnhdj/8PeUOkJkr1/3azk/kU=; h=From:To:Cc:Subject:Date:From; b=NFnfkoB205ThPCMvaBzX+X/y7sneBmT7QeC/v8unUSlKGl0usZngnprenkKkUYfAV wrDzbWxvFlgCyvjLDdB1zlVyBSyXAXe3zx23luAukwYf7e9+d4fKoh2u2KKUvd0egz dEbdnUF1PvOUlERVVJvxiaMIhswRaVQxdAAoeW0r2tkkSN3MjqkdJc1xRGqS5ggZAy BoqAYpHPzIi/Mcg31Jl7ua2eQzpz3iNEzznPFrI6gAuKDoCq4Doy9L9jH+7lJ0El84 Z6xyeDO8w/+MYFKMWGf26rZEBG+AZRLi3Od3KYKQb3ubFi1ZZ5y74any3nlj2Q6AO6 KGv6vPgk9Yjhw== Received: from johan by xi.lan with local (Exim 4.94.2) (envelope-from ) id 1pNAAe-00043g-7u; Wed, 01 Feb 2023 11:16:53 +0100 From: Johan Hovold To: Georgi Djakov Cc: Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Andy Gross , Bjorn Andersson , Konrad Dybcio , Sylwester Nawrocki , =?utf-8?b?QXJ0dXIgxZp3aWdvxYQ=?= , Krzysztof Kozlowski , Alim Akhtar , Thierry Reding , Jonathan Hunter , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH 00/23] interconnect: fix racy provider registration Date: Wed, 1 Feb 2023 11:15:36 +0100 Message-Id: <20230201101559.15529-1-johan+linaro@kernel.org> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756623516974122480?= X-GMAIL-MSGID: =?utf-8?q?1756623516974122480?= The current interconnect provider interface is inherently racy as providers are expected to be registered before being fully initialised. This can specifically cause racing DT lookups to fail as I recently noticed when the Qualcomm cpufreq driver failed to probe: of_icc_xlate_onecell: invalid index 0 cpu cpu0: error -EINVAL: error finding src node cpu cpu0: dev_pm_opp_of_find_icc_paths: Unable to get path0: -22 qcom-cpufreq-hw: probe of 18591000.cpufreq failed with error -22 This only happens very rarely, but the bug is easily reproduced by increasing the race window by adding an msleep() after registering osm-l3 interconnect provider. Note that the Qualcomm cpufreq driver is especially susceptible to this race as the interconnect path is looked up from the CPU nodes so that driver core does not guarantee the probe order even when device links are enabled (which they not always are). This series adds a new interconnect provider registration API which is used to fix up the interconnect drivers before removing the old racy API. Included are also a number of fixes for other bugs found while preparing the series. Johan Johan Hovold (23): interconnect: fix mem leak when freeing nodes interconnect: fix icc_provider_del() error handling interconnect: fix provider registration API interconnect: imx: fix registration race interconnect: qcom: osm-l3: fix registration race interconnect: qcom: rpm: fix probe child-node error handling interconnect: qcom: rpm: fix probe PM domain error handling interconnect: qcom: rpm: fix registration race interconnect: qcom: rpmh: fix probe child-node error handling interconnect: qcom: rpmh: fix registration race interconnect: qcom: msm8974: fix registration race interconnect: qcom: sm8450: fix registration race interconnect: qcom: sm8550: fix registration race interconnect: exynos: fix node leak in probe PM QoS error path interconnect: exynos: fix registration race interconnect: exynos: drop redundant link destroy memory: tegra: fix interconnect registration race memory: tegra124-emc: fix interconnect registration race memory: tegra20-emc: fix interconnect registration race memory: tegra30-emc: fix interconnect registration race interconnect: drop racy registration API interconnect: drop unused icc_get() interface interconnect: drop unused icc_link_destroy() interface drivers/interconnect/core.c | 149 +++++--------------------- drivers/interconnect/imx/imx.c | 20 ++-- drivers/interconnect/qcom/icc-rpm.c | 33 +++--- drivers/interconnect/qcom/icc-rpmh.c | 30 ++++-- drivers/interconnect/qcom/msm8974.c | 20 ++-- drivers/interconnect/qcom/osm-l3.c | 14 ++- drivers/interconnect/qcom/sm8450.c | 22 ++-- drivers/interconnect/qcom/sm8550.c | 22 ++-- drivers/interconnect/samsung/exynos.c | 30 +++--- drivers/memory/tegra/mc.c | 16 ++- drivers/memory/tegra/tegra124-emc.c | 12 +-- drivers/memory/tegra/tegra20-emc.c | 12 +-- drivers/memory/tegra/tegra30-emc.c | 12 +-- include/linux/interconnect-provider.h | 19 ++-- include/linux/interconnect.h | 8 -- 15 files changed, 154 insertions(+), 265 deletions(-)