* [patch net-next v2 1/2] mlxsw: spectrum: pass local_port to mlxsw_sp_port_fdb_uc_op @ 2016-01-07 10:50 Jiri Pirko 2016-01-07 10:50 ` [patch net-next v2 2/2] mlxsw: spectrum: remove FDB entry in case we get unknown object notification Jiri Pirko 2016-01-10 2:07 ` [patch net-next v2 1/2] mlxsw: spectrum: pass local_port to mlxsw_sp_port_fdb_uc_op David Miller 0 siblings, 2 replies; 4+ messages in thread From: Jiri Pirko @ 2016-01-07 10:50 UTC (permalink / raw) To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz From: Jiri Pirko <jiri@mellanox.com> Do not pass struct mlxsw_sp_port to mlxsw_sp_port_fdb_uc_op and rather just pass local_port. This is needed in case this is called from SFN process function and mlxsw_sp_port is not existent for particular local_port. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> --- v1->v2: - no change --- drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index 614ef57..5150e9e 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c @@ -594,11 +594,10 @@ static enum mlxsw_reg_sfd_op mlxsw_sp_sfd_op(bool adding) MLXSW_REG_SFD_OP_WRITE_REMOVE; } -static int mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp_port *mlxsw_sp_port, +static int mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port, const char *mac, u16 fid, bool adding, bool dynamic) { - struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; char *sfd_pl; int err; @@ -609,7 +608,7 @@ static int mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp_port *mlxsw_sp_port, mlxsw_reg_sfd_pack(sfd_pl, mlxsw_sp_sfd_op(adding), 0); mlxsw_reg_sfd_uc_pack(sfd_pl, 0, mlxsw_sp_sfd_rec_policy(dynamic), mac, fid, MLXSW_REG_SFD_REC_ACTION_NOP, - mlxsw_sp_port->local_port); + local_port); err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfd), sfd_pl); kfree(sfd_pl); @@ -659,7 +658,8 @@ mlxsw_sp_port_fdb_static_add(struct mlxsw_sp_port *mlxsw_sp_port, fid = mlxsw_sp_port->pvid; if (!mlxsw_sp_port->lagged) - return mlxsw_sp_port_fdb_uc_op(mlxsw_sp_port, + return mlxsw_sp_port_fdb_uc_op(mlxsw_sp_port->mlxsw_sp, + mlxsw_sp_port->local_port, fdb->addr, fid, true, false); else return mlxsw_sp_port_fdb_uc_lag_op(mlxsw_sp_port->mlxsw_sp, @@ -798,7 +798,8 @@ mlxsw_sp_port_fdb_static_del(struct mlxsw_sp_port *mlxsw_sp_port, } if (!mlxsw_sp_port->lagged) - return mlxsw_sp_port_fdb_uc_op(mlxsw_sp_port, + return mlxsw_sp_port_fdb_uc_op(mlxsw_sp_port->mlxsw_sp, + mlxsw_sp_port->local_port, fdb->addr, fid, false, false); else @@ -1056,7 +1057,7 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp, vid = fid; } - err = mlxsw_sp_port_fdb_uc_op(mlxsw_sp_port, mac, fid, + err = mlxsw_sp_port_fdb_uc_op(mlxsw_sp, local_port, mac, fid, adding && mlxsw_sp_port->learning, true); if (err) { if (net_ratelimit()) -- 1.9.3 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [patch net-next v2 2/2] mlxsw: spectrum: remove FDB entry in case we get unknown object notification 2016-01-07 10:50 [patch net-next v2 1/2] mlxsw: spectrum: pass local_port to mlxsw_sp_port_fdb_uc_op Jiri Pirko @ 2016-01-07 10:50 ` Jiri Pirko 2016-01-10 2:07 ` David Miller 2016-01-10 2:07 ` [patch net-next v2 1/2] mlxsw: spectrum: pass local_port to mlxsw_sp_port_fdb_uc_op David Miller 1 sibling, 1 reply; 4+ messages in thread From: Jiri Pirko @ 2016-01-07 10:50 UTC (permalink / raw) To: netdev; +Cc: davem, idosch, eladr, yotamg, ogerlitz From: Jiri Pirko <jiri@mellanox.com> It may happen that we get notification for FDB entry for object (port, lag, vport), which does not exist. Currently we ignore that, which only causes this being re-sent in next notification. The entry will never disappear. So get rid of it by simply removing it using SFD register. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> --- v1->v2: - fixing impossible mlxsw_sp_port null dereference --- .../ethernet/mellanox/mlxsw/spectrum_switchdev.c | 38 +++++++++++++++++----- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index 5150e9e..d64559e 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c @@ -1030,13 +1030,14 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp, char mac[ETH_ALEN]; u8 local_port; u16 vid, fid; + bool do_notification = true; int err; mlxsw_reg_sfn_mac_unpack(sfn_pl, rec_index, mac, &fid, &local_port); mlxsw_sp_port = mlxsw_sp->ports[local_port]; if (!mlxsw_sp_port) { dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Incorrect local port in FDB notification\n"); - return; + goto just_remove; } if (mlxsw_sp_fid_is_vfid(fid)) { @@ -1047,9 +1048,8 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp, vfid); if (!mlxsw_sp_vport) { netdev_err(mlxsw_sp_port->dev, "Failed to find a matching vPort following FDB notification\n"); - return; + goto just_remove; } - vid = mlxsw_sp_vport_vid_get(mlxsw_sp_vport); /* Override the physical port with the vPort. */ mlxsw_sp_port = mlxsw_sp_vport; @@ -1057,17 +1057,28 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp, vid = fid; } + adding = adding && mlxsw_sp_port->learning; + +do_fdb_op: err = mlxsw_sp_port_fdb_uc_op(mlxsw_sp, local_port, mac, fid, - adding && mlxsw_sp_port->learning, true); + adding, true); if (err) { if (net_ratelimit()) netdev_err(mlxsw_sp_port->dev, "Failed to set FDB entry\n"); return; } + if (!do_notification) + return; mlxsw_sp_fdb_call_notifiers(mlxsw_sp_port->learning, mlxsw_sp_port->learning_sync, adding, mac, vid, mlxsw_sp_port->dev); + return; + +just_remove: + adding = false; + do_notification = false; + goto do_fdb_op; } static void mlxsw_sp_fdb_notify_mac_lag_process(struct mlxsw_sp *mlxsw_sp, @@ -1079,13 +1090,14 @@ static void mlxsw_sp_fdb_notify_mac_lag_process(struct mlxsw_sp *mlxsw_sp, u16 lag_vid = 0; u16 lag_id; u16 vid, fid; + bool do_notification = true; int err; mlxsw_reg_sfn_mac_lag_unpack(sfn_pl, rec_index, mac, &fid, &lag_id); mlxsw_sp_port = mlxsw_sp_lag_rep_port(mlxsw_sp, lag_id); if (!mlxsw_sp_port) { dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Cannot find port representor for LAG\n"); - return; + goto just_remove; } if (mlxsw_sp_fid_is_vfid(fid)) { @@ -1096,7 +1108,7 @@ static void mlxsw_sp_fdb_notify_mac_lag_process(struct mlxsw_sp *mlxsw_sp, vfid); if (!mlxsw_sp_vport) { netdev_err(mlxsw_sp_port->dev, "Failed to find a matching vPort following FDB notification\n"); - return; + goto just_remove; } vid = mlxsw_sp_vport_vid_get(mlxsw_sp_vport); @@ -1107,19 +1119,29 @@ static void mlxsw_sp_fdb_notify_mac_lag_process(struct mlxsw_sp *mlxsw_sp, vid = fid; } + adding = adding && mlxsw_sp_port->learning; + +do_fdb_op: err = mlxsw_sp_port_fdb_uc_lag_op(mlxsw_sp, lag_id, mac, fid, lag_vid, - adding && mlxsw_sp_port->learning, - true); + adding, true); if (err) { if (net_ratelimit()) netdev_err(mlxsw_sp_port->dev, "Failed to set FDB entry\n"); return; } + if (!do_notification) + return; mlxsw_sp_fdb_call_notifiers(mlxsw_sp_port->learning, mlxsw_sp_port->learning_sync, adding, mac, vid, mlxsw_sp_lag_get(mlxsw_sp, lag_id)->dev); + return; + +just_remove: + adding = false; + do_notification = false; + goto do_fdb_op; } static void mlxsw_sp_fdb_notify_rec_process(struct mlxsw_sp *mlxsw_sp, -- 1.9.3 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [patch net-next v2 2/2] mlxsw: spectrum: remove FDB entry in case we get unknown object notification 2016-01-07 10:50 ` [patch net-next v2 2/2] mlxsw: spectrum: remove FDB entry in case we get unknown object notification Jiri Pirko @ 2016-01-10 2:07 ` David Miller 0 siblings, 0 replies; 4+ messages in thread From: David Miller @ 2016-01-10 2:07 UTC (permalink / raw) To: jiri; +Cc: netdev, idosch, eladr, yotamg, ogerlitz From: Jiri Pirko <jiri@resnulli.us> Date: Thu, 7 Jan 2016 11:50:30 +0100 > From: Jiri Pirko <jiri@mellanox.com> > > It may happen that we get notification for FDB entry for object (port, > lag, vport), which does not exist. Currently we ignore that, which only > causes this being re-sent in next notification. The entry will never > disappear. So get rid of it by simply removing it using SFD register. > > Signed-off-by: Jiri Pirko <jiri@mellanox.com> > Reviewed-by: Ido Schimmel <idosch@mellanox.com> > --- > v1->v2: > - fixing impossible mlxsw_sp_port null dereference Applied. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch net-next v2 1/2] mlxsw: spectrum: pass local_port to mlxsw_sp_port_fdb_uc_op 2016-01-07 10:50 [patch net-next v2 1/2] mlxsw: spectrum: pass local_port to mlxsw_sp_port_fdb_uc_op Jiri Pirko 2016-01-07 10:50 ` [patch net-next v2 2/2] mlxsw: spectrum: remove FDB entry in case we get unknown object notification Jiri Pirko @ 2016-01-10 2:07 ` David Miller 1 sibling, 0 replies; 4+ messages in thread From: David Miller @ 2016-01-10 2:07 UTC (permalink / raw) To: jiri; +Cc: netdev, idosch, eladr, yotamg, ogerlitz From: Jiri Pirko <jiri@resnulli.us> Date: Thu, 7 Jan 2016 11:50:29 +0100 > From: Jiri Pirko <jiri@mellanox.com> > > Do not pass struct mlxsw_sp_port to mlxsw_sp_port_fdb_uc_op and rather > just pass local_port. This is needed in case this is called from SFN > process function and mlxsw_sp_port is not existent for particular > local_port. > > Signed-off-by: Jiri Pirko <jiri@mellanox.com> > Reviewed-by: Ido Schimmel <idosch@mellanox.com> > --- > v1->v2: > - no change Applied. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-01-10 2:07 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-01-07 10:50 [patch net-next v2 1/2] mlxsw: spectrum: pass local_port to mlxsw_sp_port_fdb_uc_op Jiri Pirko 2016-01-07 10:50 ` [patch net-next v2 2/2] mlxsw: spectrum: remove FDB entry in case we get unknown object notification Jiri Pirko 2016-01-10 2:07 ` David Miller 2016-01-10 2:07 ` [patch net-next v2 1/2] mlxsw: spectrum: pass local_port to mlxsw_sp_port_fdb_uc_op David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).