Commit aa7c0621 authored by Petr Machata's avatar Petr Machata Committed by David S. Miller

mlxsw: spectrum: Track buffer sizes in struct mlxsw_sp_hdroom

So far, port buffers were always autoconfigured. When dcbnl_setbuffer
callback is implemented, it will allow the user to change the buffer size
configuration by hand. The sizes therefore need to be a configuration
parameter, not always deduced, and therefore belong to struct
mlxsw_sp_hdroom, where the configuration routine should take them from.

Update mlxsw_sp_port_headroom_set() to update these sizes. Have the
function update the sizes even for the case that a given buffer is not
used.

Additionally, change the loop iteration end to DCBX_MAX_BUFFERS instead of
IEEE_8021QAZ_MAX_TCS. The value is the same, but the semantics differ.
Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ca21e84e
...@@ -671,19 +671,28 @@ int mlxsw_sp_port_headroom_set(struct mlxsw_sp_port *mlxsw_sp_port, ...@@ -671,19 +671,28 @@ int mlxsw_sp_port_headroom_set(struct mlxsw_sp_port *mlxsw_sp_port,
if (err) if (err)
return err; return err;
for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) { for (i = 0; i < DCBX_MAX_BUFFERS; i++) {
struct mlxsw_sp_hdroom_buf *buf = &hdroom->bufs.buf[i]; struct mlxsw_sp_hdroom_buf *buf = &hdroom->bufs.buf[i];
u16 thres_cells; u16 thres_cells;
u16 delay_cells; u16 delay_cells;
u16 total_cells; u16 total_cells;
if (!mlxsw_sp_hdroom_buf_is_used(hdroom, i)) if (!mlxsw_sp_hdroom_buf_is_used(hdroom, i)) {
continue; thres_cells = 0;
delay_cells = 0;
} else if (buf->lossy) {
thres_cells = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, hdroom->mtu);
delay_cells = 0;
} else {
thres_cells = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, hdroom->mtu);
delay_cells = mlxsw_sp_hdroom_buf_delay_get(mlxsw_sp, hdroom);
}
thres_cells = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, hdroom->mtu);
thres_cells = mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, thres_cells); thres_cells = mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, thres_cells);
delay_cells = mlxsw_sp_hdroom_buf_delay_get(mlxsw_sp, hdroom);
delay_cells = mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, delay_cells); delay_cells = mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, delay_cells);
buf->thres_cells = thres_cells;
buf->size_cells = thres_cells + delay_cells;
total_cells = thres_cells + delay_cells; total_cells = thres_cells + delay_cells;
taken_headroom_cells += total_cells; taken_headroom_cells += total_cells;
......
...@@ -447,6 +447,8 @@ struct mlxsw_sp_hdroom_prio { ...@@ -447,6 +447,8 @@ struct mlxsw_sp_hdroom_prio {
}; };
struct mlxsw_sp_hdroom_buf { struct mlxsw_sp_hdroom_buf {
u32 thres_cells;
u32 size_cells;
bool lossy; bool lossy;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment