From: Petr Machata <pe...@mellanox.com>

The check for whether a mirror port (which is a mlxsw front panel port)
belongs to the same mlxsw instance as the mirrored port, is currently
only done in spectrum_acl, even though it's applicable for the matchall
case as well. Thus move it to mlxsw_sp_span_entry_create().

Signed-off-by: Petr Machata <pe...@mellanox.com>
Reviewed-by: Ido Schimmel <ido...@mellanox.com>
Signed-off-by: Jiri Pirko <j...@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c  | 4 ----
 drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c | 6 +++++-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c 
b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
index 9d7197b9abb1..21ed27ae51e3 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
@@ -572,7 +572,6 @@ int mlxsw_sp_acl_rulei_act_mirror(struct mlxsw_sp *mlxsw_sp,
                                  struct net_device *out_dev)
 {
        struct mlxsw_sp_acl_block_binding *binding;
-       struct mlxsw_sp_port *out_port;
        struct mlxsw_sp_port *in_port;
 
        if (!list_is_singular(&block->binding_list))
@@ -581,9 +580,6 @@ int mlxsw_sp_acl_rulei_act_mirror(struct mlxsw_sp *mlxsw_sp,
        binding = list_first_entry(&block->binding_list,
                                   struct mlxsw_sp_acl_block_binding, list);
        in_port = binding->mlxsw_sp_port;
-       out_port = netdev_priv(out_dev);
-       if (out_port->mlxsw_sp != mlxsw_sp)
-               return -EINVAL;
 
        return mlxsw_afa_block_append_mirror(rulei->act_block,
                                             in_port->local_port,
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c 
b/drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c
index 71102f156a97..57df57c7a405 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c
@@ -164,7 +164,11 @@ mlxsw_sp_span_entry_configure(struct mlxsw_sp *mlxsw_sp,
                              struct mlxsw_sp_span_parms sparms)
 {
        if (sparms.dest_port) {
-               if (span_entry->ops->configure(span_entry, sparms)) {
+               if (sparms.dest_port->mlxsw_sp != mlxsw_sp) {
+                       netdev_err(span_entry->to_dev, "Cannot mirror to %s, 
which belongs to a different mlxsw instance",
+                                  sparms.dest_port->dev->name);
+                       sparms.dest_port = NULL;
+               } else if (span_entry->ops->configure(span_entry, sparms)) {
                        netdev_err(span_entry->to_dev, "Failed to offload 
mirror to %s",
                                   sparms.dest_port->dev->name);
                        sparms.dest_port = NULL;
-- 
2.14.3

Reply via email to