mlxsw: spectrum_qdisc: Extract a common leaf unoffload function
When the RED Qdisc is unoffloaded, it needs to reduce the reported backlog by the amount that is in the HW, so that only the SW backlog is contained in the counter. The same thing will need to be done by TBF, and likely any other leaf Qdisc as well. Extract a helper mlxsw_sp_qdisc_leaf_unoffload() and call it from mlxsw_sp_qdisc_red_unoffload(). Signed-off-by: Petr Machata <petrm@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3d0d592193
commit
be1d5a8a77
@ -420,18 +420,27 @@ mlxsw_sp_qdisc_red_replace(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
max, prob, p->is_ecn);
|
||||
}
|
||||
|
||||
static void
|
||||
mlxsw_sp_qdisc_leaf_unoffload(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
struct mlxsw_sp_qdisc *mlxsw_sp_qdisc,
|
||||
struct gnet_stats_queue *qstats)
|
||||
{
|
||||
u64 backlog;
|
||||
|
||||
backlog = mlxsw_sp_cells_bytes(mlxsw_sp_port->mlxsw_sp,
|
||||
mlxsw_sp_qdisc->stats_base.backlog);
|
||||
qstats->backlog -= backlog;
|
||||
mlxsw_sp_qdisc->stats_base.backlog = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
mlxsw_sp_qdisc_red_unoffload(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
struct mlxsw_sp_qdisc *mlxsw_sp_qdisc,
|
||||
void *params)
|
||||
{
|
||||
struct tc_red_qopt_offload_params *p = params;
|
||||
u64 backlog;
|
||||
|
||||
backlog = mlxsw_sp_cells_bytes(mlxsw_sp_port->mlxsw_sp,
|
||||
mlxsw_sp_qdisc->stats_base.backlog);
|
||||
p->qstats->backlog -= backlog;
|
||||
mlxsw_sp_qdisc->stats_base.backlog = 0;
|
||||
mlxsw_sp_qdisc_leaf_unoffload(mlxsw_sp_port, mlxsw_sp_qdisc, p->qstats);
|
||||
}
|
||||
|
||||
static int
|
||||
|
Loading…
x
Reference in New Issue
Block a user