]> www.infradead.org Git - users/willy/xarray.git/commitdiff
interconnect: Add a common helper for removing all nodes
authorGeorgi Djakov <georgi.djakov@linaro.org>
Mon, 2 Dec 2019 16:21:32 +0000 (18:21 +0200)
committerGeorgi Djakov <georgi.djakov@linaro.org>
Mon, 16 Dec 2019 07:25:22 +0000 (09:25 +0200)
The removal of all nodes from a provider seem to be a common functionality
for all existing users and it would make sense to factor out this into a
a common helper function.

Suggested-by: Dmitry Osipenko <digetx@gmail.com>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
drivers/interconnect/core.c
include/linux/interconnect-provider.h

index c498796adc074d5c42fdae5b95bbb809a43850b3..1b811423020a77fcb401e2c39676500dab09230a 100644 (file)
@@ -742,6 +742,28 @@ void icc_node_del(struct icc_node *node)
 }
 EXPORT_SYMBOL_GPL(icc_node_del);
 
+/**
+ * icc_nodes_remove() - remove all previously added nodes from provider
+ * @provider: the interconnect provider we are removing nodes from
+ *
+ * Return: 0 on success, or an error code otherwise
+ */
+int icc_nodes_remove(struct icc_provider *provider)
+{
+       struct icc_node *n, *tmp;
+
+       if (WARN_ON(IS_ERR_OR_NULL(provider)))
+               return -EINVAL;
+
+       list_for_each_entry_safe_reverse(n, tmp, &provider->nodes, node_list) {
+               icc_node_del(n);
+               icc_node_destroy(n->id);
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(icc_nodes_remove);
+
 /**
  * icc_provider_add() - add a new interconnect provider
  * @provider: the interconnect provider that will be added into topology
index b16f9effa555417cad9627af1d81d9722d1cd750..31440c9212165aececce3bc9b7eed85fb9f80cba 100644 (file)
@@ -98,6 +98,7 @@ int icc_link_create(struct icc_node *node, const int dst_id);
 int icc_link_destroy(struct icc_node *src, struct icc_node *dst);
 void icc_node_add(struct icc_node *node, struct icc_provider *provider);
 void icc_node_del(struct icc_node *node);
+int icc_nodes_remove(struct icc_provider *provider);
 int icc_provider_add(struct icc_provider *provider);
 int icc_provider_del(struct icc_provider *provider);
 
@@ -130,6 +131,11 @@ void icc_node_del(struct icc_node *node)
 {
 }
 
+static inline int icc_nodes_remove(struct icc_provider *provider)
+{
+       return -ENOTSUPP;
+}
+
 static inline int icc_provider_add(struct icc_provider *provider)
 {
        return -ENOTSUPP;