[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0e7d382ad191c19aed123ff0c2bdda7bbeb5268f.camel@nvidia.com>
Date: Fri, 11 Jul 2025 12:54:21 +0000
From: Cosmin Ratiu <cratiu@...dia.com>
To: "corbet@....net" <corbet@....net>, "andrew+netdev@...n.ch"
<andrew+netdev@...n.ch>, "davem@...emloft.net" <davem@...emloft.net>,
"kuba@...nel.org" <kuba@...nel.org>, "horms@...nel.org" <horms@...nel.org>,
"daniel.zahka@...il.com" <daniel.zahka@...il.com>, "edumazet@...gle.com"
<edumazet@...gle.com>, "donald.hunter@...il.com" <donald.hunter@...il.com>,
"pabeni@...hat.com" <pabeni@...hat.com>
CC: Boris Pismenny <borisp@...dia.com>, Jianbo Liu <jianbol@...dia.com>,
"aleksander.lobakin@...el.com" <aleksander.lobakin@...el.com>,
"kuniyu@...gle.com" <kuniyu@...gle.com>, "leon@...nel.org" <leon@...nel.org>,
"toke@...hat.com" <toke@...hat.com>, Rahul Rameshbabu
<rrameshbabu@...dia.com>, "willemb@...gle.com" <willemb@...gle.com>, Raed
Salem <raeds@...dia.com>, Dragos Tatulea <dtatulea@...dia.com>,
"ncardwell@...gle.com" <ncardwell@...gle.com>, "dsahern@...nel.org"
<dsahern@...nel.org>, "sdf@...ichev.me" <sdf@...ichev.me>, Saeed Mahameed
<saeedm@...dia.com>, "netdev@...r.kernel.org" <netdev@...r.kernel.org>, Tariq
Toukan <tariqt@...dia.com>, Patrisious Haddad <phaddad@...dia.com>,
"jacob.e.keller@...el.com" <jacob.e.keller@...el.com>
Subject: Re: [PATCH v3 11/19] net/mlx5e: Support PSP offload functionality
On Wed, 2025-07-02 at 10:13 -0700, Daniel Zahka wrote:
> From: Raed Salem <raeds@...dia.com>
>
> Add PSP offload related IFC structs, layouts, and enumerations.
> Implement
> .set_config and .rx_spi_alloc PSP device operations. Driver does not
> need
> to make use of the .set_config operation. Stub .assoc_add and
> .assoc_del
> PSP operations.
>
> Introduce the MLX5_EN_PSP configuration option for enabling PSP
> offload
> support on mlx5 devices.
>
> Signed-off-by: Raed Salem <raeds@...dia.com>
> Signed-off-by: Rahul Rameshbabu <rrameshbabu@...dia.com>
> Signed-off-by: Daniel Zahka <daniel.zahka@...il.com>
> ---
>
> Notes:
> v1:
> -
> https://lore.kernel.org/netdev/20240510030435.120935-10-kuba@kernel.org/
>
> .../net/ethernet/mellanox/mlx5/core/Kconfig | 11 ++
> .../net/ethernet/mellanox/mlx5/core/Makefile | 4 +-
> drivers/net/ethernet/mellanox/mlx5/core/en.h | 3 +
> .../ethernet/mellanox/mlx5/core/en/params.c | 4 +-
> .../mellanox/mlx5/core/en_accel/psp.c | 149
> ++++++++++++++++++
> .../mellanox/mlx5/core/en_accel/psp.h | 53 +++++++
> .../mellanox/mlx5/core/en_accel/psp_offload.c | 52 ++++++
> .../net/ethernet/mellanox/mlx5/core/en_main.c | 9 ++
> drivers/net/ethernet/mellanox/mlx5/core/fw.c | 6 +
> .../net/ethernet/mellanox/mlx5/core/main.c | 5 +
> drivers/net/ethernet/mellanox/mlx5/core/psp.c | 24 +++
> drivers/net/ethernet/mellanox/mlx5/core/psp.h | 15 ++
> include/linux/mlx5/device.h | 4 +
> include/linux/mlx5/driver.h | 2 +
> include/linux/mlx5/mlx5_ifc.h | 94 ++++++++++-
> 15 files changed, 428 insertions(+), 7 deletions(-)
> create mode 100644
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
> create mode 100644
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.h
> create mode 100644
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp_offload.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/psp.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/psp.h
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
> b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
> index 6ec7d6e0181d..79a64489da89 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
> @@ -208,3 +208,14 @@ config MLX5_DPLL
> help
> DPLL support in Mellanox Technologies ConnectX NICs.
>
> +config MLX5_EN_PSP
> + bool "Mellanox Technologies support for PSP cryptography-
> offload acceleration"
> + depends on INET_PSP
> + depends on MLX5_CORE_EN
> + default y
> + help
> + mlx5 device offload support for Google PSP Security
> Protocol offload.
> + Adds support for PSP encryption offload and for SPI and
> key generation
> + interfaces to PSP Stack which supports PSP crypto offload.
> +
> + If unsure, say Y.
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile
> b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
> index d292e6a9e22c..e27de74ef028 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
> @@ -17,7 +17,7 @@ mlx5_core-y := main.o cmd.o debugfs.o fw.o
> eq.o uar.o pagealloc.o \
> fs_counters.o fs_ft_pool.o rl.o lag/debugfs.o
> lag/lag.o dev.o events.o wq.o lib/gid.o \
> lib/devcom.o lib/pci_vsc.o lib/dm.o lib/fs_ttc.o
> diag/fs_tracepoint.o \
> diag/fw_tracer.o diag/crdump.o devlink.o
> diag/rsc_dump.o diag/reporter_vnic.o \
> - fw_reset.o qos.o lib/tout.o lib/aso.o wc.o fs_pool.o
> + fw_reset.o qos.o lib/tout.o lib/aso.o wc.o fs_pool.o
> psp.o
Turns out, psp.c/psp.h and struct mlx5_psp aren't needed at all.
Please remove them, to avoid maintaining unnecessary boilerplate.
Here's a fixup patch which does this:
From ca3310c747dca55f7a139828e71457ac27b77889 Mon Sep 17 00:00:00 2001
From: Cosmin Ratiu <cratiu@...dia.com>
Date: Fri, 11 Jul 2025 15:35:15 +0300
Subject: [PATCH 1/3] net/mlx5: fixup for unneded struct mlx5_psp
Signed-off-by: Cosmin Ratiu <cratiu@...dia.com>
Change-Id: I8fcef314c53db25c0f3a73ff2daecf34d4d28fce
---
.../net/ethernet/mellanox/mlx5/core/Makefile | 2 +-
.../net/ethernet/mellanox/mlx5/core/main.c | 4 ----
drivers/net/ethernet/mellanox/mlx5/core/psp.c | 24 -------------------
drivers/net/ethernet/mellanox/mlx5/core/psp.h | 15 ------------
include/linux/mlx5/driver.h | 2 --
5 files changed, 1 insertion(+), 46 deletions(-)
delete mode 100644 drivers/net/ethernet/mellanox/mlx5/core/psp.c
delete mode 100644 drivers/net/ethernet/mellanox/mlx5/core/psp.h
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile
b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
index 3761f5c104d3..ab35efdb7052 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile
+++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
@@ -17,7 +17,7 @@ mlx5_core-y := main.o cmd.o debugfs.o fw.o
eq.o uar.o pagealloc.o \
fs_counters.o fs_ft_pool.o rl.o lag/debugfs.o
lag/lag.o dev.o events.o wq.o lib/gid.o \
lib/devcom.o lib/pci_vsc.o lib/dm.o lib/fs_ttc.o
diag/fs_tracepoint.o \
diag/fw_tracer.o diag/crdump.o devlink.o
diag/rsc_dump.o diag/reporter_vnic.o \
- fw_reset.o qos.o lib/tout.o lib/aso.o wc.o fs_pool.o
psp.o
+ fw_reset.o qos.o lib/tout.o lib/aso.o wc.o fs_pool.o
#
# Netdev basic
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c
b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index 1890e4b09ffe..dc37b410799f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -74,7 +74,6 @@
#include "mlx5_irq.h"
#include "hwmon.h"
#include "lag/lag.h"
-#include "psp.h"
MODULE_AUTHOR("Eli Cohen <eli@...lanox.com>");
MODULE_DESCRIPTION("Mellanox 5th generation network adapters (ConnectX
series) core driver");
@@ -1047,7 +1046,6 @@ static int mlx5_init_once(struct mlx5_core_dev
*dev)
dev->vxlan = mlx5_vxlan_create(dev);
dev->geneve = mlx5_geneve_create(dev);
- dev->psp = mlx5_psp_create(dev);
err = mlx5_init_rl_table(dev);
if (err) {
@@ -1130,7 +1128,6 @@ static int mlx5_init_once(struct mlx5_core_dev
*dev)
err_rl_cleanup:
mlx5_cleanup_rl_table(dev);
err_clock_cleanup:
- mlx5_psp_destroy(dev->psp);
mlx5_geneve_destroy(dev->geneve);
mlx5_vxlan_destroy(dev->vxlan);
mlx5_cleanup_clock(dev);
@@ -1166,7 +1163,6 @@ static void mlx5_cleanup_once(struct
mlx5_core_dev *dev)
mlx5_sriov_cleanup(dev);
mlx5_mpfs_cleanup(dev);
mlx5_cleanup_rl_table(dev);
- mlx5_psp_destroy(dev->psp);
mlx5_geneve_destroy(dev->geneve);
mlx5_vxlan_destroy(dev->vxlan);
mlx5_cleanup_clock(dev);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/psp.c
b/drivers/net/ethernet/mellanox/mlx5/core/psp.c
deleted file mode 100644
index 15df8bde3632..000000000000
--- a/drivers/net/ethernet/mellanox/mlx5/core/psp.c
+++ /dev/null
@@ -1,24 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
-/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights
reserved. */
-
-#include "psp.h"
-
-struct mlx5_psp *mlx5_psp_create(struct mlx5_core_dev *mdev)
-{
- struct mlx5_psp *psp = kzalloc(sizeof(*psp), GFP_KERNEL);
-
- if (!psp)
- return ERR_PTR(-ENOMEM);
-
- psp->mdev = mdev;
-
- return psp;
-}
-
-void mlx5_psp_destroy(struct mlx5_psp *psp)
-{
- if (IS_ERR_OR_NULL(psp))
- return;
-
- kfree(psp);
-}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/psp.h
b/drivers/net/ethernet/mellanox/mlx5/core/psp.h
deleted file mode 100644
index 1d7927c4ea72..000000000000
--- a/drivers/net/ethernet/mellanox/mlx5/core/psp.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
-/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights
reserved. */
-
-#ifndef __MLX5_PSP_H__
-#define __MLX5_PSP_H__
-#include <linux/mlx5/driver.h>
-
-struct mlx5_psp {
- struct mlx5_core_dev *mdev;
-};
-
-struct mlx5_psp *mlx5_psp_create(struct mlx5_core_dev *mdev);
-void mlx5_psp_destroy(struct mlx5_psp *psp);
-
-#endif /* __MLX5_PSP_H__ */
diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
index 671512699a92..e6ba8f4f4bd1 100644
--- a/include/linux/mlx5/driver.h
+++ b/include/linux/mlx5/driver.h
@@ -491,7 +491,6 @@ struct mlx5_sf_dev_table;
struct mlx5_sf_hw_table;
struct mlx5_sf_table;
struct mlx5_crypto_dek_priv;
-struct mlx5_psp;
struct mlx5_rate_limit {
u32 rate;
@@ -787,7 +786,6 @@ struct mlx5_core_dev {
enum mlx5_wc_state wc_state;
/* sync write combining state */
struct mutex wc_state_lock;
- struct mlx5_psp *psp;
};
struct mlx5_db {
--
2.45.0
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.h
> b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.h
> new file mode 100644
> index 000000000000..9707f50029ed
> --- /dev/null
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.h
> @@ -0,0 +1,53 @@
> +/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
> +/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights
> reserved. */
> +
> +#ifndef __MLX5E_ACCEL_PSP_H__
> +#define __MLX5E_ACCEL_PSP_H__
> +#if IS_ENABLED(CONFIG_MLX5_EN_PSP)
> +#include <net/psp/types.h>
> +#include "en.h"
> +
> +struct mlx5e_psp {
> + struct psp_dev *psp;
> + struct psp_dev_caps caps;
> +};
> +
> +struct psp_key_spi {
> + u32 spi;
> + __be32 key[PSP_MAX_KEY / sizeof(u32)];
> + u16 keysz;
> +};
This intermediate structure doesn't help much, it's only used during
key generation and psp_key_parsed could be used directly. Here's a
fixup patch which simplifies things, and avoids boilerplate:
From 1ea9823416548f6ec673ed51ec05590fc4f910ab Mon Sep 17 00:00:00 2001
From: Cosmin Ratiu <cratiu@...dia.com>
Date: Fri, 11 Jul 2025 15:37:00 +0300
Subject: [PATCH 2/2] net/mlx5e: fixup for mlx5e_psp_generate_key_spi
- use psp_key_parsed directly
Signed-off-by: Cosmin Ratiu <cratiu@...dia.com>
Change-Id: Ie26552386fc415d23c0fbddb2408e8c7ecc05d8f
---
.../mellanox/mlx5/core/en_accel/psp.c | 12 ++------
.../mellanox/mlx5/core/en_accel/psp.h | 8 +----
.../mellanox/mlx5/core/en_accel/psp_offload.c | 29 +++++++------------
3 files changed, 13 insertions(+), 36 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
index 288ed296b74c..cb429abc6b4b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
@@ -23,9 +23,7 @@ mlx5e_psp_rx_spi_alloc(struct psp_dev *psd, u32
version,
{
struct mlx5e_priv *priv = netdev_priv(psd->main_netdev);
enum mlx5_psp_gen_spi_in_key_size keysz;
- struct psp_key_spi key_spi = {};
u8 keysz_bytes;
- int err;
switch (version) {
case PSP_VERSION_HDR0_AES_GCM_128:
@@ -40,14 +38,8 @@ mlx5e_psp_rx_spi_alloc(struct psp_dev *psd, u32
version,
return -EINVAL;
}
- err = mlx5e_psp_generate_key_spi(priv->mdev, keysz,
keysz_bytes,
- &key_spi);
- if (err)
- return err;
-
- assoc->spi = cpu_to_be32(key_spi.spi);
- memcpy(assoc->key, key_spi.key, keysz_bytes);
- return 0;
+ return mlx5e_psp_generate_key_spi(priv->mdev, keysz,
keysz_bytes,
+ assoc);
}
struct psp_key {
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.h
b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.h
index 16e5ba591307..3f64a162f503 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.h
@@ -14,12 +14,6 @@ struct mlx5e_psp {
atomic_t tx_key_cnt;
};
-struct psp_key_spi {
- u32 spi;
- __be32 key[PSP_MAX_KEY / sizeof(u32)];
- u16 keysz;
-};
-
static inline bool mlx5_is_psp_device(struct mlx5_core_dev *mdev)
{
if (!MLX5_CAP_GEN(mdev, psp))
@@ -40,7 +34,7 @@ int mlx5e_psp_rotate_key(struct mlx5_core_dev *mdev);
int mlx5e_psp_generate_key_spi(struct mlx5_core_dev *mdev,
enum mlx5_psp_gen_spi_in_key_size
keysz,
unsigned int keysz_bytes,
- struct psp_key_spi *keys);
+ struct psp_key_parsed *key);
#else
static inline bool mlx5_is_psp_device(struct mlx5_core_dev *mdev)
{
diff --git
a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp_offload.c
b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp_offload.c
index c3c21a99a92b..a158ae407455 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp_offload.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp_offload.c
@@ -19,34 +19,25 @@ int mlx5e_psp_rotate_key(struct mlx5_core_dev
*mdev)
int mlx5e_psp_generate_key_spi(struct mlx5_core_dev *mdev,
enum mlx5_psp_gen_spi_in_key_size
keysz,
unsigned int keysz_bytes,
- struct psp_key_spi *keys)
+ struct psp_key_parsed *key)
{
+ u32 out[MLX5_ST_SZ_DW(psp_gen_spi_out) +
MLX5_ST_SZ_DW(key_spi)] = {};
u32 in[MLX5_ST_SZ_DW(psp_gen_spi_in)] = {};
- int err, outlen, i;
- void *out, *outkey;
+ void *outkey;
+ int err;
WARN_ON_ONCE(keysz_bytes > PSP_MAX_KEY);
- outlen = MLX5_ST_SZ_BYTES(psp_gen_spi_out) +
MLX5_ST_SZ_BYTES(key_spi);
- out = kzalloc(outlen, GFP_KERNEL);
- if (!out)
- return -ENOMEM;
-
MLX5_SET(psp_gen_spi_in, in, opcode, MLX5_CMD_OP_PSP_GEN_SPI);
MLX5_SET(psp_gen_spi_in, in, key_size, keysz);
MLX5_SET(psp_gen_spi_in, in, num_of_spi, 1);
- err = mlx5_cmd_exec(mdev, in, sizeof(in), out, outlen);
+ err = mlx5_cmd_exec(mdev, in, sizeof(in), out, sizeof(out));
if (err)
- goto out;
+ return err;
outkey = MLX5_ADDR_OF(psp_gen_spi_out, out, key_spi);
- keys->keysz = keysz_bytes * BITS_PER_BYTE;
- keys->spi = MLX5_GET(key_spi, outkey, spi);
- for (i = 0; i < keysz_bytes / sizeof(*keys->key); ++i)
- keys->key[i] = cpu_to_be32(MLX5_GET(key_spi,
- outkey + (32 -
keysz_bytes), key[i]));
-
-out:
- kfree(out);
- return err;
+ key->spi = cpu_to_be32(MLX5_GET(key_spi, outkey, spi));
+ memcpy(key->key, MLX5_ADDR_OF(key_spi, outkey, key),
keysz_bytes);
+
+ return 0;
}
--
2.45.0
Cosmin.
Powered by blists - more mailing lists