Skip to content

Commit

Permalink
x
Browse files Browse the repository at this point in the history
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
  • Loading branch information
Jiri Pirko committed Jun 28, 2022
1 parent 8d994d0 commit 9162f3d
Show file tree
Hide file tree
Showing 9 changed files with 181 additions and 170 deletions.
38 changes: 22 additions & 16 deletions drivers/net/ethernet/mellanox/mlxsw/core.c
Expand Up @@ -127,11 +127,11 @@ static int mlxsw_core_resources_ports_register(struct mlxsw_core *mlxsw_core)
max_ports, 1,
DEVLINK_RESOURCE_UNIT_ENTRY);

return devlink_resource_register(devlink,
DEVLINK_RESOURCE_GENERIC_NAME_PORTS,
max_ports, MLXSW_CORE_RESOURCE_PORTS,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&ports_num_params);
return devl_resource_register(devlink,
DEVLINK_RESOURCE_GENERIC_NAME_PORTS,
max_ports, MLXSW_CORE_RESOURCE_PORTS,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&ports_num_params);
}

static int mlxsw_ports_init(struct mlxsw_core *mlxsw_core, bool reload)
Expand All @@ -157,8 +157,8 @@ static int mlxsw_ports_init(struct mlxsw_core *mlxsw_core, bool reload)
goto err_resources_ports_register;
}
atomic_set(&mlxsw_core->active_ports_count, 0);
devlink_resource_occ_get_register(devlink, MLXSW_CORE_RESOURCE_PORTS,
mlxsw_ports_occ_get, mlxsw_core);
devl_resource_occ_get_register(devlink, MLXSW_CORE_RESOURCE_PORTS,
mlxsw_ports_occ_get, mlxsw_core);

return 0;

Expand All @@ -171,9 +171,9 @@ static void mlxsw_ports_fini(struct mlxsw_core *mlxsw_core, bool reload)
{
struct devlink *devlink = priv_to_devlink(mlxsw_core);

devlink_resource_occ_get_unregister(devlink, MLXSW_CORE_RESOURCE_PORTS);
devl_resource_occ_get_unregister(devlink, MLXSW_CORE_RESOURCE_PORTS);
if (!reload)
devlink_resources_unregister(priv_to_devlink(mlxsw_core));
devl_resources_unregister(priv_to_devlink(mlxsw_core));

kfree(mlxsw_core->ports);
}
Expand Down Expand Up @@ -1497,10 +1497,12 @@ mlxsw_devlink_core_bus_device_reload_down(struct devlink *devlink,
{
struct mlxsw_core *mlxsw_core = devlink_priv(devlink);

devl_lock();
if (!(mlxsw_core->bus->features & MLXSW_BUS_F_RESET))
return -EOPNOTSUPP;

mlxsw_core_bus_device_unregister(mlxsw_core, true);
devl_unlock();
return 0;
}

Expand All @@ -1510,13 +1512,17 @@ mlxsw_devlink_core_bus_device_reload_up(struct devlink *devlink, enum devlink_re
struct netlink_ext_ack *extack)
{
struct mlxsw_core *mlxsw_core = devlink_priv(devlink);
int err;

devl_lock();
*actions_performed = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT) |
BIT(DEVLINK_RELOAD_ACTION_FW_ACTIVATE);
return mlxsw_core_bus_device_register(mlxsw_core->bus_info,
mlxsw_core->bus,
mlxsw_core->bus_priv, true,
devlink, extack);
err = mlxsw_core_bus_device_register(mlxsw_core->bus_info,
mlxsw_core->bus,
mlxsw_core->bus_priv, true,
devlink, extack);
devl_unlock();
return err;
}

