]> git.baikalelectronics.ru Git - kernel.git/commitdiff
devlink: Simplify devlink resources unregister call
authorLeon Romanovsky <leonro@nvidia.com>
Tue, 30 Nov 2021 10:16:20 +0000 (12:16 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 30 Nov 2021 12:23:32 +0000 (12:23 +0000)
The devlink_resources_unregister() used second parameter as an
entry point for the recursive removal of devlink resources. None
of the callers outside of devlink core needed to use this field,
so let's remove it.

As part of this removal, the "struct devlink_resource" was moved
from .h to .c file as it is not possible to use in any place in
the code except devlink.c.

Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/netdevsim/dev.c
include/net/devlink.h
net/core/devlink.c
net/dsa/dsa.c

index 3fd3812b8f314e1c44e37d76d3c7d6029b2892b5..0d1f08bbf631d9fa0ba6dfcc5d86d2045abac6d2 100644 (file)
@@ -160,7 +160,7 @@ static void mlxsw_ports_fini(struct mlxsw_core *mlxsw_core, bool reload)
 
        devlink_resource_occ_get_unregister(devlink, MLXSW_CORE_RESOURCE_PORTS);
        if (!reload)
-               devlink_resources_unregister(priv_to_devlink(mlxsw_core), NULL);
+               devlink_resources_unregister(priv_to_devlink(mlxsw_core));
 
        kfree(mlxsw_core->ports);
 }
@@ -2033,7 +2033,7 @@ err_alloc_lag_mapping:
        mlxsw_ports_fini(mlxsw_core, reload);
 err_ports_init:
        if (!reload)
-               devlink_resources_unregister(devlink, NULL);
+               devlink_resources_unregister(devlink);
 err_register_resources:
        mlxsw_bus->fini(bus_priv);
 err_bus_init:
@@ -2099,7 +2099,7 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core,
        kfree(mlxsw_core->lag.mapping);
        mlxsw_ports_fini(mlxsw_core, reload);
        if (!reload)
-               devlink_resources_unregister(devlink, NULL);
+               devlink_resources_unregister(devlink);
        mlxsw_core->bus->fini(mlxsw_core->bus_priv);
        if (!reload)
                devlink_free(devlink);
@@ -2108,7 +2108,7 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core,
 
 reload_fail_deinit:
        mlxsw_core_params_unregister(mlxsw_core);
-       devlink_resources_unregister(devlink, NULL);
+       devlink_resources_unregister(devlink);
        devlink_free(devlink);
 }
 EXPORT_SYMBOL(mlxsw_core_bus_device_unregister);
index 24157bb5988143e939bf19dec61a9893b019d891..f1ed7660b0b5d2117462d5e945a46ba92de75d2d 100644 (file)
@@ -3336,7 +3336,7 @@ err_resources_rif_mac_profile_register:
 err_policer_resources_register:
 err_resources_counter_register:
 err_resources_span_register:
-       devlink_resources_unregister(priv_to_devlink(mlxsw_core), NULL);
+       devlink_resources_unregister(priv_to_devlink(mlxsw_core));
        return err;
 }
 
@@ -3370,7 +3370,7 @@ err_resources_rif_mac_profile_register:
 err_policer_resources_register:
 err_resources_counter_register:
 err_resources_span_register:
-       devlink_resources_unregister(priv_to_devlink(mlxsw_core), NULL);
+       devlink_resources_unregister(priv_to_devlink(mlxsw_core));
        return err;
 }
 
index 54345c096a16f0500543a9b3917dd2c90121482a..08d7b465a0de99b83b59f8cd79375268c3c7ffb9 100644 (file)
@@ -1622,7 +1622,7 @@ err_params_unregister:
        devlink_params_unregister(devlink, nsim_devlink_params,
                                  ARRAY_SIZE(nsim_devlink_params));
 err_dl_unregister:
-       devlink_resources_unregister(devlink, NULL);
+       devlink_resources_unregister(devlink);
 err_vfc_free:
        kfree(nsim_dev->vfconfigs);
 err_devlink_free:
@@ -1668,7 +1668,7 @@ void nsim_drv_remove(struct nsim_bus_dev *nsim_bus_dev)
        nsim_dev_debugfs_exit(nsim_dev);
        devlink_params_unregister(devlink, nsim_devlink_params,
                                  ARRAY_SIZE(nsim_devlink_params));
-       devlink_resources_unregister(devlink, NULL);
+       devlink_resources_unregister(devlink);
        kfree(nsim_dev->vfconfigs);
        devlink_free(devlink);
        dev_set_drvdata(&nsim_bus_dev->dev, NULL);
