diff mbox series

[mlx5-next,02/17] net/mlx5: Check IPsec TX flow steering namespace in advance

Message ID 123bc1de57218089184a77465218d930997a8cf6.1649578827.git.leonro@nvidia.com (mailing list archive)
State Not Applicable
Headers show
Series Extra IPsec cleanup | expand

Commit Message

Leon Romanovsky April 10, 2022, 8:28 a.m. UTC
From: Leon Romanovsky <leonro@nvidia.com>

Ensure that flow steering is usable as early as possible, to understand
if crypto IPsec is supported or not.

Reviewed-by: Raed Salem <raeds@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en/fs.h  |  1 -
 .../ethernet/mellanox/mlx5/core/en_accel/ipsec.c |  1 +
 .../ethernet/mellanox/mlx5/core/en_accel/ipsec.h |  1 +
 .../mellanox/mlx5/core/en_accel/ipsec_fs.c       | 16 +++++++++-------
 4 files changed, 11 insertions(+), 8 deletions(-)

Comments

Saeed Mahameed April 10, 2022, 11:46 p.m. UTC | #1
On 10 Apr 11:28, Leon Romanovsky wrote:
>From: Leon Romanovsky <leonro@nvidia.com>
>
>Ensure that flow steering is usable as early as possible, to understand
>if crypto IPsec is supported or not.
>
>Reviewed-by: Raed Salem <raeds@nvidia.com>
>Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
>---
> drivers/net/ethernet/mellanox/mlx5/core/en/fs.h  |  1 -
> .../ethernet/mellanox/mlx5/core/en_accel/ipsec.c |  1 +
> .../ethernet/mellanox/mlx5/core/en_accel/ipsec.h |  1 +
> .../mellanox/mlx5/core/en_accel/ipsec_fs.c       | 16 +++++++++-------
> 4 files changed, 11 insertions(+), 8 deletions(-)
>
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
>index 678ffbb48a25..4130a871de61 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
>@@ -164,7 +164,6 @@ struct mlx5e_ptp_fs;
>
> struct mlx5e_flow_steering {
> 	struct mlx5_flow_namespace      *ns;
>-	struct mlx5_flow_namespace      *egress_ns;
> #ifdef CONFIG_MLX5_EN_RXNFC
> 	struct mlx5e_ethtool_steering   ethtool;
> #endif
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
>index 5a10755dd4f1..285ccb773de6 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
>@@ -415,6 +415,7 @@ int mlx5e_ipsec_init(struct mlx5e_priv *priv)
>
> 	hash_init(ipsec->sadb_rx);
> 	spin_lock_init(&ipsec->sadb_rx_lock);
>+	ipsec->mdev = priv->mdev;
> 	ipsec->en_priv = priv;
> 	ipsec->wq = alloc_ordered_workqueue("mlx5e_ipsec: %s", 0,
> 					    priv->netdev->name);
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
>index a0e9dade09e9..bbf48d4616f9 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
>@@ -61,6 +61,7 @@ struct mlx5e_accel_fs_esp;
> struct mlx5e_ipsec_tx;
>
> struct mlx5e_ipsec {
>+	struct mlx5_core_dev *mdev;
> 	struct mlx5e_priv *en_priv;

Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>

we could probably remove en_priv, I already sent you a patch, please try to
include it in the next version.
Leon Romanovsky April 11, 2022, 6:21 a.m. UTC | #2
On Sun, Apr 10, 2022 at 04:46:12PM -0700, Saeed Mahameed wrote:
> On 10 Apr 11:28, Leon Romanovsky wrote:
> > From: Leon Romanovsky <leonro@nvidia.com>
> > 
> > Ensure that flow steering is usable as early as possible, to understand
> > if crypto IPsec is supported or not.
> > 
> > Reviewed-by: Raed Salem <raeds@nvidia.com>
> > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > ---
> > drivers/net/ethernet/mellanox/mlx5/core/en/fs.h  |  1 -
> > .../ethernet/mellanox/mlx5/core/en_accel/ipsec.c |  1 +
> > .../ethernet/mellanox/mlx5/core/en_accel/ipsec.h |  1 +
> > .../mellanox/mlx5/core/en_accel/ipsec_fs.c       | 16 +++++++++-------
> > 4 files changed, 11 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
> > index 678ffbb48a25..4130a871de61 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
> > @@ -164,7 +164,6 @@ struct mlx5e_ptp_fs;
> > 
> > struct mlx5e_flow_steering {
> > 	struct mlx5_flow_namespace      *ns;
> > -	struct mlx5_flow_namespace      *egress_ns;
> > #ifdef CONFIG_MLX5_EN_RXNFC
> > 	struct mlx5e_ethtool_steering   ethtool;
> > #endif
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
> > index 5a10755dd4f1..285ccb773de6 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
> > @@ -415,6 +415,7 @@ int mlx5e_ipsec_init(struct mlx5e_priv *priv)
> > 
> > 	hash_init(ipsec->sadb_rx);
> > 	spin_lock_init(&ipsec->sadb_rx_lock);
> > +	ipsec->mdev = priv->mdev;
> > 	ipsec->en_priv = priv;
> > 	ipsec->wq = alloc_ordered_workqueue("mlx5e_ipsec: %s", 0,
> > 					    priv->netdev->name);
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
> > index a0e9dade09e9..bbf48d4616f9 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
> > @@ -61,6 +61,7 @@ struct mlx5e_accel_fs_esp;
> > struct mlx5e_ipsec_tx;
> > 
> > struct mlx5e_ipsec {
> > +	struct mlx5_core_dev *mdev;
> > 	struct mlx5e_priv *en_priv;
> 
> Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>
> 
> we could probably remove en_priv, I already sent you a patch, please try to
> include it in the next version.

I removed this en_priv in patch #6 "net/mlx5: Store IPsec ESN update work in XFRM state"
https://lore.kernel.org/netdev/1d965d2697dda0bd2c34fc1ccbbb45efaf03b0de.1649578827.git.leonro@nvidia.com/T/#u

Thanks
diff mbox series

Patch

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
index 678ffbb48a25..4130a871de61 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h
@@ -164,7 +164,6 @@  struct mlx5e_ptp_fs;
 
 struct mlx5e_flow_steering {
 	struct mlx5_flow_namespace      *ns;
-	struct mlx5_flow_namespace      *egress_ns;
 #ifdef CONFIG_MLX5_EN_RXNFC
 	struct mlx5e_ethtool_steering   ethtool;
 #endif
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
index 5a10755dd4f1..285ccb773de6 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
@@ -415,6 +415,7 @@  int mlx5e_ipsec_init(struct mlx5e_priv *priv)
 
 	hash_init(ipsec->sadb_rx);
 	spin_lock_init(&ipsec->sadb_rx_lock);
+	ipsec->mdev = priv->mdev;
 	ipsec->en_priv = priv;
 	ipsec->wq = alloc_ordered_workqueue("mlx5e_ipsec: %s", 0,
 					    priv->netdev->name);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
index a0e9dade09e9..bbf48d4616f9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
@@ -61,6 +61,7 @@  struct mlx5e_accel_fs_esp;
 struct mlx5e_ipsec_tx;
 
 struct mlx5e_ipsec {
+	struct mlx5_core_dev *mdev;
 	struct mlx5e_priv *en_priv;
 	DECLARE_HASHTABLE(sadb_rx, MLX5E_IPSEC_SADB_RX_BITS);
 	spinlock_t sadb_rx_lock; /* Protects sadb_rx */
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
index 869b5692e9b9..66b8ead8b579 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
@@ -35,6 +35,7 @@  struct mlx5e_accel_fs_esp {
 };
 
 struct mlx5e_ipsec_tx {
+	struct mlx5_flow_namespace *ns;
 	struct mlx5_flow_table *ft;
 	struct mutex mutex; /* Protect IPsec TX steering */
 	u32 refcnt;
@@ -338,15 +339,9 @@  static int tx_create(struct mlx5e_priv *priv)
 	struct mlx5_flow_table *ft;
 	int err;
 
-	priv->fs.egress_ns =
-		mlx5_get_flow_namespace(priv->mdev,
-					MLX5_FLOW_NAMESPACE_EGRESS_KERNEL);
-	if (!priv->fs.egress_ns)
-		return -EOPNOTSUPP;
-
 	ft_attr.max_fte = NUM_IPSEC_FTE;
 	ft_attr.autogroup.max_num_groups = 1;
-	ft = mlx5_create_auto_grouped_flow_table(priv->fs.egress_ns, &ft_attr);
+	ft = mlx5_create_auto_grouped_flow_table(ipsec->tx_fs->ns, &ft_attr);
 	if (IS_ERR(ft)) {
 		err = PTR_ERR(ft);
 		netdev_err(priv->netdev, "fail to create ipsec tx ft err=%d\n", err);
@@ -658,9 +653,15 @@  int mlx5e_ipsec_fs_init(struct mlx5e_ipsec *ipsec)
 {
 	struct mlx5e_accel_fs_esp_prot *fs_prot;
 	struct mlx5e_accel_fs_esp *accel_esp;
+	struct mlx5_flow_namespace *ns;
 	enum accel_fs_esp_type i;
 	int err = -ENOMEM;
 
+	ns = mlx5_get_flow_namespace(ipsec->mdev,
+				     MLX5_FLOW_NAMESPACE_EGRESS_KERNEL);
+	if (!ns)
+		return -EOPNOTSUPP;
+
 	ipsec->tx_fs = kzalloc(sizeof(*ipsec->tx_fs), GFP_KERNEL);
 	if (!ipsec->tx_fs)
 		return -ENOMEM;
@@ -670,6 +671,7 @@  int mlx5e_ipsec_fs_init(struct mlx5e_ipsec *ipsec)
 		goto err_rx;
 
 	mutex_init(&ipsec->tx_fs->mutex);
+	ipsec->tx_fs->ns = ns;
 
 	accel_esp = ipsec->rx_fs;
 	for (i = 0; i < ACCEL_FS_ESP_NUM_TYPES; i++) {