Skip to content

Commit 9db481c

Browse files
jhovoldGeorgi Djakov
authored andcommitted
memory: tegra30-emc: fix interconnect registration race
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: d5ef16b ("memory: tegra20: Support interconnect framework") Cc: stable@vger.kernel.org # 5.11 Cc: Dmitry Osipenko <digetx@gmail.com> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Johan Hovold <johan+linaro@kernel.org> Link: https://lore.kernel.org/r/20230306075651.2449-21-johan+linaro@kernel.org Signed-off-by: Georgi Djakov <djakov@kernel.org>
1 parent c5587f6 commit 9db481c

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

drivers/memory/tegra/tegra30-emc.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,15 +1533,13 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc)
15331533
emc->provider.aggregate = soc->icc_ops->aggregate;
15341534
emc->provider.xlate_extended = emc_of_icc_xlate_extended;
15351535

1536-
err = icc_provider_add(&emc->provider);
1537-
if (err)
1538-
goto err_msg;
1536+
icc_provider_init(&emc->provider);
15391537

15401538
/* create External Memory Controller node */
15411539
node = icc_node_create(TEGRA_ICC_EMC);
15421540
if (IS_ERR(node)) {
15431541
err = PTR_ERR(node);
1544-
goto del_provider;
1542+
goto err_msg;
15451543
}
15461544

15471545
node->name = "External Memory Controller";
@@ -1562,12 +1560,14 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc)
15621560
node->name = "External Memory (DRAM)";
15631561
icc_node_add(node, &emc->provider);
15641562

1563+
err = icc_provider_register(&emc->provider);
1564+
if (err)
1565+
goto remove_nodes;
1566+
15651567
return 0;
15661568

15671569
remove_nodes:
15681570
icc_nodes_remove(&emc->provider);
1569-
del_provider:
1570-
icc_provider_del(&emc->provider);
15711571
err_msg:
15721572
dev_err(emc->dev, "failed to initialize ICC: %d\n", err);
15731573

0 commit comments

Comments
 (0)