From: Or Gerlitz <ogerl...@mellanox.com>

The current check relies on function BDF addresses and can get
us wrong e.g when two VFs are assigned into a VM and the PCI
v-address is set by the hypervisor.

Fixes: 5c65c564c962 ('net/mlx5e: Support offloading TC NIC hairpin flows')
Signed-off-by: Or Gerlitz <ogerl...@mellanox.com>
Reported-by: Alaa Hleihel <a...@mellanox.com>
Tested-by: Alaa Hleihel <a...@mellanox.com>
Signed-off-by: Saeed Mahameed <sae...@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c 
b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 3a2c4e548226..dfbcda0d0e08 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -1970,15 +1970,15 @@ static bool actions_match_supported(struct mlx5e_priv 
*priv,
 static bool same_hw_devs(struct mlx5e_priv *priv, struct mlx5e_priv *peer_priv)
 {
        struct mlx5_core_dev *fmdev, *pmdev;
-       u16 func_id, peer_id;
+       u64 fsystem_guid, psystem_guid;
 
        fmdev = priv->mdev;
        pmdev = peer_priv->mdev;
 
-       func_id = (u16)((fmdev->pdev->bus->number << 8) | 
PCI_SLOT(fmdev->pdev->devfn));
-       peer_id = (u16)((pmdev->pdev->bus->number << 8) | 
PCI_SLOT(pmdev->pdev->devfn));
+       mlx5_query_nic_vport_system_image_guid(fmdev, &fsystem_guid);
+       mlx5_query_nic_vport_system_image_guid(pmdev, &psystem_guid);
 
-       return (func_id == peer_id);
+       return (fsystem_guid == psystem_guid);
 }
 
 static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
-- 
2.17.0

Reply via email to