The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=72c9ad9331a9d0b80bdfe8c6d76c61aa336bb1e5

commit 72c9ad9331a9d0b80bdfe8c6d76c61aa336bb1e5
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2025-07-06 16:58:25 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2025-07-17 09:36:26 +0000

    mlx5en ipsec offload: copy xform_history to the ipsec_accel_in_tag
    
    Reviewed by:    Ariel Ehrenberg <aehrenb...@nvidia.com>, slavash
    Sponsored by:   Nvidia networking
---
 sys/dev/mlx5/mlx5_accel/ipsec.h           |  8 ++++----
 sys/dev/mlx5/mlx5_accel/mlx5_ipsec_rxtx.c | 16 +++++++++++-----
 sys/dev/mlx5/mlx5_en/mlx5_en_rx.c         |  2 +-
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/sys/dev/mlx5/mlx5_accel/ipsec.h b/sys/dev/mlx5/mlx5_accel/ipsec.h
index 361b9f72d873..c3f3a2372482 100644
--- a/sys/dev/mlx5/mlx5_accel/ipsec.h
+++ b/sys/dev/mlx5/mlx5_accel/ipsec.h
@@ -260,8 +260,8 @@ int mlx5e_accel_ipsec_fs_rx_tables_create(struct mlx5e_priv 
*priv);
 void mlx5e_accel_ipsec_fs_rx_catchall_rules_destroy(struct mlx5e_priv *priv);
 int mlx5e_accel_ipsec_fs_rx_catchall_rules(struct mlx5e_priv *priv);
 int mlx5_accel_ipsec_rx_tag_add(if_t ifp, struct mlx5e_rq_mbuf *mr);
-void mlx5e_accel_ipsec_handle_rx_cqe(struct mbuf *mb, struct mlx5_cqe64 *cqe,
-    struct mlx5e_rq_mbuf *mr);
+void mlx5e_accel_ipsec_handle_rx_cqe(if_t ifp, struct mbuf *mb,
+    struct mlx5_cqe64 *cqe, struct mlx5e_rq_mbuf *mr);
 
 static inline int mlx5e_accel_ipsec_flow(struct mlx5_cqe64 *cqe)
 {
@@ -269,12 +269,12 @@ static inline int mlx5e_accel_ipsec_flow(struct 
mlx5_cqe64 *cqe)
 }
 
 static inline void
-mlx5e_accel_ipsec_handle_rx(struct mbuf *mb, struct mlx5_cqe64 *cqe,
+mlx5e_accel_ipsec_handle_rx(if_t ifp, struct mbuf *mb, struct mlx5_cqe64 *cqe,
     struct mlx5e_rq_mbuf *mr)
 {
        u32 ipsec_meta_data = be32_to_cpu(cqe->ft_metadata);
 
        if (MLX5_IPSEC_METADATA_MARKER(ipsec_meta_data))
-               mlx5e_accel_ipsec_handle_rx_cqe(mb, cqe, mr);
+               mlx5e_accel_ipsec_handle_rx_cqe(ifp, mb, cqe, mr);
 }
 #endif /* __MLX5_ACCEL_IPSEC_H__ */
diff --git a/sys/dev/mlx5/mlx5_accel/mlx5_ipsec_rxtx.c 
b/sys/dev/mlx5/mlx5_accel/mlx5_ipsec_rxtx.c
index 0883cfb2d510..5dccb8bc2b87 100644
--- a/sys/dev/mlx5/mlx5_accel/mlx5_ipsec_rxtx.c
+++ b/sys/dev/mlx5/mlx5_accel/mlx5_ipsec_rxtx.c
@@ -24,11 +24,14 @@
  *
  */
 
+#include "opt_ipsec.h"
+
 #include <sys/mbuf.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <netipsec/keydb.h>
 #include <netipsec/ipsec_offload.h>
+#include <netipsec/xform.h>
 #include <dev/mlx5/qp.h>
 #include <dev/mlx5/mlx5_en/en.h>
 #include <dev/mlx5/mlx5_accel/ipsec.h>
@@ -48,7 +51,8 @@ mlx5_accel_ipsec_rx_tag_add(if_t ifp, struct mlx5e_rq_mbuf 
*mr)
                return (0);
 
        mtag = (struct ipsec_accel_in_tag *)m_tag_get(
-           PACKET_TAG_IPSEC_ACCEL_IN, sizeof(*mtag), M_NOWAIT);
+           PACKET_TAG_IPSEC_ACCEL_IN, sizeof(struct ipsec_accel_in_tag) -
+           __offsetof(struct ipsec_accel_in_tag, xh), M_NOWAIT);
        if (mtag == NULL)
                return (-ENOMEM);
        mr->ipsec_mtag = mtag;
@@ -56,8 +60,8 @@ mlx5_accel_ipsec_rx_tag_add(if_t ifp, struct mlx5e_rq_mbuf 
*mr)
 }
 
 void
-mlx5e_accel_ipsec_handle_rx_cqe(struct mbuf *mb, struct mlx5_cqe64 *cqe,
-    struct mlx5e_rq_mbuf *mr)
+mlx5e_accel_ipsec_handle_rx_cqe(if_t ifp, struct mbuf *mb,
+    struct mlx5_cqe64 *cqe, struct mlx5e_rq_mbuf *mr)
 {
        struct ipsec_accel_in_tag *mtag;
        u32 drv_spi;
@@ -65,10 +69,12 @@ mlx5e_accel_ipsec_handle_rx_cqe(struct mbuf *mb, struct 
mlx5_cqe64 *cqe,
        drv_spi = MLX5_IPSEC_METADATA_HANDLE(be32_to_cpu(cqe->ft_metadata));
        mtag = mr->ipsec_mtag;
        WARN_ON(mtag == NULL);
-       mr->ipsec_mtag = NULL;
        if (mtag != NULL) {
                mtag->drv_spi = drv_spi;
-               m_tag_prepend(mb, &mtag->tag);
+               if (ipsec_accel_fill_xh(ifp, drv_spi, &mtag->xh)) {
+                       m_tag_prepend(mb, &mtag->tag);
+                       mr->ipsec_mtag = NULL;
+               }
        }
 }
 
diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c 
b/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
index 6b53db6fea23..eb569488631a 100644
--- a/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
+++ b/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
@@ -467,7 +467,7 @@ mlx5e_build_rx_mbuf(struct mlx5_cqe64 *cqe, struct mlx5e_rq 
*rq,
                break;
        }
 
-       mlx5e_accel_ipsec_handle_rx(mb, cqe, mr);
+       mlx5e_accel_ipsec_handle_rx(ifp, mb, cqe, mr);
 }
 
 static inline void

Reply via email to