From patchwork Mon Mar 6 07:56:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 64508 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1723844wrd; Mon, 6 Mar 2023 00:33:38 -0800 (PST) X-Google-Smtp-Source: AK7set8tnAs3yVI89tyM2K47oj67Gmz5iwqqh5ejLAxMMXMT5eIbj8K04XUuwLQ/rxuQ32hSFHmz X-Received: by 2002:a17:907:d14:b0:8f6:711b:8d67 with SMTP id gn20-20020a1709070d1400b008f6711b8d67mr14811277ejc.26.1678091618147; Mon, 06 Mar 2023 00:33:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678091618; cv=none; d=google.com; s=arc-20160816; b=du8pYPKs9b01haNMA4/d7caVU7T8mlB+R08p9s1zs19aEb1veOeql5Zrhg9FbFJcdd Mv6W26WUj33Ri2sRchIJXGCO9/sGMLNMJCOJSdmPFXOJrdOd6SkZSvkk4VOhEknGX2s8 v2QmmWSvg/W6CRiiVOTGO7GxwhNbfWXSoyGmAYe673in3lpUl+Q/zxpVr4ta5/gTWbt9 qTNXhlEIzW29LJq2LyvqSf22MPGfOSzxpHy1CF3CoZzqwKrtSFL2TbDJt1QEiEZN9l0O QQ9azTbjGCHBboG6W9rxzRv63wg5XA9+n9d4clHvCNJeW9rW4TNJfVxV6cBCfyxEqpha RWrg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Q3T3qZpd6FjFSRX50QpgOtnFdSD8rA49O2eK9kK/4Jw=; b=NlxaU9EgpU/batP0MrJkl9LufugwFRvXuvWmhF9v3ePPuYEpD6XynjbB5+09zWkx2s fqghRhubGQTXoKBGJvdiQo2bqjVkFy0SyKsqK8tPx8BbJr011fweu4dTS8uz4xyL7AuG 1kQnYHfstJ+lGKiTb6uQ8LWO+xaD1V3guVKdc2uom0bLj6CyxdLY5VcjynE/5OjeSkmy Rgj3RG6/M4gSAA+9/kszpU0ZPiAH5okkL9yKTuTQ4ZTIk/wwjma/KdB/5LLo/pWYFlTo UcHpMuMo0QbB+zKB036ATksXJHl2g62yoXTGinXNSazN9cudrESF10qQfm+USmooVhSO Pmcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="TQbeL/Tn"; 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 hr23-20020a1709073f9700b008d6d20d1920si8605452ejc.35.2023.03.06.00.33.15; Mon, 06 Mar 2023 00:33:38 -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="TQbeL/Tn"; 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 S230083AbjCFH6i (ORCPT + 99 others); Mon, 6 Mar 2023 02:58:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53350 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229811AbjCFH5l (ORCPT ); Mon, 6 Mar 2023 02:57:41 -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 BDC3E1B54F; Sun, 5 Mar 2023 23:57:39 -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 31D8760C5E; Mon, 6 Mar 2023 07:57:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9E98EC432C6; Mon, 6 Mar 2023 07:57:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1678089456; bh=WNlDzMAqt5q/CNBKwmZZhn/yDyiT8ouCBiWMDKsMkEU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TQbeL/TnSrTU74g4MfD1rt07VPxAMBk+NUs+S1f9fzZIoQVrrZcAY+BZx91Pptjpr mXxN7Uy7WIllYAftmRVrEkcgXHfulRRmwVCtUWfUp8krBPzeJSvqi8o+Rt7LKD0rql pVs1we5Pk9g37BUuALHSmMxSkDVRoBGyM8yc0Bag6eMjnz+vLaqjZMkJRKjOigCezk KoK6WyYxgVbRZf8QRJLt2QEY3NKiwghRCkbDmVcS5zIMSnrs5O+9Dbd2XZzEKGylwv Dgt34o2ulc6NX5Df7eQVkqzOhazGvjLfJfpJ+nZ4pBKSHhO2rUb8qmYNwH0+37bcs7 sal6o6VVfl8iw== Received: from johan by xi.lan with local (Exim 4.94.2) (envelope-from ) id 1pZ5jc-0000iN-Pm; Mon, 06 Mar 2023 08:58:16 +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?QXJ0dXIgxZp3aWdv?= =?utf-8?b?xYQ=?= , "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 , stable@vger.kernel.org, Vinod Koul Subject: [PATCH v2 12/23] interconnect: qcom: sm8450: fix registration race Date: Mon, 6 Mar 2023 08:56:40 +0100 Message-Id: <20230306075651.2449-13-johan+linaro@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230306075651.2449-1-johan+linaro@kernel.org> References: <20230306075651.2449-1-johan+linaro@kernel.org> 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?1759606596233176679?= X-GMAIL-MSGID: =?utf-8?q?1759606596233176679?= The current interconnect provider registration interface is inherently racy as nodes are not added until the after adding the provider. This can specifically cause racing DT lookups to fail. Switch to using the new API where the provider is not registered until after it has been fully initialised. Fixes: fafc114a468e ("interconnect: qcom: Add SM8450 interconnect provider driver") Cc: stable@vger.kernel.org # 5.17 Reviewed-by: Konrad Dybcio Reviewed-by: Vinod Koul Signed-off-by: Johan Hovold --- drivers/interconnect/qcom/sm8450.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/interconnect/qcom/sm8450.c b/drivers/interconnect/qcom/sm8450.c index e3a12e3d6e06..c7a8bbf102a3 100644 --- a/drivers/interconnect/qcom/sm8450.c +++ b/drivers/interconnect/qcom/sm8450.c @@ -1876,9 +1876,10 @@ static int qnoc_probe(struct platform_device *pdev) provider->pre_aggregate = qcom_icc_pre_aggregate; provider->aggregate = qcom_icc_aggregate; provider->xlate_extended = qcom_icc_xlate_extended; - INIT_LIST_HEAD(&provider->nodes); provider->data = data; + icc_provider_init(provider); + qp->dev = &pdev->dev; qp->bcms = desc->bcms; qp->num_bcms = desc->num_bcms; @@ -1887,12 +1888,6 @@ static int qnoc_probe(struct platform_device *pdev) if (IS_ERR(qp->voter)) return PTR_ERR(qp->voter); - ret = icc_provider_add(provider); - if (ret) { - dev_err(&pdev->dev, "error adding interconnect provider\n"); - return ret; - } - for (i = 0; i < qp->num_bcms; i++) qcom_icc_bcm_init(qp->bcms[i], &pdev->dev); @@ -1905,7 +1900,7 @@ static int qnoc_probe(struct platform_device *pdev) node = icc_node_create(qnodes[i]->id); if (IS_ERR(node)) { ret = PTR_ERR(node); - goto err; + goto err_remove_nodes; } node->name = qnodes[i]->name; @@ -1919,12 +1914,17 @@ static int qnoc_probe(struct platform_device *pdev) } data->num_nodes = num_nodes; + ret = icc_provider_register(provider); + if (ret) + goto err_remove_nodes; + platform_set_drvdata(pdev, qp); return 0; -err: + +err_remove_nodes: icc_nodes_remove(provider); - icc_provider_del(provider); + return ret; } @@ -1932,8 +1932,8 @@ static int qnoc_remove(struct platform_device *pdev) { struct qcom_icc_provider *qp = platform_get_drvdata(pdev); + icc_provider_deregister(&qp->provider); icc_nodes_remove(&qp->provider); - icc_provider_del(&qp->provider); return 0; }