static int mlxsw_devlink_flash_update(struct devlink *devlink,
Expand Down Expand Up @@ -2226,7 +2232,7 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
mlxsw_ports_fini(mlxsw_core, reload);
err_ports_init:
if (!reload)
devlink_resources_unregister(devlink);
devl_resources_unregister(devlink);
err_register_resources:
mlxsw_bus->fini(bus_priv);
err_bus_init:
Expand Down Expand Up @@ -2293,7 +2299,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);
devl_resources_unregister(devlink);
mlxsw_core->bus->fini(mlxsw_core->bus_priv);
if (!reload)
devlink_free(devlink);
Expand All @@ -2302,7 +2308,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);
devl_resources_unregister(devlink);
devlink_free(devlink);
}
EXPORT_SYMBOL(mlxsw_core_bus_device_unregister);
Expand Down
5 changes: 5 additions & 0 deletions drivers/net/ethernet/mellanox/mlxsw/i2c.c
Expand Up @@ -10,6 +10,7 @@
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/slab.h>
#include <net/devlink.h>

#include "cmd.h"
#include "core.h"
Expand Down Expand Up @@ -639,9 +640,11 @@ static int mlxsw_i2c_probe(struct i2c_client *client,
mlxsw_i2c->bus_info.low_frequency = true;
mlxsw_i2c->dev = &client->dev;

devl_lock();
err = mlxsw_core_bus_device_register(&mlxsw_i2c->bus_info,
&mlxsw_i2c_bus, mlxsw_i2c, false,
NULL, NULL);
devl_unlock();
if (err) {
dev_err(&client->dev, "Fail to register core bus\n");
return err;
Expand All @@ -660,7 +663,9 @@ static int mlxsw_i2c_remove(struct i2c_client *client)
{
struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client);

devl_lock();
mlxsw_core_bus_device_unregister(mlxsw_i2c->core, false);
devl_unlock();
mutex_destroy(&mlxsw_i2c->cmd.lock);

return 0;
Expand Down
4 changes: 4 additions & 0 deletions drivers/net/ethernet/mellanox/mlxsw/pci.c
Expand Up @@ -1914,9 +1914,11 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
mlxsw_pci->bus_info.read_frc_capable = true;
mlxsw_pci->id = id;

devl_lock();
err = mlxsw_core_bus_device_register(&mlxsw_pci->bus_info,
&mlxsw_pci_bus, mlxsw_pci, false,
NULL, NULL);
devl_unlock();
if (err) {
dev_err(&pdev->dev, "cannot register bus device\n");
goto err_bus_device_register;
Expand All @@ -1943,7 +1945,9 @@ static void mlxsw_pci_remove(struct pci_dev *pdev)
{
struct mlxsw_pci *mlxsw_pci = pci_get_drvdata(pdev);

devl_lock();
mlxsw_core_bus_device_unregister(mlxsw_pci->core, false);
devl_unlock();
mlxsw_pci_cmd_fini(mlxsw_pci);
iounmap(mlxsw_pci->hw_addr);
pci_release_regions(mlxsw_pci->pdev);
Expand Down
100 changes: 48 additions & 52 deletions drivers/net/ethernet/mellanox/mlxsw/spectrum.c
Expand Up @@ -2007,12 +2007,10 @@ static void mlxsw_sp_ports_remove(struct mlxsw_sp *mlxsw_sp)
/* Make sure all scheduled events are processed */
__mlxsw_sp_port_mapping_events_cancel(mlxsw_sp);

devl_lock(devlink);
for (i = 1; i < max_ports; i++)
if (mlxsw_sp_port_created(mlxsw_sp, i))
mlxsw_sp_port_remove(mlxsw_sp, i);
mlxsw_sp_cpu_port_remove(mlxsw_sp);
devl_unlock(devlink);
kfree(mlxsw_sp->ports);
mlxsw_sp->ports = NULL;
}
Expand Down Expand Up @@ -2057,7 +2055,6 @@ static int mlxsw_sp_ports_create(struct mlxsw_sp *mlxsw_sp)
goto err_event_enable;
}

devl_lock(devlink);
err = mlxsw_sp_cpu_port_create(mlxsw_sp);
if (err)
goto err_cpu_port_create;
Expand All @@ -2070,7 +2067,6 @@ static int mlxsw_sp_ports_create(struct mlxsw_sp *mlxsw_sp)
if (err)
goto err_port_create;
}
devl_unlock(devlink);
return 0;

err_port_create:
Expand Down Expand Up @@ -3476,19 +3472,19 @@ static int mlxsw_sp1_resources_kvd_register(struct mlxsw_core *mlxsw_core)
&hash_single_size_params);

