From nobody Mon Sep 29 15:22:27 2025 X-Original-To: dev-commits-src-main@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 4cb4gR2PTCz68NZM; Mon, 29 Sep 2025 15:22:27 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cb4gR1hvmz46Sl; Mon, 29 Sep 2025 15:22:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759159347; 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=YWND1957s6K9APQME6figuZRZv1Cmu5NhTu0ZgcIX7M=; b=tNSN+pUf5vxadcP+YSVpBImyi1fuqnp1//LmgrzlEHqUjJ9OprnHaEBxK2frpJuuwdZyRA LOWvXuDSFhZ6woPacCTsUNk+qYTCReelOikNmE0BV9htR4MavcnJZwfiBaXeDK6oDG5hjr Ku4dPGkzJDztnrWHbiwlF6WjVtEFE6iFln9Nh6sd3Wa1HWNj2cCbjilTGdxkl5PYxDulMd nyccaH52P2tTx6AXWDhzr9hZmXmQo655tkvBtFdHP/YwhVaMtCGDFTVVIXqlxY1ScuLzsf yu7Hfo6YTtMmIohlt6uq5m/N80QFvO0HwSgCRmvbckTuntUnpdPrLlEh+7BH1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759159347; 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=YWND1957s6K9APQME6figuZRZv1Cmu5NhTu0ZgcIX7M=; b=tzy7fKI4fzpYROfrvhAjQ7cFjrTAkq0tXzHm7gChxC2d5TUH0psxu7t1sFBZgtsz2jGzxe NGYdAu2TAwFZ/PTx4c/ndzUL7zKJVma18WapV2xpxZ1W3yeOGgrF9M4B0esjt8K9qOqUEt y/rsqcyK5RsSUN22gJ90bTYL68JGUV13BCAOUijrQge/A/guRuDh0IAFDGn7iLg2pje4mm eZvFZU3YZrKNBGnsy+a0TX6hY9Lb/7rc1A/lvn1VqyVdPfyV20CgKvweHwj+3ZgFjY8p7N QYe6TKc+KlPgJMxT5/F5O1z21YbuufQe5+BmOo7C25ttj/7D+VLhSarLi1T2Hg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1759159347; a=rsa-sha256; cv=none; b=NEUpmVql5Egc+VfSLqA2iNeMpKz16bKctoG409aR2KyuUxH65UuneqnmHZjrY+ZqQrlPWS tKpRQVPtS8e4/n1I43Zp91KQQQseklLB9KlrmlAU8B6Y7JsXWKDzbS3dTTbIDW1zYCg+Tu 6/QYVOqinVcJ9rMxTUfn3EzkgiCZhctVdQj1gfyVrdRXUxh1Azj503BOpsv43M6vgs3NhF rWTaNLdKTFtxiWtbQe168IKTIfGd07O/LJHmEY0+L7IlIbotsv3JiHRjybPTNi2Ky/qz/C S/ajEKsvcfLcNunrVLHQA/WSHlM7b5M/cxameQzcYyrEv1v/9MsFm/y3h7jXEQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4cb4gR1CgKz19Vk; Mon, 29 Sep 2025 15:22:27 +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 58TFMRJV011773; Mon, 29 Sep 2025 15:22:27 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58TFMRNc011770; Mon, 29 Sep 2025 15:22:27 GMT (envelope-from git) Date: Mon, 29 Sep 2025 15:22:27 GMT Message-Id: <202509291522.58TFMRNc011770@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Navdeep Parhar Subject: git: c341048373ac - main - cxgbe: Refactor find_offload_adapter and move to t4_tom from cxgbei List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: np X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c341048373ac6d4bad6dccc63880ff3f326ba15f Auto-Submitted: auto-generated The branch main has been updated by np: URL: https://cgit.FreeBSD.org/src/commit/?id=c341048373ac6d4bad6dccc63880ff3f326ba15f commit c341048373ac6d4bad6dccc63880ff3f326ba15f Author: John Baldwin AuthorDate: 2025-09-29 14:50:34 +0000 Commit: Navdeep Parhar CommitDate: 2025-09-29 15:19:11 +0000 cxgbe: Refactor find_offload_adapter and move to t4_tom from cxgbei This allows it to be used for other offload drivers. MFC after: 3 days Sponsored by: Chelsio Communications --- sys/dev/cxgbe/cxgbei/icl_cxgbei.c | 54 +++------------------------------------ sys/dev/cxgbe/tom/t4_tom.c | 48 ++++++++++++++++++++++++++++++++++ sys/dev/cxgbe/tom/t4_tom.h | 1 + 3 files changed, 53 insertions(+), 50 deletions(-) diff --git a/sys/dev/cxgbe/cxgbei/icl_cxgbei.c b/sys/dev/cxgbe/cxgbei/icl_cxgbei.c index d805642541d3..a79cc58b870c 100644 --- a/sys/dev/cxgbe/cxgbei/icl_cxgbei.c +++ b/sys/dev/cxgbe/cxgbei/icl_cxgbei.c @@ -976,42 +976,6 @@ icl_cxgbei_setsockopt(struct icl_conn *ic, struct socket *so, int sspace, return (0); } -/* - * Request/response structure used to find out the adapter offloading a socket. - */ -struct find_ofld_adapter_rr { - struct socket *so; - struct adapter *sc; /* result */ -}; - -static void -find_offload_adapter(struct adapter *sc, void *arg) -{ - struct find_ofld_adapter_rr *fa = arg; - struct socket *so = fa->so; - struct tom_data *td = sc->tom_softc; - struct tcpcb *tp; - struct inpcb *inp; - - /* Non-TCP were filtered out earlier. */ - MPASS(so->so_proto->pr_protocol == IPPROTO_TCP); - - if (fa->sc != NULL) - return; /* Found already. */ - - if (td == NULL) - return; /* TOE not enabled on this adapter. */ - - inp = sotoinpcb(so); - INP_WLOCK(inp); - if ((inp->inp_flags & INP_DROPPED) == 0) { - tp = intotcpcb(inp); - if (tp->t_flags & TF_TOE && tp->tod == &td->tod) - fa->sc = sc; /* Found. */ - } - INP_WUNLOCK(inp); -} - static bool is_memfree(struct adapter *sc) { @@ -1095,7 +1059,6 @@ int icl_cxgbei_conn_handoff(struct icl_conn *ic, int fd) { struct icl_cxgbei_conn *icc = ic_to_icc(ic); - struct find_ofld_adapter_rr fa; struct file *fp; struct socket *so; struct inpcb *inp; @@ -1139,15 +1102,11 @@ icl_cxgbei_conn_handoff(struct icl_conn *ic, int fd) fdrop(fp, curthread); ICL_CONN_UNLOCK(ic); - /* Find the adapter offloading this socket. */ - fa.sc = NULL; - fa.so = so; - t4_iterate(find_offload_adapter, &fa); - if (fa.sc == NULL) { + icc->sc = find_offload_adapter(so); + if (icc->sc == NULL) { error = EINVAL; goto out; } - icc->sc = fa.sc; max_rx_pdu_len = ISCSI_BHS_SIZE + ic->ic_max_recv_data_segment_length; max_tx_pdu_len = ISCSI_BHS_SIZE + ic->ic_max_send_data_segment_length; @@ -1778,7 +1737,6 @@ cxgbei_limits(struct adapter *sc, void *arg) static int cxgbei_limits_fd(struct icl_drv_limits *idl, int fd) { - struct find_ofld_adapter_rr fa; struct file *fp; struct socket *so; struct adapter *sc; @@ -1801,17 +1759,13 @@ cxgbei_limits_fd(struct icl_drv_limits *idl, int fd) return (EINVAL); } - /* Find the adapter offloading this socket. */ - fa.sc = NULL; - fa.so = so; - t4_iterate(find_offload_adapter, &fa); - if (fa.sc == NULL) { + sc = find_offload_adapter(so); + if (sc == NULL) { fdrop(fp, curthread); return (ENXIO); } fdrop(fp, curthread); - sc = fa.sc; error = begin_synchronized_op(sc, NULL, HOLD_LOCK, "t4lims"); if (error != 0) return (error); diff --git a/sys/dev/cxgbe/tom/t4_tom.c b/sys/dev/cxgbe/tom/t4_tom.c index 18d73afc47c5..f6d3a31667fb 100644 --- a/sys/dev/cxgbe/tom/t4_tom.c +++ b/sys/dev/cxgbe/tom/t4_tom.c @@ -2266,6 +2266,54 @@ t4_aio_queue_tom(struct socket *so, struct kaiocb *job) return (0); } +/* + * Request/response structure used to find out the adapter offloading + * a socket. + */ +struct find_offload_adapter_data { + struct socket *so; + struct adapter *sc; /* result */ +}; + +static void +find_offload_adapter_cb(struct adapter *sc, void *arg) +{ + struct find_offload_adapter_data *fa = arg; + struct socket *so = fa->so; + struct tom_data *td = sc->tom_softc; + struct tcpcb *tp; + struct inpcb *inp; + + /* Non-TCP were filtered out earlier. */ + MPASS(so->so_proto->pr_protocol == IPPROTO_TCP); + + if (fa->sc != NULL) + return; /* Found already. */ + + if (td == NULL) + return; /* TOE not enabled on this adapter. */ + + inp = sotoinpcb(so); + INP_WLOCK(inp); + if ((inp->inp_flags & INP_DROPPED) == 0) { + tp = intotcpcb(inp); + if (tp->t_flags & TF_TOE && tp->tod == &td->tod) + fa->sc = sc; /* Found. */ + } + INP_WUNLOCK(inp); +} + +struct adapter * +find_offload_adapter(struct socket *so) +{ + struct find_offload_adapter_data fa; + + fa.sc = NULL; + fa.so = so; + t4_iterate(find_offload_adapter_cb, &fa); + return (fa.sc); +} + static int t4_tom_mod_load(void) { diff --git a/sys/dev/cxgbe/tom/t4_tom.h b/sys/dev/cxgbe/tom/t4_tom.h index c3eb8578799d..a178c9b7ef5e 100644 --- a/sys/dev/cxgbe/tom/t4_tom.h +++ b/sys/dev/cxgbe/tom/t4_tom.h @@ -484,6 +484,7 @@ __be32 calc_options2(struct vi_info *, struct conn_params *); uint64_t select_ntuple(struct vi_info *, struct l2t_entry *); int negative_advice(int); int add_tid_to_history(struct adapter *, u_int); +struct adapter *find_offload_adapter(struct socket *); void t4_pcb_detach(struct toedev *, struct tcpcb *); /* t4_connect.c */