mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-25 16:45:25 +07:00
mlxsw: spectrum: Convert callers to use new mirroring API
Previous patch added a work item in the mirroring code that will take care of updating the active mirroring agents in response to different events. Change the mirroring agents update function - mlxsw_sp_span_respin() - to invoke this work item when called. Therefore there is no need for callers to schedule a work item themselves. 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
a8e7e6e7c3
commit
622110f24b
@ -1002,30 +1002,6 @@ void mlxsw_sp_span_mirror_del(struct mlxsw_sp_port *from, int span_id,
|
||||
mlxsw_sp_span_inspected_port_del(from, span_entry, type, bind);
|
||||
}
|
||||
|
||||
void mlxsw_sp_span_respin(struct mlxsw_sp *mlxsw_sp)
|
||||
{
|
||||
int i;
|
||||
int err;
|
||||
|
||||
ASSERT_RTNL();
|
||||
for (i = 0; i < mlxsw_sp->span->entries_count; i++) {
|
||||
struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i];
|
||||
struct mlxsw_sp_span_parms sparms = {NULL};
|
||||
|
||||
if (!curr->ref_count)
|
||||
continue;
|
||||
|
||||
err = curr->ops->parms(curr->to_dev, &sparms);
|
||||
if (err)
|
||||
continue;
|
||||
|
||||
if (memcmp(&sparms, &curr->parms, sizeof(sparms))) {
|
||||
mlxsw_sp_span_entry_deconfigure(curr);
|
||||
mlxsw_sp_span_entry_configure(mlxsw_sp, curr, sparms);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mlxsw_sp_span_respin_work(struct work_struct *work)
|
||||
{
|
||||
struct mlxsw_sp_span *span;
|
||||
@ -1054,3 +1030,8 @@ static void mlxsw_sp_span_respin_work(struct work_struct *work)
|
||||
}
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
void mlxsw_sp_span_respin(struct mlxsw_sp *mlxsw_sp)
|
||||
{
|
||||
mlxsw_core_schedule_work(&mlxsw_sp->span->work);
|
||||
}
|
||||
|
@ -1778,36 +1778,6 @@ mlxsw_sp_port_mrouter_update_mdb(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
}
|
||||
}
|
||||
|
||||
struct mlxsw_sp_span_respin_work {
|
||||
struct work_struct work;
|
||||
struct mlxsw_sp *mlxsw_sp;
|
||||
};
|
||||
|
||||
static void mlxsw_sp_span_respin_work(struct work_struct *work)
|
||||
{
|
||||
struct mlxsw_sp_span_respin_work *respin_work =
|
||||
container_of(work, struct mlxsw_sp_span_respin_work, work);
|
||||
|
||||
rtnl_lock();
|
||||
mlxsw_sp_span_respin(respin_work->mlxsw_sp);
|
||||
rtnl_unlock();
|
||||
kfree(respin_work);
|
||||
}
|
||||
|
||||
static void mlxsw_sp_span_respin_schedule(struct mlxsw_sp *mlxsw_sp)
|
||||
{
|
||||
struct mlxsw_sp_span_respin_work *respin_work;
|
||||
|
||||
respin_work = kzalloc(sizeof(*respin_work), GFP_ATOMIC);
|
||||
if (!respin_work)
|
||||
return;
|
||||
|
||||
INIT_WORK(&respin_work->work, mlxsw_sp_span_respin_work);
|
||||
respin_work->mlxsw_sp = mlxsw_sp;
|
||||
|
||||
mlxsw_core_schedule_work(&respin_work->work);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_port_obj_add(struct net_device *dev,
|
||||
const struct switchdev_obj *obj,
|
||||
struct switchdev_trans *trans,
|
||||
@ -1829,7 +1799,7 @@ static int mlxsw_sp_port_obj_add(struct net_device *dev,
|
||||
* call for later, so that the respin logic sees the
|
||||
* updated bridge state.
|
||||
*/
|
||||
mlxsw_sp_span_respin_schedule(mlxsw_sp_port->mlxsw_sp);
|
||||
mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp);
|
||||
}
|
||||
break;
|
||||
case SWITCHDEV_OBJ_ID_PORT_MDB:
|
||||
@ -1982,7 +1952,7 @@ static int mlxsw_sp_port_obj_del(struct net_device *dev,
|
||||
break;
|
||||
}
|
||||
|
||||
mlxsw_sp_span_respin_schedule(mlxsw_sp_port->mlxsw_sp);
|
||||
mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user