diff options
author | Georgi Djakov <georgi.djakov@linaro.org> | 2019-12-02 19:21:32 +0300 |
---|---|---|
committer | Georgi Djakov <georgi.djakov@linaro.org> | 2019-12-16 10:25:22 +0300 |
commit | 3cce2c6fa70c768e516bff011d77db72e2f38a15 (patch) | |
tree | 654af863e34de771a9e5b2532145f9a3a8e6af98 | |
parent | d1eef1c619749b2a57e514a3fa67d9a516ffa919 (diff) | |
download | linux-3cce2c6fa70c768e516bff011d77db72e2f38a15.tar.xz |
interconnect: Add a common helper for removing all nodes
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>
-rw-r--r-- | drivers/interconnect/core.c | 22 | ||||
-rw-r--r-- | include/linux/interconnect-provider.h | 6 |
2 files changed, 28 insertions, 0 deletions
diff --git a/drivers/interconnect/core.c b/drivers/interconnect/core.c index c498796adc07..1b811423020a 100644 --- a/drivers/interconnect/core.c +++ b/drivers/interconnect/core.c @@ -743,6 +743,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 * diff --git a/include/linux/interconnect-provider.h b/include/linux/interconnect-provider.h index b16f9effa555..31440c921216 100644 --- a/include/linux/interconnect-provider.h +++ b/include/linux/interconnect-provider.h @@ -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; |