mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
mlxsw: spectrum: qdiscs: Move qdisc's declarations to its designated file
Move all the qdisc related data from the spectrum.h to spectrum_qdisc.c. Create an init and fini functions for the qdiscs. Signed-off-by: Nogah Frankel <nogahf@mellanox.com> Reviewed-by: Yuval Mintz <yuvalm@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d016e13d80
commit
371b437a32
@ -3085,6 +3085,13 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u8 local_port,
|
||||
goto err_port_fids_init;
|
||||
}
|
||||
|
||||
err = mlxsw_sp_tc_qdisc_init(mlxsw_sp_port);
|
||||
if (err) {
|
||||
dev_err(mlxsw_sp->bus_info->dev, "Port %d: Failed to initialize TC qdiscs\n",
|
||||
mlxsw_sp_port->local_port);
|
||||
goto err_port_qdiscs_init;
|
||||
}
|
||||
|
||||
mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_get(mlxsw_sp_port, 1);
|
||||
if (IS_ERR(mlxsw_sp_port_vlan)) {
|
||||
dev_err(mlxsw_sp->bus_info->dev, "Port %d: Failed to create VID 1\n",
|
||||
@ -3113,6 +3120,8 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u8 local_port,
|
||||
mlxsw_sp_port_switchdev_fini(mlxsw_sp_port);
|
||||
mlxsw_sp_port_vlan_put(mlxsw_sp_port_vlan);
|
||||
err_port_vlan_get:
|
||||
mlxsw_sp_tc_qdisc_fini(mlxsw_sp_port);
|
||||
err_port_qdiscs_init:
|
||||
mlxsw_sp_port_fids_fini(mlxsw_sp_port);
|
||||
err_port_fids_init:
|
||||
mlxsw_sp_port_dcb_fini(mlxsw_sp_port);
|
||||
@ -3148,6 +3157,7 @@ static void mlxsw_sp_port_remove(struct mlxsw_sp *mlxsw_sp, u8 local_port)
|
||||
mlxsw_sp->ports[local_port] = NULL;
|
||||
mlxsw_sp_port_switchdev_fini(mlxsw_sp_port);
|
||||
mlxsw_sp_port_vlan_flush(mlxsw_sp_port);
|
||||
mlxsw_sp_tc_qdisc_fini(mlxsw_sp_port);
|
||||
mlxsw_sp_port_fids_fini(mlxsw_sp_port);
|
||||
mlxsw_sp_port_dcb_fini(mlxsw_sp_port);
|
||||
mlxsw_sp_port_swid_set(mlxsw_sp_port, MLXSW_PORT_SWID_DISABLED_PORT);
|
||||
|
@ -204,29 +204,6 @@ struct mlxsw_sp_port_vlan {
|
||||
struct list_head bridge_vlan_node;
|
||||
};
|
||||
|
||||
enum mlxsw_sp_qdisc_type {
|
||||
MLXSW_SP_QDISC_NO_QDISC,
|
||||
MLXSW_SP_QDISC_RED,
|
||||
};
|
||||
|
||||
struct mlxsw_sp_qdisc {
|
||||
u32 handle;
|
||||
enum mlxsw_sp_qdisc_type type;
|
||||
struct red_stats xstats_base;
|
||||
union {
|
||||
struct {
|
||||
u64 tail_drop_base;
|
||||
u64 ecn_base;
|
||||
u64 wred_drop_base;
|
||||
} red;
|
||||
} xstats;
|
||||
|
||||
u64 tx_bytes;
|
||||
u64 tx_packets;
|
||||
u64 drops;
|
||||
u64 overlimits;
|
||||
};
|
||||
|
||||
/* No need an internal lock; At worse - miss a single periodic iteration */
|
||||
struct mlxsw_sp_port_xstats {
|
||||
u64 ecn;
|
||||
@ -269,7 +246,7 @@ struct mlxsw_sp_port {
|
||||
} periodic_hw_stats;
|
||||
struct mlxsw_sp_port_sample *sample;
|
||||
struct list_head vlans_list;
|
||||
struct mlxsw_sp_qdisc root_qdisc;
|
||||
struct mlxsw_sp_qdisc *root_qdisc;
|
||||
unsigned acl_rule_count;
|
||||
};
|
||||
|
||||
@ -584,6 +561,8 @@ int mlxsw_sp_flower_stats(struct mlxsw_sp_port *mlxsw_sp_port, bool ingress,
|
||||
struct tc_cls_flower_offload *f);
|
||||
|
||||
/* spectrum_qdisc.c */
|
||||
int mlxsw_sp_tc_qdisc_init(struct mlxsw_sp_port *mlxsw_sp_port);
|
||||
void mlxsw_sp_tc_qdisc_fini(struct mlxsw_sp_port *mlxsw_sp_port);
|
||||
int mlxsw_sp_setup_tc_red(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
struct tc_red_qopt_offload *p);
|
||||
|
||||
|
@ -41,6 +41,28 @@
|
||||
#include "spectrum.h"
|
||||
#include "reg.h"
|
||||
|
||||
enum mlxsw_sp_qdisc_type {
|
||||
MLXSW_SP_QDISC_NO_QDISC,
|
||||
MLXSW_SP_QDISC_RED,
|
||||
};
|
||||
|
||||
struct mlxsw_sp_qdisc {
|
||||
u32 handle;
|
||||
enum mlxsw_sp_qdisc_type type;
|
||||
struct red_stats xstats_base;
|
||||
union {
|
||||
struct {
|
||||
u64 tail_drop_base;
|
||||
u64 ecn_base;
|
||||
u64 wred_drop_base;
|
||||
} red;
|
||||
} xstats;
|
||||
u64 tx_bytes;
|
||||
u64 tx_packets;
|
||||
u64 drops;
|
||||
u64 overlimits;
|
||||
};
|
||||
|
||||
static int
|
||||
mlxsw_sp_tclass_congestion_enable(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
int tclass_num, u32 min, u32 max,
|
||||
@ -251,7 +273,7 @@ int mlxsw_sp_setup_tc_red(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
if (p->parent != TC_H_ROOT)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mlxsw_sp_qdisc = &mlxsw_sp_port->root_qdisc;
|
||||
mlxsw_sp_qdisc = mlxsw_sp_port->root_qdisc;
|
||||
tclass_num = MLXSW_SP_PORT_DEFAULT_TCLASS;
|
||||
|
||||
switch (p->command) {
|
||||
@ -274,3 +296,18 @@ int mlxsw_sp_setup_tc_red(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
|
||||
int mlxsw_sp_tc_qdisc_init(struct mlxsw_sp_port *mlxsw_sp_port)
|
||||
{
|
||||
mlxsw_sp_port->root_qdisc = kzalloc(sizeof(*mlxsw_sp_port->root_qdisc),
|
||||
GFP_KERNEL);
|
||||
if (!mlxsw_sp_port->root_qdisc)
|
||||
return -ENOMEM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mlxsw_sp_tc_qdisc_fini(struct mlxsw_sp_port *mlxsw_sp_port)
|
||||
{
|
||||
kfree(mlxsw_sp_port->root_qdisc);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user