kvd_size = MLXSW_CORE_RES_GET(mlxsw_core, KVD_SIZE);
err = devlink_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD,
kvd_size, MLXSW_SP_RESOURCE_KVD,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&kvd_size_params);
err = devl_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD,
kvd_size, MLXSW_SP_RESOURCE_KVD,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&kvd_size_params);
if (err)
return err;

linear_size = profile->kvd_linear_size;
err = devlink_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD_LINEAR,
linear_size,
MLXSW_SP_RESOURCE_KVD_LINEAR,
MLXSW_SP_RESOURCE_KVD,
&linear_size_params);
err = devl_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD_LINEAR,
linear_size,
MLXSW_SP_RESOURCE_KVD_LINEAR,
MLXSW_SP_RESOURCE_KVD,
&linear_size_params);
if (err)
return err;

Expand All @@ -3501,20 +3497,20 @@ static int mlxsw_sp1_resources_kvd_register(struct mlxsw_core *mlxsw_core)
double_size /= profile->kvd_hash_double_parts +
profile->kvd_hash_single_parts;
double_size = rounddown(double_size, MLXSW_SP_KVD_GRANULARITY);
err = devlink_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD_HASH_DOUBLE,
double_size,
MLXSW_SP_RESOURCE_KVD_HASH_DOUBLE,
MLXSW_SP_RESOURCE_KVD,
&hash_double_size_params);
err = devl_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD_HASH_DOUBLE,
double_size,
MLXSW_SP_RESOURCE_KVD_HASH_DOUBLE,
MLXSW_SP_RESOURCE_KVD,
&hash_double_size_params);
if (err)
return err;

single_size = kvd_size - double_size - linear_size;
err = devlink_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD_HASH_SINGLE,
single_size,
MLXSW_SP_RESOURCE_KVD_HASH_SINGLE,
MLXSW_SP_RESOURCE_KVD,
&hash_single_size_params);
err = devl_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD_HASH_SINGLE,
single_size,
MLXSW_SP_RESOURCE_KVD_HASH_SINGLE,
MLXSW_SP_RESOURCE_KVD,
&hash_single_size_params);
if (err)
return err;

Expand All @@ -3535,10 +3531,10 @@ static int mlxsw_sp2_resources_kvd_register(struct mlxsw_core *mlxsw_core)
MLXSW_SP_KVD_GRANULARITY,
DEVLINK_RESOURCE_UNIT_ENTRY);

return devlink_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD,
kvd_size, MLXSW_SP_RESOURCE_KVD,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&kvd_size_params);
return devl_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD,
kvd_size, MLXSW_SP_RESOURCE_KVD,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&kvd_size_params);
}

static int mlxsw_sp_resources_span_register(struct mlxsw_core *mlxsw_core)
Expand All @@ -3554,10 +3550,10 @@ static int mlxsw_sp_resources_span_register(struct mlxsw_core *mlxsw_core)
devlink_resource_size_params_init(&span_size_params, max_span, max_span,
1, DEVLINK_RESOURCE_UNIT_ENTRY);

return devlink_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_SPAN,
max_span, MLXSW_SP_RESOURCE_SPAN,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&span_size_params);
return devl_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_SPAN,
max_span, MLXSW_SP_RESOURCE_SPAN,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&span_size_params);
}

