net/mlx5: Store devcom pointer inside IPsec RoCE
authorPatrisious Haddad <phaddad@nvidia.com>
Thu, 21 Sep 2023 12:10:29 +0000 (15:10 +0300)
committerLeon Romanovsky <leon@kernel.org>
Mon, 2 Oct 2023 08:21:07 +0000 (11:21 +0300)
Store the mlx5e priv devcom component within IPsec RoCE to enable
the IPsec RoCE code to access the other device's private information.
This includes retrieving the necessary device information and
the IPsec database, which helps determine if IPsec is configured or not.

Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Link: https://lore.kernel.org/r/5bb3160ceeb07523542302886da54c78eef0d2af.1695296682.git.leon@kernel.org
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
drivers/net/ethernet/mellanox/mlx5/core/lib/ipsec_fs_roce.c
drivers/net/ethernet/mellanox/mlx5/core/lib/ipsec_fs_roce.h

index 7d4ceb9b9c16fe1dcccdec2547f5ef4387a31f9e..49354bc036ade805117cd71530fb8ce7a9dc74d7 100644 (file)
@@ -870,7 +870,7 @@ void mlx5e_ipsec_init(struct mlx5e_priv *priv)
        }
 
        ipsec->is_uplink_rep = mlx5e_is_uplink_rep(priv);
-       ret = mlx5e_accel_ipsec_fs_init(ipsec);
+       ret = mlx5e_accel_ipsec_fs_init(ipsec, &priv->devcom);
        if (ret)
                goto err_fs_init;
 
index 06743156ffcaa5794aa73501d46931bcae8f5fa4..dc8e539dc20ea391418650b6f36ce5c22bc51080 100644 (file)
@@ -38,6 +38,7 @@
 #include <net/xfrm.h>
 #include <linux/idr.h>
 #include "lib/aso.h"
+#include "lib/devcom.h"
 
 #define MLX5E_IPSEC_SADB_RX_BITS 10
 #define MLX5E_IPSEC_ESN_SCOPE_MID 0x80000000L
@@ -304,7 +305,7 @@ void mlx5e_ipsec_cleanup(struct mlx5e_priv *priv);
 void mlx5e_ipsec_build_netdev(struct mlx5e_priv *priv);
 
 void mlx5e_accel_ipsec_fs_cleanup(struct mlx5e_ipsec *ipsec);
-int mlx5e_accel_ipsec_fs_init(struct mlx5e_ipsec *ipsec);
+int mlx5e_accel_ipsec_fs_init(struct mlx5e_ipsec *ipsec, struct mlx5_devcom_comp_dev **devcom);
 int mlx5e_accel_ipsec_fs_add_rule(struct mlx5e_ipsec_sa_entry *sa_entry);
 void mlx5e_accel_ipsec_fs_del_rule(struct mlx5e_ipsec_sa_entry *sa_entry);
 int mlx5e_accel_ipsec_fs_add_pol(struct mlx5e_ipsec_pol_entry *pol_entry);
index 7dba4221993f054ed3fed3196e4adb3a44a95741..4315e4f3d6cde8b025c070c5c68a4bcc3a4053da 100644 (file)
@@ -1888,7 +1888,8 @@ void mlx5e_accel_ipsec_fs_cleanup(struct mlx5e_ipsec *ipsec)
        }
 }
 
-int mlx5e_accel_ipsec_fs_init(struct mlx5e_ipsec *ipsec)
+int mlx5e_accel_ipsec_fs_init(struct mlx5e_ipsec *ipsec,
+                             struct mlx5_devcom_comp_dev **devcom)
 {
        struct mlx5_core_dev *mdev = ipsec->mdev;
        struct mlx5_flow_namespace *ns, *ns_esw;
@@ -1940,7 +1941,7 @@ int mlx5e_accel_ipsec_fs_init(struct mlx5e_ipsec *ipsec)
                ipsec->tx_esw->ns = ns_esw;
                xa_init_flags(&ipsec->rx_esw->ipsec_obj_id_map, XA_FLAGS_ALLOC1);
        } else if (mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_ROCE) {
-               ipsec->roce = mlx5_ipsec_fs_roce_init(mdev);
+               ipsec->roce = mlx5_ipsec_fs_roce_init(mdev, devcom);
        }
 
        return 0;
index 6e3f178d6f84bcb11f871662f2e74d8837c366d4..6176680c470ceda527b79a7c5d4c991e8038b1cb 100644 (file)
@@ -31,6 +31,7 @@ struct mlx5_ipsec_fs {
        struct mlx5_ipsec_rx_roce ipv4_rx;
        struct mlx5_ipsec_rx_roce ipv6_rx;
        struct mlx5_ipsec_tx_roce tx;
+       struct mlx5_devcom_comp_dev **devcom;
 };
 
 static void ipsec_fs_roce_setup_udp_dport(struct mlx5_flow_spec *spec,
@@ -337,7 +338,8 @@ void mlx5_ipsec_fs_roce_cleanup(struct mlx5_ipsec_fs *ipsec_roce)
        kfree(ipsec_roce);
 }
 
-struct mlx5_ipsec_fs *mlx5_ipsec_fs_roce_init(struct mlx5_core_dev *mdev)
+struct mlx5_ipsec_fs *mlx5_ipsec_fs_roce_init(struct mlx5_core_dev *mdev,
+                                             struct mlx5_devcom_comp_dev **devcom)
 {
        struct mlx5_ipsec_fs *roce_ipsec;
        struct mlx5_flow_namespace *ns;
@@ -363,6 +365,8 @@ struct mlx5_ipsec_fs *mlx5_ipsec_fs_roce_init(struct mlx5_core_dev *mdev)
 
        roce_ipsec->tx.ns = ns;
 
+       roce_ipsec->devcom = devcom;
+
        return roce_ipsec;
 
 err_tx:
index 9712d705fe481da6862dca8cce805ef7cb21b6ea..75475e1261814f0fb8b1faa54668d10036dc3c05 100644 (file)
@@ -4,6 +4,8 @@
 #ifndef __MLX5_LIB_IPSEC_H__
 #define __MLX5_LIB_IPSEC_H__
 
+#include "lib/devcom.h"
+
 struct mlx5_ipsec_fs;
 
 struct mlx5_flow_table *
@@ -20,6 +22,7 @@ int mlx5_ipsec_fs_roce_tx_create(struct mlx5_core_dev *mdev,
                                 struct mlx5_ipsec_fs *ipsec_roce,
                                 struct mlx5_flow_table *pol_ft);
 void mlx5_ipsec_fs_roce_cleanup(struct mlx5_ipsec_fs *ipsec_roce);
-struct mlx5_ipsec_fs *mlx5_ipsec_fs_roce_init(struct mlx5_core_dev *mdev);
+struct mlx5_ipsec_fs *mlx5_ipsec_fs_roce_init(struct mlx5_core_dev *mdev,
+                                             struct mlx5_devcom_comp_dev **devcom);
 
 #endif /* __MLX5_LIB_IPSEC_H__ */