All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism
@ 2019-03-31  6:49 Ido Schimmel
  2019-03-31  6:49 ` [PATCH net-next 1/4] mlxsw: spectrum_acl: Remove redundant failed_rollback from migrate_start() Ido Schimmel
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Ido Schimmel @ 2019-03-31  6:49 UTC (permalink / raw)
  To: netdev; +Cc: davem, Jiri Pirko, mlxsw, Ido Schimmel

Jiri says:

Currently if vregion rehash fails, it rolls back to the original ERP
set. However, in case of unlikely rollback fail, the vregion is in a
zombie state and never gets rehashed again. With the recent changes, it
is possible to try to continue the rollback. Do it from the last failed
ventry.

Jiri Pirko (4):
  mlxsw: spectrum_acl: Remove redundant failed_rollback from
    migrate_start()
  mlxsw: spectrum_acl: Move rehash_dis trace call and err msg to
    vregion_migrate()
  mlxsw: spectrum_acl: Remove failed_rollback dead end
  mlxsw: spectrum_acl: Rename rehash_dis trace

 .../mellanox/mlxsw/spectrum_acl_tcam.c        | 36 +++++++++----------
 include/trace/events/mlxsw.h                  |  2 +-
 2 files changed, 17 insertions(+), 21 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net-next 1/4] mlxsw: spectrum_acl: Remove redundant failed_rollback from migrate_start()
  2019-03-31  6:49 [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism Ido Schimmel
@ 2019-03-31  6:49 ` Ido Schimmel
  2019-03-31  6:49 ` [PATCH net-next 2/4] mlxsw: spectrum_acl: Move rehash_dis trace call and err msg to vregion_migrate() Ido Schimmel
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ido Schimmel @ 2019-03-31  6:49 UTC (permalink / raw)
  To: netdev; +Cc: davem, Jiri Pirko, mlxsw, Ido Schimmel

From: Jiri Pirko <jiri@mellanox.com>

The flag is set by the caller mlxsw_sp_acl_tcam_vregion_migrate() anyway,
so don't set it here.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
index 8811f6513e36..a26854f97f0f 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
@@ -1256,11 +1256,8 @@ mlxsw_sp_acl_tcam_vchunk_migrate_start(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_acl_tcam_chunk *new_chunk;
 
 	new_chunk = mlxsw_sp_acl_tcam_chunk_create(mlxsw_sp, vchunk, region);
-	if (IS_ERR(new_chunk)) {
-		if (ctx->this_is_rollback)
-			vchunk->vregion->failed_rollback = true;
+	if (IS_ERR(new_chunk))
 		return PTR_ERR(new_chunk);
-	}
 	vchunk->chunk2 = vchunk->chunk;
 	vchunk->chunk = new_chunk;
 	ctx->current_vchunk = vchunk;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 2/4] mlxsw: spectrum_acl: Move rehash_dis trace call and err msg to vregion_migrate()
  2019-03-31  6:49 [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism Ido Schimmel
  2019-03-31  6:49 ` [PATCH net-next 1/4] mlxsw: spectrum_acl: Remove redundant failed_rollback from migrate_start() Ido Schimmel
@ 2019-03-31  6:49 ` Ido Schimmel
  2019-03-31  6:49 ` [PATCH net-next 3/4] mlxsw: spectrum_acl: Remove failed_rollback dead end Ido Schimmel
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ido Schimmel @ 2019-03-31  6:49 UTC (permalink / raw)
  To: netdev; +Cc: davem, Jiri Pirko, mlxsw, Ido Schimmel

From: Jiri Pirko <jiri@mellanox.com>

Move the call of rehash_dis trace and the error message to
vregion_migrate() next to the failed_rollback flag set.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 .../net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c   | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
index a26854f97f0f..a2af385bcd63 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
@@ -1394,8 +1394,12 @@ mlxsw_sp_acl_tcam_vregion_migrate(struct mlxsw_sp *mlxsw_sp,
 		ctx->this_is_rollback = true;
 		err2 = mlxsw_sp_acl_tcam_vchunk_migrate_all(mlxsw_sp, vregion,
 							    ctx, credits);
-		if (err2)
+		if (err2) {
 			vregion->failed_rollback = true;
+			trace_mlxsw_sp_acl_tcam_vregion_rehash_dis(mlxsw_sp,
+								   vregion);
+			dev_err(mlxsw_sp->bus_info->dev, "Failed to rollback during vregion migration fail\n");
+		}
 	}
 	mutex_unlock(&vregion->lock);
 	trace_mlxsw_sp_acl_tcam_vregion_migrate_end(mlxsw_sp, vregion);
