From nobody Thu Jul 17 11:01:17 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bjVNG0fjRz61Zkx; Thu, 17 Jul 2025 11:01:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bjVNF6Bnvz3vSL; Thu, 17 Jul 2025 11:01:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1752750077; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=9mky5we0fgRdzpuqUyZ3/cbUOU/7mO6l9M+AVxXaVTc=; b=kqo2G6SPKK60t0x5jqhzLN2sScN7FcVfn9rzdO1xoeAO6EL2ZC878tMPssakZ/O7waCSST 3DagEZ0vb0QISoNu/X5/wsYAYYrNz+Rdq3BWLmib9+esfQ10pEsL0Of3tJ/DhSlmySM9tX Xb4SWt6tWkwG/nkc9gj40iLo1CGxSIULqqBm3yVzRUYRrTt8xpSW+lRiWn4HwyeSdTry8i hseiW/Og+osJrVtROqQMrlnX3AxFmpeiF9ZLVlUCn0W1wku1Pch+XOpQ6iFKzBiD5urQZH euplXHBetCeZ6CeLGtEZYJqEcqPrLsZ5ntEUY8Hsm+3M7LZWpi1M6QUKQsx7Ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1752750077; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=9mky5we0fgRdzpuqUyZ3/cbUOU/7mO6l9M+AVxXaVTc=; b=OhYNksY41HFkDoBNIM4bTACP+W4tX0aPNclZTdOUOsLdJMlKN7SvHILfcPgq19tN+YIoPm f9+gNFvvcwhQI7HvESJddZiPPBmG7Nf/qEEsHaGMwOqOf/Yem60PfzR7MzIkvjUeEXFlBj Upl41St0nzsS/sbz5ca/T9Dezmrws5X05kYMdLEZ3NJ/kbtwjbvgCjVtAjDIV1qeOu1ya1 s9+cQ7sWTuMnuSKoEeiyWVQJ/hGM5KEeB5oCrhyhbBNw2K7Vz/2ZPH53QPKNsPRuc2EzSy Mv/GKnQSjgFM0OUtf3PRFzpCOYlf19GHihysk0WuCa3rP/UW5mlHFj6trUmBlA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1752750077; a=rsa-sha256; cv=none; b=srb8DbpX7g15wMrp0k9FI6zTArxb6SHPwr+Aszg7PQIrHiCHd82oYdcNH79dQZwYv7i26i X6oZ2NTBUCNusjDnQNB1NiwAZRjMMqixL2SMnLZBwEVq2ZLT76+Xc13gGXEJLyN9PBDSr5 8Ga8iy1+WQ+jMCqZ8MXHY0Kb32hgfXmNxRa1ncj5jfdfB9oT4oYIOs9RHgLsPlASPzv68N vKRA23UppdstcGLu8dABEau2Gwp21gKRMmS8jMYevwxOWAmQw0MZJQWZM6sbYhfEfntLn6 6N5uDVPvzY7UaTt6wr5/Lrl3Qi3cHCB0oMYKi8uiQ4W+76gBQr/yykKLOYaLig== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bjVNF5pTWzsgG; Thu, 17 Jul 2025 11:01:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 56HB1HFs065920; Thu, 17 Jul 2025 11:01:17 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 56HB1HB0065917; Thu, 17 Jul 2025 11:01:17 GMT (envelope-from git) Date: Thu, 17 Jul 2025 11:01:17 GMT Message-Id: <202507171101.56HB1HB0065917@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 39598c2a9f5d - main - ipsec offload: ipsec_accel_fill_xh() should indirect through fn pointer List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 39598c2a9f5d074b1365e5ba97441fb5b4f8476b Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=39598c2a9f5d074b1365e5ba97441fb5b4f8476b commit 39598c2a9f5d074b1365e5ba97441fb5b4f8476b Author: Konstantin Belousov AuthorDate: 2025-07-17 10:57:35 +0000 Commit: Konstantin Belousov CommitDate: 2025-07-17 10:57:35 +0000 ipsec offload: ipsec_accel_fill_xh() should indirect through fn pointer The config with IPSEC_SUPPORT + IPSEC_OFFLOAD is the valid one. Fixes: 5be5a0bde5f990dbc680272eee74132bcde815f2 Sponsored by: Nvidia networking --- sys/netipsec/ipsec_offload.c | 8 ++++++-- sys/netipsec/ipsec_offload.h | 16 +++++++++++++--- sys/netipsec/key.c | 2 ++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/sys/netipsec/ipsec_offload.c b/sys/netipsec/ipsec_offload.c index a2092c91c1aa..8a09d5f37b4a 100644 --- a/sys/netipsec/ipsec_offload.c +++ b/sys/netipsec/ipsec_offload.c @@ -160,6 +160,8 @@ static void ipsec_accel_drv_sa_lifetime_update_impl(struct secasvar *sav, static int ipsec_accel_drv_sa_lifetime_fetch_impl(struct secasvar *sav, if_t ifp, u_int drv_spi, uint64_t *octets, uint64_t *allocs); static void ipsec_accel_ifdetach_event(void *arg, struct ifnet *ifp); +static bool ipsec_accel_fill_xh_impl(if_t ifp, uint32_t drv_spi, + struct xform_history *xh); static void ipsec_accel_init(void *arg) @@ -186,6 +188,7 @@ ipsec_accel_init(void *arg) ipsec_accel_drv_sa_lifetime_update_impl; ipsec_accel_drv_sa_lifetime_fetch_p = ipsec_accel_drv_sa_lifetime_fetch_impl; + ipsec_accel_fill_xh_p = ipsec_accel_fill_xh_impl; pctrie_init(&drv_spi_pctrie); ipsec_accel_ifdetach_event_tag = EVENTHANDLER_REGISTER( ifnet_departure_event, ipsec_accel_ifdetach_event, NULL, @@ -210,6 +213,7 @@ ipsec_accel_fini(void *arg) ipsec_accel_on_ifdown_p = NULL; ipsec_accel_drv_sa_lifetime_update_p = NULL; ipsec_accel_drv_sa_lifetime_fetch_p = NULL; + ipsec_accel_fill_xh_p = NULL; ipsec_accel_sync_imp(); clean_unrhdr(drv_spi_unr); /* avoid panic, should go later */ clear_unrhdr(drv_spi_unr); @@ -1167,8 +1171,8 @@ ipsec_accel_key_setaccelif_impl(struct secasvar *sav) return (m); } -bool -ipsec_accel_fill_xh(if_t ifp, uint32_t drv_spi, struct xform_history *xh) +static bool +ipsec_accel_fill_xh_impl(if_t ifp, uint32_t drv_spi, struct xform_history *xh) { struct ifp_handle_sav *i; diff --git a/sys/netipsec/ipsec_offload.h b/sys/netipsec/ipsec_offload.h index fb8cd7438598..ae60eaa8ae78 100644 --- a/sys/netipsec/ipsec_offload.h +++ b/sys/netipsec/ipsec_offload.h @@ -68,6 +68,8 @@ extern void (*ipsec_accel_drv_sa_lifetime_update_p)(struct secasvar *sav, if_t ifp, u_int drv_spi, uint64_t octets, uint64_t allocs); extern int (*ipsec_accel_drv_sa_lifetime_fetch_p)(struct secasvar *sav, if_t ifp, u_int drv_spi, uint64_t *octets, uint64_t *allocs); +extern bool (*ipsec_accel_fill_xh_p)(if_t ifp, uint32_t drv_spi, + struct xform_history *xh); #ifdef IPSEC_OFFLOAD /* @@ -160,6 +162,16 @@ ipsec_accel_key_setaccelif(struct secasvar *sav) return (NULL); } +static inline bool +ipsec_accel_fill_xh(if_t ifp, uint32_t drv_spi, struct xform_history *xh) +{ + bool (*p)(if_t ifp, uint32_t drv_spi, struct xform_history *xh); + + p = atomic_load_ptr(&ipsec_accel_fill_xh_p); + if (p != NULL) + return (p(ifp, drv_spi, xh)); + return (false); +} #else #define ipsec_accel_sa_newkey(a) @@ -170,6 +182,7 @@ ipsec_accel_key_setaccelif(struct secasvar *sav) #define ipsec_accel_sync() #define ipsec_accel_is_accel_sav(a) #define ipsec_accel_key_setaccelif(a) +#define ipsec_accel_fill_xh(a, b, c) (false) #endif void ipsec_accel_forget_sav_impl(struct secasvar *sav); @@ -183,8 +196,6 @@ bool ipsec_accel_output(struct ifnet *ifp, struct mbuf *m, int mtu, int *hwassist); void ipsec_accel_forget_sav(struct secasvar *sav); struct xform_history; -bool ipsec_accel_fill_xh(if_t ifp, uint32_t drv_spi, - struct xform_history *xh); #else #define ipsec_accel_input(a, b, c) (ENXIO) #define ipsec_accel_output(a, b, c, d, e, f, g, h) ({ \ @@ -192,7 +203,6 @@ bool ipsec_accel_fill_xh(if_t ifp, uint32_t drv_spi, false; \ }) #define ipsec_accel_forget_sav(a) -#define ipsec_accel_fill_xh(a, b, c) (false) #endif struct ipsec_accel_in_tag *ipsec_accel_input_tag_lookup(const struct mbuf *); diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c index ae67d83c6d13..4ba1b49c24f0 100644 --- a/sys/netipsec/key.c +++ b/sys/netipsec/key.c @@ -114,6 +114,8 @@ void (*ipsec_accel_drv_sa_lifetime_update_p)(struct secasvar *sav, if_t ifp, u_int drv_spi, uint64_t octets, uint64_t allocs); int (*ipsec_accel_drv_sa_lifetime_fetch_p)(struct secasvar *sav, if_t ifp, u_int drv_spi, uint64_t *octets, uint64_t *allocs); +bool (*ipsec_accel_fill_xh_p)(if_t ifp, uint32_t drv_spi, + struct xform_history *xh); #endif #define FULLMASK 0xff