Thomas Bogendoerfer 0b58cf
From: Roi Dayan <roid@nvidia.com>
Thomas Bogendoerfer 0b58cf
Date: Wed, 2 Nov 2022 23:55:46 -0700
Thomas Bogendoerfer 0b58cf
Subject: net/mlx5e: E-Switch, Fix comparing termination table instance
Thomas Bogendoerfer 0b58cf
Patch-mainline: v6.1-rc5
Thomas Bogendoerfer 0b58cf
Git-commit: f4f4096b410e8d31c3f07f39de3b17d144edd53d
Thomas Bogendoerfer 0b58cf
References: jsc#PED-1549
Thomas Bogendoerfer 0b58cf
Thomas Bogendoerfer 0b58cf
The pkt_reformat pointer being saved under flow_act and not
Thomas Bogendoerfer 0b58cf
dest attribute in the termination table instance.
Thomas Bogendoerfer 0b58cf
Fix the comparison pointers.
Thomas Bogendoerfer 0b58cf
Thomas Bogendoerfer 0b58cf
Also fix returning success if one pkt_reformat pointer is null
Thomas Bogendoerfer 0b58cf
and the other is not.
Thomas Bogendoerfer 0b58cf
Thomas Bogendoerfer 0b58cf
Fixes: 249ccc3c95bd ("net/mlx5e: Add support for offloading traffic from uplink to uplink")
Thomas Bogendoerfer 0b58cf
Signed-off-by: Roi Dayan <roid@nvidia.com>
Thomas Bogendoerfer 0b58cf
Reviewed-by: Chris Mi <cmi@nvidia.com>
Thomas Bogendoerfer 0b58cf
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Thomas Bogendoerfer 0b58cf
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Thomas Bogendoerfer 0b58cf
---
Thomas Bogendoerfer 0b58cf
 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c |   14 +++++-----
Thomas Bogendoerfer 0b58cf
 1 file changed, 8 insertions(+), 6 deletions(-)
Thomas Bogendoerfer 0b58cf
Thomas Bogendoerfer 0b58cf
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c
Thomas Bogendoerfer 0b58cf
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c
Thomas Bogendoerfer 0b58cf
@@ -30,9 +30,9 @@ mlx5_eswitch_termtbl_hash(struct mlx5_fl
Thomas Bogendoerfer 0b58cf
 		     sizeof(dest->vport.num), hash);
Thomas Bogendoerfer 0b58cf
 	hash = jhash((const void *)&dest->vport.vhca_id,
Thomas Bogendoerfer 0b58cf
 		     sizeof(dest->vport.num), hash);
Thomas Bogendoerfer 0b58cf
-	if (dest->vport.pkt_reformat)
Thomas Bogendoerfer 0b58cf
-		hash = jhash(dest->vport.pkt_reformat,
Thomas Bogendoerfer 0b58cf
-			     sizeof(*dest->vport.pkt_reformat),
Thomas Bogendoerfer 0b58cf
+	if (flow_act->pkt_reformat)
Thomas Bogendoerfer 0b58cf
+		hash = jhash(flow_act->pkt_reformat,
Thomas Bogendoerfer 0b58cf
+			     sizeof(*flow_act->pkt_reformat),
Thomas Bogendoerfer 0b58cf
 			     hash);
Thomas Bogendoerfer 0b58cf
 	return hash;
Thomas Bogendoerfer 0b58cf
 }
Thomas Bogendoerfer 0b58cf
@@ -53,9 +53,11 @@ mlx5_eswitch_termtbl_cmp(struct mlx5_flo
Thomas Bogendoerfer 0b58cf
 	if (ret)
Thomas Bogendoerfer 0b58cf
 		return ret;
Thomas Bogendoerfer 0b58cf
 
Thomas Bogendoerfer 0b58cf
-	return dest1->vport.pkt_reformat && dest2->vport.pkt_reformat ?
Thomas Bogendoerfer 0b58cf
-	       memcmp(dest1->vport.pkt_reformat, dest2->vport.pkt_reformat,
Thomas Bogendoerfer 0b58cf
-		      sizeof(*dest1->vport.pkt_reformat)) : 0;
Thomas Bogendoerfer 0b58cf
+	if (flow_act1->pkt_reformat && flow_act2->pkt_reformat)
Thomas Bogendoerfer 0b58cf
+		return memcmp(flow_act1->pkt_reformat, flow_act2->pkt_reformat,
Thomas Bogendoerfer 0b58cf
+			      sizeof(*flow_act1->pkt_reformat));
Thomas Bogendoerfer 0b58cf
+
Thomas Bogendoerfer 0b58cf
+	return !(flow_act1->pkt_reformat == flow_act2->pkt_reformat);
Thomas Bogendoerfer 0b58cf
 }
Thomas Bogendoerfer 0b58cf
 
Thomas Bogendoerfer 0b58cf
 static int