|
@@ -2099,11 +2099,8 @@ static void mlxsw_sp_pude_event_func(const struct mlxsw_reg_info *reg,
|
|
|
|
|
|
local_port = mlxsw_reg_pude_local_port_get(pude_pl);
|
|
local_port = mlxsw_reg_pude_local_port_get(pude_pl);
|
|
mlxsw_sp_port = mlxsw_sp->ports[local_port];
|
|
mlxsw_sp_port = mlxsw_sp->ports[local_port];
|
|
- if (!mlxsw_sp_port) {
|
|
|
|
- dev_warn(mlxsw_sp->bus_info->dev, "Port %d: Link event received for non-existent port\n",
|
|
|
|
- local_port);
|
|
|
|
|
|
+ if (!mlxsw_sp_port)
|
|
return;
|
|
return;
|
|
- }
|
|
|
|
|
|
|
|
status = mlxsw_reg_pude_oper_status_get(pude_pl);
|
|
status = mlxsw_reg_pude_oper_status_get(pude_pl);
|
|
if (status == MLXSW_PORT_OPER_STATUS_UP) {
|
|
if (status == MLXSW_PORT_OPER_STATUS_UP) {
|
|
@@ -2405,16 +2402,10 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
- err = mlxsw_sp_ports_create(mlxsw_sp);
|
|
|
|
- if (err) {
|
|
|
|
- dev_err(mlxsw_sp->bus_info->dev, "Failed to create ports\n");
|
|
|
|
- return err;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
err = mlxsw_sp_event_register(mlxsw_sp, MLXSW_TRAP_ID_PUDE);
|
|
err = mlxsw_sp_event_register(mlxsw_sp, MLXSW_TRAP_ID_PUDE);
|
|
if (err) {
|
|
if (err) {
|
|
dev_err(mlxsw_sp->bus_info->dev, "Failed to register for PUDE events\n");
|
|
dev_err(mlxsw_sp->bus_info->dev, "Failed to register for PUDE events\n");
|
|
- goto err_event_register;
|
|
|
|
|
|
+ return err;
|
|
}
|
|
}
|
|
|
|
|
|
err = mlxsw_sp_traps_init(mlxsw_sp);
|
|
err = mlxsw_sp_traps_init(mlxsw_sp);
|
|
@@ -2447,8 +2438,16 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
|
|
goto err_switchdev_init;
|
|
goto err_switchdev_init;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ err = mlxsw_sp_ports_create(mlxsw_sp);
|
|
|
|
+ if (err) {
|
|
|
|
+ dev_err(mlxsw_sp->bus_info->dev, "Failed to create ports\n");
|
|
|
|
+ goto err_ports_create;
|
|
|
|
+ }
|
|
|
|
+
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
|
|
+err_ports_create:
|
|
|
|
+ mlxsw_sp_switchdev_fini(mlxsw_sp);
|
|
err_switchdev_init:
|
|
err_switchdev_init:
|
|
err_lag_init:
|
|
err_lag_init:
|
|
mlxsw_sp_buffers_fini(mlxsw_sp);
|
|
mlxsw_sp_buffers_fini(mlxsw_sp);
|
|
@@ -2457,8 +2456,6 @@ err_flood_init:
|
|
mlxsw_sp_traps_fini(mlxsw_sp);
|
|
mlxsw_sp_traps_fini(mlxsw_sp);
|
|
err_rx_listener_register:
|
|
err_rx_listener_register:
|
|
mlxsw_sp_event_unregister(mlxsw_sp, MLXSW_TRAP_ID_PUDE);
|
|
mlxsw_sp_event_unregister(mlxsw_sp, MLXSW_TRAP_ID_PUDE);
|
|
-err_event_register:
|
|
|
|
- mlxsw_sp_ports_remove(mlxsw_sp);
|
|
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2466,11 +2463,11 @@ static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core)
|
|
{
|
|
{
|
|
struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
|
|
struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
|
|
|
|
|
|
|
|
+ mlxsw_sp_ports_remove(mlxsw_sp);
|
|
mlxsw_sp_switchdev_fini(mlxsw_sp);
|
|
mlxsw_sp_switchdev_fini(mlxsw_sp);
|
|
mlxsw_sp_buffers_fini(mlxsw_sp);
|
|
mlxsw_sp_buffers_fini(mlxsw_sp);
|
|
mlxsw_sp_traps_fini(mlxsw_sp);
|
|
mlxsw_sp_traps_fini(mlxsw_sp);
|
|
mlxsw_sp_event_unregister(mlxsw_sp, MLXSW_TRAP_ID_PUDE);
|
|
mlxsw_sp_event_unregister(mlxsw_sp, MLXSW_TRAP_ID_PUDE);
|
|
- mlxsw_sp_ports_remove(mlxsw_sp);
|
|
|
|
WARN_ON(!list_empty(&mlxsw_sp->fids));
|
|
WARN_ON(!list_empty(&mlxsw_sp->fids));
|
|
}
|
|
}
|
|
|
|
|