/* Copyright (c) 2017-2018 Mellanox Technologies. All rights reserved */
#include <linux/kernel.h>
+#include <linux/mutex.h>
#include <net/devlink.h>
#include "spectrum.h"
rif_count = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS);
rtnl_lock();
+ mutex_lock(&mlxsw_sp->router->lock);
i = 0;
start_again:
err = devlink_dpipe_entry_ctx_prepare(dump_ctx);
devlink_dpipe_entry_ctx_close(dump_ctx);
if (i != rif_count)
goto start_again;
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
devlink_dpipe_entry_clear(&entry);
err_entry_append:
err_entry_get:
err_ctx_prepare:
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
devlink_dpipe_entry_clear(&entry);
return err;
int i;
rtnl_lock();
+ mutex_lock(&mlxsw_sp->router->lock);
for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {
struct mlxsw_sp_rif *rif = mlxsw_sp_rif_by_index(mlxsw_sp, i);
mlxsw_sp_rif_counter_free(mlxsw_sp, rif,
MLXSW_SP_RIF_COUNTER_EGRESS);
}
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
return 0;
}
int err;
rtnl_lock();
+ mutex_lock(&mlxsw_sp->router->lock);
i = 0;
rif_count = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS);
start_again:
if (i != rif_count)
goto start_again;
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
return 0;
err_ctx_prepare:
err_entry_append:
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
return err;
}
int i;
rtnl_lock();
+ mutex_lock(&mlxsw_sp->router->lock);
for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {
struct mlxsw_sp_rif *rif = mlxsw_sp_rif_by_index(mlxsw_sp, i);
struct mlxsw_sp_neigh_entry *neigh_entry;
enable);
}
}
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
}
int i;
rtnl_lock();
+ mutex_lock(&mlxsw_sp->router->lock);
for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {
struct mlxsw_sp_rif *rif = mlxsw_sp_rif_by_index(mlxsw_sp, i);
struct mlxsw_sp_neigh_entry *neigh_entry;
size++;
}
}
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
return size;
int err;
rtnl_lock();
+ mutex_lock(&mlxsw_sp->router->lock);
nh_count_max = mlxsw_sp_dpipe_table_adj_size(mlxsw_sp);
start_again:
err = devlink_dpipe_entry_ctx_prepare(dump_ctx);
devlink_dpipe_entry_ctx_close(dump_ctx);
if (nh_count != nh_count_max)
goto start_again;
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
return 0;
err_ctx_prepare:
err_entry_append:
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
return err;
}
u64 size;
rtnl_lock();
+ mutex_lock(&mlxsw_sp->router->lock);
size = mlxsw_sp_dpipe_table_adj_size(mlxsw_sp);
+ mutex_unlock(&mlxsw_sp->router->lock);
rtnl_unlock();
return size;