mlxsw: spectrum: Convert callers to use new mirroring API
authorIdo Schimmel <idosch@mellanox.com>
Thu, 20 Feb 2020 07:07:51 +0000 (09:07 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Feb 2020 18:04:34 +0000 (10:04 -0800)
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>
drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c

index 24fd42d79607f74929c7e8077ff9630691f9245a..f7079f9e8d19beb01ece1b42fed2f149c8602291 100644 (file)
@@ -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);
+}
index 6213fa43aa7b8921032d874ee4ea835870e69c2e..d70865f29105c7c01699d79f7a3842987f52739f 100644 (file)
@@ -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;
 }