Commit 65626e07 authored by Petr Machata's avatar Petr Machata Committed by David S. Miller
Browse files

mlxsw: spectrum_qdisc: Destroy children in mlxsw_sp_qdisc_destroy()



Currently ETS and PRIO are the only offloaded classful qdiscs. Since they
are both similar, their destroy handler is the same, and it handles
children destruction itself. But now it is possible to do it generically
for any classful qdisc. Therefore promote the recursive destruction from
the ETS handler to mlxsw_sp_qdisc_destroy(), so that RED and TBF pick it up
in follow-up patches.

Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 91796f50
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -232,6 +232,7 @@ mlxsw_sp_qdisc_destroy(struct mlxsw_sp_port *mlxsw_sp_port,
	struct mlxsw_sp_qdisc *root_qdisc = &mlxsw_sp_port->qdisc->root_qdisc;
	int err_hdroom = 0;
	int err = 0;
	int i;

	if (!mlxsw_sp_qdisc)
		return 0;
@@ -249,6 +250,9 @@ mlxsw_sp_qdisc_destroy(struct mlxsw_sp_port *mlxsw_sp_port,
	if (!mlxsw_sp_qdisc->ops)
		return 0;

	for (i = 0; i < mlxsw_sp_qdisc->num_classes; i++)
		mlxsw_sp_qdisc_destroy(mlxsw_sp_port,
				       &mlxsw_sp_qdisc->qdiscs[i]);
	mlxsw_sp_qdisc_reduce_parent_backlog(mlxsw_sp_qdisc);
	if (mlxsw_sp_qdisc->ops->destroy)
		err = mlxsw_sp_qdisc->ops->destroy(mlxsw_sp_port,
@@ -1123,8 +1127,6 @@ static int __mlxsw_sp_qdisc_ets_destroy(struct mlxsw_sp_port *mlxsw_sp_port,
		mlxsw_sp_port_ets_set(mlxsw_sp_port,
				      MLXSW_REG_QEEC_HR_SUBGROUP,
				      i, 0, false, 0);
		mlxsw_sp_qdisc_destroy(mlxsw_sp_port,
				       &mlxsw_sp_qdisc->qdiscs[i]);
	}

	kfree(mlxsw_sp_qdisc->ets_data);