static int
Expand All @@ -3576,12 +3572,12 @@ mlxsw_sp_resources_rif_mac_profile_register(struct mlxsw_core *mlxsw_core)
max_rif_mac_profiles, 1,
DEVLINK_RESOURCE_UNIT_ENTRY);

return devlink_resource_register(devlink,
"rif_mac_profiles",
max_rif_mac_profiles,
MLXSW_SP_RESOURCE_RIF_MAC_PROFILES,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&size_params);
return devl_resource_register(devlink,
"rif_mac_profiles",
max_rif_mac_profiles,
MLXSW_SP_RESOURCE_RIF_MAC_PROFILES,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&size_params);
}

static int mlxsw_sp_resources_rifs_register(struct mlxsw_core *mlxsw_core)
Expand All @@ -3597,10 +3593,10 @@ static int mlxsw_sp_resources_rifs_register(struct mlxsw_core *mlxsw_core)
devlink_resource_size_params_init(&size_params, max_rifs, max_rifs,
1, DEVLINK_RESOURCE_UNIT_ENTRY);

return devlink_resource_register(devlink, "rifs", max_rifs,
MLXSW_SP_RESOURCE_RIFS,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&size_params);
return devl_resource_register(devlink, "rifs", max_rifs,
MLXSW_SP_RESOURCE_RIFS,
DEVLINK_RESOURCE_ID_PARENT_TOP,
&size_params);
}

static int mlxsw_sp1_resources_register(struct mlxsw_core *mlxsw_core)
Expand Down Expand Up @@ -3638,7 +3634,7 @@ static int mlxsw_sp1_resources_register(struct mlxsw_core *mlxsw_core)
err_policer_resources_register:
err_resources_counter_register:
err_resources_span_register:
devlink_resources_unregister(priv_to_devlink(mlxsw_core));
devl_resources_unregister(priv_to_devlink(mlxsw_core));
return err;
}

Expand Down Expand Up @@ -3677,7 +3673,7 @@ static int mlxsw_sp2_resources_register(struct mlxsw_core *mlxsw_core)
err_policer_resources_register:
err_resources_counter_register:
err_resources_span_register:
devlink_resources_unregister(priv_to_devlink(mlxsw_core));
devl_resources_unregister(priv_to_devlink(mlxsw_core));
return err;
}

Expand All @@ -3701,15 +3697,15 @@ static int mlxsw_sp_kvd_sizes_get(struct mlxsw_core *mlxsw_core,
* granularity from the profile. In case the user
* provided the sizes they are obtained via devlink.
*/
err = devlink_resource_size_get(devlink,
MLXSW_SP_RESOURCE_KVD_LINEAR,
p_linear_size);
err = devl_resource_size_get(devlink,
MLXSW_SP_RESOURCE_KVD_LINEAR,
p_linear_size);
if (err)
*p_linear_size = profile->kvd_linear_size;

err = devlink_resource_size_get(devlink,
MLXSW_SP_RESOURCE_KVD_HASH_DOUBLE,
p_double_size);
err = devl_resource_size_get(devlink,
MLXSW_SP_RESOURCE_KVD_HASH_DOUBLE,
p_double_size);
if (err) {
double_size = MLXSW_CORE_RES_GET(mlxsw_core, KVD_SIZE) -
*p_linear_size;
Expand All @@ -3720,9 +3716,9 @@ static int mlxsw_sp_kvd_sizes_get(struct mlxsw_core *mlxsw_core,
MLXSW_SP_KVD_GRANULARITY);
}

err = devlink_resource_size_get(devlink,
MLXSW_SP_RESOURCE_KVD_HASH_SINGLE,
p_single_size);
err = devl_resource_size_get(devlink,
MLXSW_SP_RESOURCE_KVD_HASH_SINGLE,
p_single_size);
if (err)
*p_single_size = MLXSW_CORE_RES_GET(mlxsw_core, KVD_SIZE) -
*p_double_size - *p_linear_size;
Expand Down

0 comments on commit 9162f3d

Please sign in to comment.