Skip to content

Commit 1ceecc8

Browse files
jpirkodavem330
authored andcommitted
mlxsw: core: Add devlink shared buffer occupancy callbacks
Add middle layer in mlxsw core code to forward shared buffer occupancy calls into specific ASIC drivers. Signed-off-by: Jiri Pirko <[email protected]> Reviewed-by: Ido Schimmel <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 0f433fa commit 1ceecc8

File tree

2 files changed

+77
-8
lines changed

2 files changed

+77
-8
lines changed

drivers/net/ethernet/mellanox/mlxsw/core.c

Lines changed: 66 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -911,15 +911,73 @@ mlxsw_devlink_sb_tc_pool_bind_set(struct devlink_port *devlink_port,
911911
pool_index, threshold);
912912
}
913913

914+
static int mlxsw_devlink_sb_occ_snapshot(struct devlink *devlink,
915+
unsigned int sb_index)
916+
{
917+
struct mlxsw_core *mlxsw_core = devlink_priv(devlink);
918+
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
919+
920+
if (!mlxsw_driver->sb_occ_snapshot)
921+
return -EOPNOTSUPP;
922+
return mlxsw_driver->sb_occ_snapshot(mlxsw_core, sb_index);
923+
}
924+
925+
static int mlxsw_devlink_sb_occ_max_clear(struct devlink *devlink,
926+
unsigned int sb_index)
927+
{
928+
struct mlxsw_core *mlxsw_core = devlink_priv(devlink);
929+
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
930+
931+
if (!mlxsw_driver->sb_occ_max_clear)
932+
return -EOPNOTSUPP;
933+
return mlxsw_driver->sb_occ_max_clear(mlxsw_core, sb_index);
934+
}
935+
936+
static int
937+
mlxsw_devlink_sb_occ_port_pool_get(struct devlink_port *devlink_port,
938+
unsigned int sb_index, u16 pool_index,
939+
u32 *p_cur, u32 *p_max)
940+
{
941+
struct mlxsw_core *mlxsw_core = devlink_priv(devlink_port->devlink);
942+
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
943+
struct mlxsw_core_port *mlxsw_core_port = __dl_port(devlink_port);
944+
945+
if (!mlxsw_driver->sb_occ_port_pool_get)
946+
return -EOPNOTSUPP;
947+
return mlxsw_driver->sb_occ_port_pool_get(mlxsw_core_port, sb_index,
948+
pool_index, p_cur, p_max);
949+
}
950+
951+
static int
952+
mlxsw_devlink_sb_occ_tc_port_bind_get(struct devlink_port *devlink_port,
953+
unsigned int sb_index, u16 tc_index,
954+
enum devlink_sb_pool_type pool_type,
955+
u32 *p_cur, u32 *p_max)
956+
{
957+
struct mlxsw_core *mlxsw_core = devlink_priv(devlink_port->devlink);
958+
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
959+
struct mlxsw_core_port *mlxsw_core_port = __dl_port(devlink_port);
960+
961+
if (!mlxsw_driver->sb_occ_tc_port_bind_get)
962+
return -EOPNOTSUPP;
963+
return mlxsw_driver->sb_occ_tc_port_bind_get(mlxsw_core_port,
964+
sb_index, tc_index,
965+
pool_type, p_cur, p_max);
966+
}
967+
914968
static const struct devlink_ops mlxsw_devlink_ops = {
915-
.port_split = mlxsw_devlink_port_split,
916-
.port_unsplit = mlxsw_devlink_port_unsplit,
917-
.sb_pool_get = mlxsw_devlink_sb_pool_get,
918-
.sb_pool_set = mlxsw_devlink_sb_pool_set,
919-
.sb_port_pool_get = mlxsw_devlink_sb_port_pool_get,
920-
.sb_port_pool_set = mlxsw_devlink_sb_port_pool_set,
921-
.sb_tc_pool_bind_get = mlxsw_devlink_sb_tc_pool_bind_get,
922-
.sb_tc_pool_bind_set = mlxsw_devlink_sb_tc_pool_bind_set,
969+
.port_split = mlxsw_devlink_port_split,
970+
.port_unsplit = mlxsw_devlink_port_unsplit,
971+
.sb_pool_get = mlxsw_devlink_sb_pool_get,
972+
.sb_pool_set = mlxsw_devlink_sb_pool_set,
973+
.sb_port_pool_get = mlxsw_devlink_sb_port_pool_get,
974+
.sb_port_pool_set = mlxsw_devlink_sb_port_pool_set,
975+
.sb_tc_pool_bind_get = mlxsw_devlink_sb_tc_pool_bind_get,
976+
.sb_tc_pool_bind_set = mlxsw_devlink_sb_tc_pool_bind_set,
977+
.sb_occ_snapshot = mlxsw_devlink_sb_occ_snapshot,
978+
.sb_occ_max_clear = mlxsw_devlink_sb_occ_max_clear,
979+
.sb_occ_port_pool_get = mlxsw_devlink_sb_occ_port_pool_get,
980+
.sb_occ_tc_port_bind_get = mlxsw_devlink_sb_occ_tc_port_bind_get,
923981
};
924982

925983
int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,

drivers/net/ethernet/mellanox/mlxsw/core.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,17 @@ struct mlxsw_driver {
229229
unsigned int sb_index, u16 tc_index,
230230
enum devlink_sb_pool_type pool_type,
231231
u16 pool_index, u32 threshold);
232+
int (*sb_occ_snapshot)(struct mlxsw_core *mlxsw_core,
233+
unsigned int sb_index);
234+
int (*sb_occ_max_clear)(struct mlxsw_core *mlxsw_core,
235+
unsigned int sb_index);
236+
int (*sb_occ_port_pool_get)(struct mlxsw_core_port *mlxsw_core_port,
237+
unsigned int sb_index, u16 pool_index,
238+
u32 *p_cur, u32 *p_max);
239+
int (*sb_occ_tc_port_bind_get)(struct mlxsw_core_port *mlxsw_core_port,
240+
unsigned int sb_index, u16 tc_index,
241+
enum devlink_sb_pool_type pool_type,
242+
u32 *p_cur, u32 *p_max);
232243
void (*txhdr_construct)(struct sk_buff *skb,
233244
const struct mlxsw_tx_info *tx_info);
234245
u8 txhdr_len;

0 commit comments

Comments
 (0)