@@ -1503,11 +1507,6 @@ mlxsw_sp_acl_tcam_vregion_rehash(struct mlxsw_sp *mlxsw_sp,
 						ctx, credits);
 	if (err) {
 		dev_err(mlxsw_sp->bus_info->dev, "Failed to migrate vregion\n");
-		if (vregion->failed_rollback) {
-			trace_mlxsw_sp_acl_tcam_vregion_rehash_dis(mlxsw_sp,
-								   vregion);
-			dev_err(mlxsw_sp->bus_info->dev, "Failed to rollback during vregion migration fail\n");
-		}
 	}
 
 	if (*credits >= 0)
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 3/4] mlxsw: spectrum_acl: Remove failed_rollback dead end
  2019-03-31  6:49 [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism Ido Schimmel
  2019-03-31  6:49 ` [PATCH net-next 1/4] mlxsw: spectrum_acl: Remove redundant failed_rollback from migrate_start() Ido Schimmel
  2019-03-31  6:49 ` [PATCH net-next 2/4] mlxsw: spectrum_acl: Move rehash_dis trace call and err msg to vregion_migrate() Ido Schimmel
@ 2019-03-31  6:49 ` Ido Schimmel
  2019-03-31  6:49 ` [PATCH net-next 4/4] mlxsw: spectrum_acl: Rename rehash_dis trace Ido Schimmel
  2019-03-31 18:01 ` [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: Ido Schimmel @ 2019-03-31  6:49 UTC (permalink / raw)
  To: netdev; +Cc: davem, Jiri Pirko, mlxsw, Ido Schimmel

From: Jiri Pirko <jiri@mellanox.com>

Currently if a rollback ends with error, the vregion is in a zombie
state until end of the existence. Instead of that, rather try to
continue where rollback ended later on (after rehash interval).

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 .../mellanox/mlxsw/spectrum_acl_tcam.c        | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
index a2af385bcd63..2f0b61b87c99 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
@@ -216,7 +216,6 @@ struct mlxsw_sp_acl_tcam_vregion {
 		struct mlxsw_sp_acl_tcam_rehash_ctx ctx;
 	} rehash;
 	struct mlxsw_sp *mlxsw_sp;
-	bool failed_rollback; /* Indicates failed rollback during migration */
 	unsigned int ref_count;
 };
 
@@ -1315,8 +1314,13 @@ mlxsw_sp_acl_tcam_vchunk_migrate_one(struct mlxsw_sp *mlxsw_sp,
 		err = mlxsw_sp_acl_tcam_ventry_migrate(mlxsw_sp, ventry,
 						       vchunk->chunk, credits);
 		if (err) {
-			if (ctx->this_is_rollback)
+			if (ctx->this_is_rollback) {
+				/* Save the ventry which we ended with and try
+				 * to continue later on.
+				 */
+				ctx->start_ventry = ventry;
 				return err;
+			}
 			/* Swap the chunk and chunk2 pointers so the follow-up
 			 * rollback call will see the original chunk pointer
 			 * in vchunk->chunk.
@@ -1395,10 +1399,10 @@ mlxsw_sp_acl_tcam_vregion_migrate(struct mlxsw_sp *mlxsw_sp,
 		err2 = mlxsw_sp_acl_tcam_vchunk_migrate_all(mlxsw_sp, vregion,
 							    ctx, credits);
 		if (err2) {
-			vregion->failed_rollback = true;
 			trace_mlxsw_sp_acl_tcam_vregion_rehash_dis(mlxsw_sp,
 								   vregion);
 			dev_err(mlxsw_sp->bus_info->dev, "Failed to rollback during vregion migration fail\n");
+			/* Let the rollback to be continued later on. */
 		}
 	}
 	mutex_unlock(&vregion->lock);
@@ -1424,8 +1428,6 @@ mlxsw_sp_acl_tcam_vregion_rehash_start(struct mlxsw_sp *mlxsw_sp,
 	int err;
 
 	trace_mlxsw_sp_acl_tcam_vregion_rehash(mlxsw_sp, vregion);
-	if (vregion->failed_rollback)
-		return -EBUSY;
 
 	hints_priv = ops->region_rehash_hints_get(vregion->region->priv);
 	if (IS_ERR(hints_priv))
@@ -1472,11 +1474,9 @@ mlxsw_sp_acl_tcam_vregion_rehash_end(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_acl_tcam_region *unused_region = vregion->region2;
 	const struct mlxsw_sp_acl_tcam_ops *ops = mlxsw_sp->acl_tcam_ops;
 
-	if (!vregion->failed_rollback) {
-		vregion->region2 = NULL;
-		mlxsw_sp_acl_tcam_group_region_detach(mlxsw_sp, unused_region);
-		mlxsw_sp_acl_tcam_region_destroy(mlxsw_sp, unused_region);
-	}
+	vregion->region2 = NULL;
+	mlxsw_sp_acl_tcam_group_region_detach(mlxsw_sp, unused_region);
+	mlxsw_sp_acl_tcam_region_destroy(mlxsw_sp, unused_region);
 	ops->region_rehash_hints_put(ctx->hints_priv);
 	ctx->hints_priv = NULL;
 }
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 4/4] mlxsw: spectrum_acl: Rename rehash_dis trace
  2019-03-31  6:49 [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism Ido Schimmel
                   ` (2 preceding siblings ...)
  2019-03-31  6:49 ` [PATCH net-next 3/4] mlxsw: spectrum_acl: Remove failed_rollback dead end Ido Schimmel
@ 2019-03-31  6:49 ` Ido Schimmel
  2019-03-31 18:01 ` [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: Ido Schimmel @ 2019-03-31  6:49 UTC (permalink / raw)
  To: netdev; +Cc: davem, Jiri Pirko, mlxsw, Ido Schimmel

From: Jiri Pirko <jiri@mellanox.com>

The name of the trace is no longer correct, since there is no disable of
rehash done. So name it "rehash_rollback_failed".

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c | 4 ++--
 include/trace/events/mlxsw.h                            | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
index 2f0b61b87c99..e993159e8e4c 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
@@ -1399,8 +1399,8 @@ mlxsw_sp_acl_tcam_vregion_migrate(struct mlxsw_sp *mlxsw_sp,
 		err2 = mlxsw_sp_acl_tcam_vchunk_migrate_all(mlxsw_sp, vregion,
 							    ctx, credits);
 		if (err2) {
-			trace_mlxsw_sp_acl_tcam_vregion_rehash_dis(mlxsw_sp,
-								   vregion);
+			trace_mlxsw_sp_acl_tcam_vregion_rehash_rollback_failed(mlxsw_sp,
+									       vregion);
 			dev_err(mlxsw_sp->bus_info->dev, "Failed to rollback during vregion migration fail\n");
 			/* Let the rollback to be continued later on. */
 		}
diff --git a/include/trace/events/mlxsw.h b/include/trace/events/mlxsw.h
index 6a4cfaef33a2..19a25ed323a5 100644
--- a/include/trace/events/mlxsw.h
+++ b/include/trace/events/mlxsw.h
@@ -93,7 +93,7 @@ TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_migrate_end,
 		  __entry->mlxsw_sp, __entry->vregion)
 );
 
-TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_rehash_dis,
+TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_rehash_rollback_failed,
 	TP_PROTO(const struct mlxsw_sp *mlxsw_sp,
 		 const struct mlxsw_sp_acl_tcam_vregion *vregion),
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism
  2019-03-31  6:49 [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism Ido Schimmel
                   ` (3 preceding siblings ...)
  2019-03-31  6:49 ` [PATCH net-next 4/4] mlxsw: spectrum_acl: Rename rehash_dis trace Ido Schimmel
@ 2019-03-31 18:01 ` David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2019-03-31 18:01 UTC (permalink / raw)
  To: idosch; +Cc: netdev, jiri, mlxsw

From: Ido Schimmel <idosch@mellanox.com>
Date: Sun, 31 Mar 2019 06:49:37 +0000

> Jiri says:
> 
> Currently if vregion rehash fails, it rolls back to the original ERP
> set. However, in case of unlikely rollback fail, the vregion is in a
> zombie state and never gets rehashed again. With the recent changes, it
> is possible to try to continue the rollback. Do it from the last failed
> ventry.

Series applied.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-03-31 18:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-31  6:49 [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism Ido Schimmel
2019-03-31  6:49 ` [PATCH net-next 1/4] mlxsw: spectrum_acl: Remove redundant failed_rollback from migrate_start() Ido Schimmel
2019-03-31  6:49 ` [PATCH net-next 2/4] mlxsw: spectrum_acl: Move rehash_dis trace call and err msg to vregion_migrate() Ido Schimmel
2019-03-31  6:49 ` [PATCH net-next 3/4] mlxsw: spectrum_acl: Remove failed_rollback dead end Ido Schimmel
2019-03-31  6:49 ` [PATCH net-next 4/4] mlxsw: spectrum_acl: Rename rehash_dis trace Ido Schimmel
2019-03-31 18:01 ` [PATCH net-next 0/4] mlxsw: spectrum_acl: Get rid of failed_rollback mechanism David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.