mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
mlxsw: spectrum: Register SPAN before switchdev
Since switchdev events can trigger SPAN respin, it is necessary that the data structures are available. Register SPAN first, with a commentary on what the dependencies are. Signed-off-by: Petr Machata <petrm@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ea93c7b608
commit
cda880de93
@ -3666,6 +3666,15 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
|
|||||||
goto err_lag_init;
|
goto err_lag_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize SPAN before router and switchdev, so that those components
|
||||||
|
* can call mlxsw_sp_span_respin().
|
||||||
|
*/
|
||||||
|
err = mlxsw_sp_span_init(mlxsw_sp);
|
||||||
|
if (err) {
|
||||||
|
dev_err(mlxsw_sp->bus_info->dev, "Failed to init span system\n");
|
||||||
|
goto err_span_init;
|
||||||
|
}
|
||||||
|
|
||||||
err = mlxsw_sp_switchdev_init(mlxsw_sp);
|
err = mlxsw_sp_switchdev_init(mlxsw_sp);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(mlxsw_sp->bus_info->dev, "Failed to initialize switchdev\n");
|
dev_err(mlxsw_sp->bus_info->dev, "Failed to initialize switchdev\n");
|
||||||
@ -3684,15 +3693,6 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
|
|||||||
goto err_afa_init;
|
goto err_afa_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = mlxsw_sp_span_init(mlxsw_sp);
|
|
||||||
if (err) {
|
|
||||||
dev_err(mlxsw_sp->bus_info->dev, "Failed to init span system\n");
|
|
||||||
goto err_span_init;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize router after SPAN is initialized, so that the FIB and
|
|
||||||
* neighbor event handlers can issue SPAN respin.
|
|
||||||
*/
|
|
||||||
err = mlxsw_sp_router_init(mlxsw_sp);
|
err = mlxsw_sp_router_init(mlxsw_sp);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(mlxsw_sp->bus_info->dev, "Failed to initialize router\n");
|
dev_err(mlxsw_sp->bus_info->dev, "Failed to initialize router\n");
|
||||||
@ -3739,14 +3739,14 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
|
|||||||
err_netdev_notifier:
|
err_netdev_notifier:
|
||||||
mlxsw_sp_router_fini(mlxsw_sp);
|
mlxsw_sp_router_fini(mlxsw_sp);
|
||||||
err_router_init:
|
err_router_init:
|
||||||
mlxsw_sp_span_fini(mlxsw_sp);
|
|
||||||
err_span_init:
|
|
||||||
mlxsw_sp_afa_fini(mlxsw_sp);
|
mlxsw_sp_afa_fini(mlxsw_sp);
|
||||||
err_afa_init:
|
err_afa_init:
|
||||||
mlxsw_sp_counter_pool_fini(mlxsw_sp);
|
mlxsw_sp_counter_pool_fini(mlxsw_sp);
|
||||||
err_counter_pool_init:
|
err_counter_pool_init:
|
||||||
mlxsw_sp_switchdev_fini(mlxsw_sp);
|
mlxsw_sp_switchdev_fini(mlxsw_sp);
|
||||||
err_switchdev_init:
|
err_switchdev_init:
|
||||||
|
mlxsw_sp_span_fini(mlxsw_sp);
|
||||||
|
err_span_init:
|
||||||
mlxsw_sp_lag_fini(mlxsw_sp);
|
mlxsw_sp_lag_fini(mlxsw_sp);
|
||||||
err_lag_init:
|
err_lag_init:
|
||||||
mlxsw_sp_buffers_fini(mlxsw_sp);
|
mlxsw_sp_buffers_fini(mlxsw_sp);
|
||||||
@ -3768,10 +3768,10 @@ static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core)
|
|||||||
mlxsw_sp_acl_fini(mlxsw_sp);
|
mlxsw_sp_acl_fini(mlxsw_sp);
|
||||||
unregister_netdevice_notifier(&mlxsw_sp->netdevice_nb);
|
unregister_netdevice_notifier(&mlxsw_sp->netdevice_nb);
|
||||||
mlxsw_sp_router_fini(mlxsw_sp);
|
mlxsw_sp_router_fini(mlxsw_sp);
|
||||||
mlxsw_sp_span_fini(mlxsw_sp);
|
|
||||||
mlxsw_sp_afa_fini(mlxsw_sp);
|
mlxsw_sp_afa_fini(mlxsw_sp);
|
||||||
mlxsw_sp_counter_pool_fini(mlxsw_sp);
|
mlxsw_sp_counter_pool_fini(mlxsw_sp);
|
||||||
mlxsw_sp_switchdev_fini(mlxsw_sp);
|
mlxsw_sp_switchdev_fini(mlxsw_sp);
|
||||||
|
mlxsw_sp_span_fini(mlxsw_sp);
|
||||||
mlxsw_sp_lag_fini(mlxsw_sp);
|
mlxsw_sp_lag_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);
|
||||||
|
Loading…
Reference in New Issue
Block a user