index e3c88fabd7004126153a2f7f4c0a20a76b96f62e..043fcec8b0aadf041aba35b8339c93ac9336b551 100644 (file)
@@ -361,33 +361,6 @@ devlink_resource_size_params_init(struct devlink_resource_size_params *size_para
 
 typedef u64 devlink_resource_occ_get_t(void *priv);
 
-/**
- * struct devlink_resource - devlink resource
- * @name: name of the resource
- * @id: id, per devlink instance
- * @size: size of the resource
- * @size_new: updated size of the resource, reload is needed
- * @size_valid: valid in case the total size of the resource is valid
- *              including its children
- * @parent: parent resource
- * @size_params: size parameters
- * @list: parent list
- * @resource_list: list of child resources
- */
-struct devlink_resource {
-       const char *name;
-       u64 id;
-       u64 size;
-       u64 size_new;
-       bool size_valid;
-       struct devlink_resource *parent;
-       struct devlink_resource_size_params size_params;
-       struct list_head list;
-       struct list_head resource_list;
-       devlink_resource_occ_get_t *occ_get;
-       void *occ_get_priv;
-};
-
 #define DEVLINK_RESOURCE_ID_PARENT_TOP 0
 
 #define DEVLINK_RESOURCE_GENERIC_NAME_PORTS "physical_ports"
@@ -1571,8 +1544,7 @@ int devlink_resource_register(struct devlink *devlink,
                              u64 resource_id,
                              u64 parent_resource_id,
                              const struct devlink_resource_size_params *size_params);
-void devlink_resources_unregister(struct devlink *devlink,
-                                 struct devlink_resource *resource);
+void devlink_resources_unregister(struct devlink *devlink);
 int devlink_resource_size_get(struct devlink *devlink,
                              u64 resource_id,
                              u64 *p_resource_size);
index fd21022145a309c31ba3201fcb317f92b164a1c0..db3b52110cf273d428a252867aa382e88aeb02cb 100644 (file)
@@ -69,6 +69,35 @@ struct devlink {
        char priv[] __aligned(NETDEV_ALIGN);
 };
 
+/**
+ * struct devlink_resource - devlink resource
+ * @name: name of the resource
+ * @id: id, per devlink instance
+ * @size: size of the resource
+ * @size_new: updated size of the resource, reload is needed
+ * @size_valid: valid in case the total size of the resource is valid
+ *              including its children
+ * @parent: parent resource
+ * @size_params: size parameters
+ * @list: parent list
+ * @resource_list: list of child resources
+ * @occ_get: occupancy getter callback
+ * @occ_get_priv: occupancy getter callback priv
+ */
+struct devlink_resource {
+       const char *name;
+       u64 id;
+       u64 size;
+       u64 size_new;
+       bool size_valid;
+       struct devlink_resource *parent;
+       struct devlink_resource_size_params size_params;
+       struct list_head list;
+       struct list_head resource_list;
+       devlink_resource_occ_get_t *occ_get;
+       void *occ_get_priv;
+};
+
 void *devlink_priv(struct devlink *devlink)
 {
        return &devlink->priv;
@@ -9908,34 +9937,38 @@ out:
 }
 EXPORT_SYMBOL_GPL(devlink_resource_register);
 
+static void devlink_resource_unregister(struct devlink *devlink,
+                                       struct devlink_resource *resource)
+{
+       struct devlink_resource *tmp, *child_resource;
+
+       list_for_each_entry_safe(child_resource, tmp, &resource->resource_list,
+                                list) {
+               devlink_resource_unregister(devlink, child_resource);
+               list_del(&child_resource->list);
+               kfree(child_resource);
+       }
+}
+
 /**
  *     devlink_resources_unregister - free all resources
  *
  *     @devlink: devlink
- *     @resource: resource
  */
-void devlink_resources_unregister(struct devlink *devlink,
-                                 struct devlink_resource *resource)
+void devlink_resources_unregister(struct devlink *devlink)
 {
        struct devlink_resource *tmp, *child_resource;
-       struct list_head *resource_list;
-
-       if (resource)
-               resource_list = &resource->resource_list;
-       else
-               resource_list = &devlink->resource_list;
 
-       if (!resource)
-               mutex_lock(&devlink->lock);
+       mutex_lock(&devlink->lock);
 
-       list_for_each_entry_safe(child_resource, tmp, resource_list, list) {
-               devlink_resources_unregister(devlink, child_resource);
+       list_for_each_entry_safe(child_resource, tmp, &devlink->resource_list,
+                                list) {
+               devlink_resource_unregister(devlink, child_resource);
                list_del(&child_resource->list);
                kfree(child_resource);
        }
 
-       if (!resource)
-               mutex_unlock(&devlink->lock);
+       mutex_unlock(&devlink->lock);
 }
 EXPORT_SYMBOL_GPL(devlink_resources_unregister);
 
index ea5169e671aeae4796d99fa40f482460c9fd3eea..d9d0d227092c8c09acff4c936004d7b825300412 100644 (file)
@@ -406,7 +406,7 @@ EXPORT_SYMBOL_GPL(dsa_devlink_resource_register);
 
 void dsa_devlink_resources_unregister(struct dsa_switch *ds)
 {
-       devlink_resources_unregister(ds->devlink, NULL);
+       devlink_resources_unregister(ds->devlink);
 }
 EXPORT_SYMBOL_GPL(dsa_devlink_resources_unregister);