interconnect: Sanity check that node isn't already on list
authorBjorn Andersson <bjorn.andersson@linaro.org>
Fri, 25 Jun 2021 23:49:03 +0000 (16:49 -0700)
committerGeorgi Djakov <djakov@kernel.org>
Thu, 22 Jul 2021 07:06:51 +0000 (10:06 +0300)
Broken interconnect providers might add the same node multiple times or
in multiple providers, which causes strange errors as the provider's
node list is later traversed.

Detect that a node already has an associated provider, complain and
reject the addition of the node, to aid the developer.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/20210625234903.1324755-1-bjorn.andersson@linaro.org
Signed-off-by: Georgi Djakov <djakov@kernel.org>
drivers/interconnect/core.c

index 8a1e70e..fcb5d8e 100644 (file)
@@ -959,6 +959,9 @@ EXPORT_SYMBOL_GPL(icc_link_destroy);
  */
 void icc_node_add(struct icc_node *node, struct icc_provider *provider)
 {
+       if (WARN_ON(node->provider))
+               return;
+
        mutex_lock(&icc_lock);
 
        node->provider = provider;