mlxsw: spectrum_router: Start using new trap adjacency entry
Start using the trap adjacency entry that was added in the previous patch and remove the existing one which is no longer needed. Note that the name of the old entry was inaccurate as the entry did not discard packets, but trapped them. Signed-off-by: Ido Schimmel <idosch@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4bdf80bcb7
commit
e3a3aae74d
@ -5797,41 +5797,6 @@ static int mlxsw_sp_fib_entry_commit(struct mlxsw_sp *mlxsw_sp,
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_adj_discard_write(struct mlxsw_sp *mlxsw_sp)
|
||||
{
|
||||
enum mlxsw_reg_ratr_trap_action trap_action;
|
||||
char ratr_pl[MLXSW_REG_RATR_LEN];
|
||||
int err;
|
||||
|
||||
if (mlxsw_sp->router->adj_discard_index_valid)
|
||||
return 0;
|
||||
|
||||
err = mlxsw_sp_kvdl_alloc(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 1,
|
||||
&mlxsw_sp->router->adj_discard_index);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
trap_action = MLXSW_REG_RATR_TRAP_ACTION_TRAP;
|
||||
mlxsw_reg_ratr_pack(ratr_pl, MLXSW_REG_RATR_OP_WRITE_WRITE_ENTRY, true,
|
||||
MLXSW_REG_RATR_TYPE_ETHERNET,
|
||||
mlxsw_sp->router->adj_discard_index,
|
||||
mlxsw_sp->router->lb_rif_index);
|
||||
mlxsw_reg_ratr_trap_action_set(ratr_pl, trap_action);
|
||||
mlxsw_reg_ratr_trap_id_set(ratr_pl, MLXSW_TRAP_ID_RTR_EGRESS0);
|
||||
err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ratr), ratr_pl);
|
||||
if (err)
|
||||
goto err_ratr_write;
|
||||
|
||||
mlxsw_sp->router->adj_discard_index_valid = true;
|
||||
|
||||
return 0;
|
||||
|
||||
err_ratr_write:
|
||||
mlxsw_sp_kvdl_free(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 1,
|
||||
mlxsw_sp->router->adj_discard_index);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_fib_entry_op_remote(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_fib_entry_op_ctx *op_ctx,
|
||||
struct mlxsw_sp_fib_entry *fib_entry,
|
||||
@ -5844,7 +5809,6 @@ static int mlxsw_sp_fib_entry_op_remote(struct mlxsw_sp *mlxsw_sp,
|
||||
u16 trap_id = 0;
|
||||
u32 adjacency_index = 0;
|
||||
u16 ecmp_size = 0;
|
||||
int err;
|
||||
|
||||
/* In case the nexthop group adjacency index is valid, use it
|
||||
* with provided ECMP size. Otherwise, setup trap and pass
|
||||
@ -5855,11 +5819,8 @@ static int mlxsw_sp_fib_entry_op_remote(struct mlxsw_sp *mlxsw_sp,
|
||||
adjacency_index = nhgi->adj_index;
|
||||
ecmp_size = nhgi->ecmp_size;
|
||||
} else if (!nhgi->adj_index_valid && nhgi->count && nhgi->nh_rif) {
|
||||
err = mlxsw_sp_adj_discard_write(mlxsw_sp);
|
||||
if (err)
|
||||
return err;
|
||||
trap_action = MLXSW_REG_RALUE_TRAP_ACTION_NOP;
|
||||
adjacency_index = mlxsw_sp->router->adj_discard_index;
|
||||
adjacency_index = mlxsw_sp->router->adj_trap_index;
|
||||
ecmp_size = 1;
|
||||
} else {
|
||||
trap_action = MLXSW_REG_RALUE_TRAP_ACTION_TRAP;
|
||||
@ -7418,16 +7379,6 @@ static void mlxsw_sp_router_fib_flush(struct mlxsw_sp *mlxsw_sp)
|
||||
continue;
|
||||
mlxsw_sp_vr_fib_flush(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV6);
|
||||
}
|
||||
|
||||
/* After flushing all the routes, it is not possible anyone is still
|
||||
* using the adjacency index that is discarding packets, so free it in
|
||||
* case it was allocated.
|
||||
*/
|
||||
if (!mlxsw_sp->router->adj_discard_index_valid)
|
||||
return;
|
||||
mlxsw_sp_kvdl_free(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 1,
|
||||
mlxsw_sp->router->adj_discard_index);
|
||||
mlxsw_sp->router->adj_discard_index_valid = false;
|
||||
}
|
||||
|
||||
struct mlxsw_sp_fib6_event {
|
||||
|
@ -65,8 +65,6 @@ struct mlxsw_sp_router {
|
||||
struct notifier_block inet6addr_nb;
|
||||
const struct mlxsw_sp_rif_ops **rif_ops_arr;
|
||||
const struct mlxsw_sp_ipip_ops **ipip_ops_arr;
|
||||
u32 adj_discard_index;
|
||||
bool adj_discard_index_valid;
|
||||
struct mlxsw_sp_router_nve_decap nve_decap_config;
|
||||
struct mutex lock; /* Protects shared router resources */
|
||||
struct work_struct fib_event_work;
|
||||
|
Loading…
x
Reference in New Issue
Block a user