From nobody Mon Aug 24 03:11:51 2026 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 4hSwtb2VPBz6q8RX for ; Mon, 24 Aug 2026 03:11:51 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hSwtb1wqwz3NdK for ; Mon, 24 Aug 2026 03:11:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787541111; 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=IVmxl6EuGpaKgUNkcVBjlXxoOOhTkozKfR2OHTkgzhw=; b=ulMN1kw+uwbraMm+/4WWURWI3+uZu749SuC3bVe0R3irgR5mCRfkhuQHkXYMlghy+W0cdx AHGYhZWtjS5Kcc20c/J8/jndr6ePpUKpwF9VjZTKgdqvw1kzbssiAFR4V8Pc1Rc1NvDN+J e7So63UxkArrHXvZKuMk4leEY8fn6nRA0wD6yENvZ/K9GVsRe2Liojoik56VvcmBWxRBRM +9h03bDFuvt2E1xM7qGa+sJ/lfbf6zJBP8hfsVOEl3XG3B++FKf3kVrBaREnwxUnsG3tYv IDA5KFFXmlYKhr1CM5MqMo7O0BevayOWCA/32K1YjY+oqulGnpk4qaxn5dhkWw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787541111; a=rsa-sha256; cv=none; b=yKu+SvTz+CBHlibU2NNOvarXzniVhF8pRyPn7kfqiRRZ8QSagp47jFnfZmTiB9Ox9EC0cK 3xF7kd3rviqH2CrwqSreUnhASSBpp56xbEsDwUEin6ED32WFWGJ9cyTXGF+j3Vx/NIIq55 UZSW5joI7HiucYQztPWPlJXco+8q0zlOEFxsi8b5Us21T+Y7gVYXrlPf0h1uanwhbNyZtl gnyEDy4/+59ea3Ff7j9pzumDHv4+E9eTMkL8FbfqjwAOVslSQoH9qlt7oorppdYuFnfUyz UU36Kms3SkgLs56YXh6wg6N9ea6yemSd7y/24Pzt+VGJMlmNj1Dj4uRewCRP7Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787541111; 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=IVmxl6EuGpaKgUNkcVBjlXxoOOhTkozKfR2OHTkgzhw=; b=H0FzelJqR2I/C29GPnlrDycJapjy5EaOC7VORkeXc3gbGz6pKtAvTtKDGwIxpQO+rv9h1b WsmjuJMx+19y6ijrD3eoepQUtndFhGAgcHaOfVXkQ3r0bYII6Km2ZGOJYp5zNYkS6CM7gD n/G1dkNNayGP0LR8bZposog3VIOXy6Dd16I79Hn1h20gnK1v7NUYOQJ5Z5FMf51Yy4XoGd el2J1l4H02yyhNycykJyAN84cyYq9JoUfPJVQK8OFdnewcpKKrmfI7mipWrJcsF6cdUvSV Kyh9a6GifygeatJyxPZeGUgno9DPRuyBMQLN8TNpFkdfXWZX6awzp4etXTX2wQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hSwtb0X5bzmDK for ; Mon, 24 Aug 2026 03:11:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1a1a6 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 24 Aug 2026 03:11:51 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Justin Hibbits Subject: git: dcd99de90d92 - main - dpaa_eth: refactor RX FQ state into an array (N=1) 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: dcd99de90d92542fbf4377a4ca16ee6a09ae4a37 Auto-Submitted: auto-generated Date: Mon, 24 Aug 2026 03:11:51 +0000 Message-Id: <6a8bb677.1a1a6.7a6e8f26@gitrepo.freebsd.org> The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=dcd99de90d92542fbf4377a4ca16ee6a09ae4a37 commit dcd99de90d92542fbf4377a4ca16ee6a09ae4a37 Author: Justin Hibbits AuthorDate: 2026-08-10 13:48:18 +0000 Commit: Justin Hibbits CommitDate: 2026-08-24 03:11:25 +0000 dpaa_eth: refactor RX FQ state into an array (N=1) Preparation for FMan KeyGen-driven multi-queue RX. Replace the single sc_rx_fq / sc_rx_fqid pair with a sc_rx_fqs[] array (currently one entry) and sc_rx_fqid_base. Each entry carries a back-pointer to the softc for use by the RX callback. --- sys/dev/dpaa/dpaa_eth.c | 38 +++++++++++++++++++++++++++----------- sys/dev/dpaa/dpaa_eth.h | 22 +++++++++++++++++++--- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/sys/dev/dpaa/dpaa_eth.c b/sys/dev/dpaa/dpaa_eth.c index e2826eb70b14..29161d528f71 100644 --- a/sys/dev/dpaa/dpaa_eth.c +++ b/sys/dev/dpaa/dpaa_eth.c @@ -194,8 +194,8 @@ dpaa_eth_fm_port_rx_init(struct dpaa_eth_softc *sc) struct fman_port_params params; int error; - params.dflt_fqid = sc->sc_rx_fqid; - params.err_fqid = sc->sc_rx_fqid; + params.dflt_fqid = sc->sc_rx_fqid_base; + params.err_fqid = sc->sc_rx_fqid_base; params.rx_params.num_pools = 1; params.rx_params.bpools[0].bpid = bman_get_bpid(sc->sc_rx_pool); params.rx_params.bpools[0].size = MCLBYTES; @@ -398,13 +398,15 @@ static int dpaa_eth_fq_rx_callback(device_t portal, struct qman_fq *fq, struct qman_fd *frame, void *app) { + struct dpaa_eth_rx_fq *rxfq; struct dpaa_eth_softc *sc; struct mbuf *m; struct fman_internal_context *frame_ic; void *frame_va; m = NULL; - sc = app; + rxfq = app; + sc = rxfq->sc; frame_va = DPAA_FD_GET_ADDR(frame); frame_ic = frame_va; /* internal context at head of the frame */ @@ -514,10 +516,17 @@ dpaa_eth_fq_tx_confirm_callback(device_t portal, struct qman_fq *fq, void dpaa_eth_fq_rx_free(struct dpaa_eth_softc *sc) { - int cpu; + int cpu, i; - if (sc->sc_rx_fq) - qman_fq_free(sc->sc_rx_fq); + if (sc->sc_rx_fqs != NULL) { + for (i = 0; i < sc->sc_nrxfqs; i++) { + if (sc->sc_rx_fqs[i].fq != NULL) + qman_fq_free(sc->sc_rx_fqs[i].fq); + } + free(sc->sc_rx_fqs, M_DEVBUF); + sc->sc_rx_fqs = NULL; + sc->sc_nrxfqs = 0; + } if (sc->sc_rx_channel != 0) { CPU_FOREACH(cpu) { device_t portal = DPCPU_ID_GET(cpu, qman_affine_portal); @@ -531,7 +540,7 @@ dpaa_eth_fq_rx_free(struct dpaa_eth_softc *sc) int dpaa_eth_fq_rx_init(struct dpaa_eth_softc *sc) { - void *fq; + struct qman_fq *fq; int error; int cpu; @@ -556,10 +565,17 @@ dpaa_eth_fq_rx_init(struct dpaa_eth_softc *sc) QMAN_PORTAL_STATIC_DEQUEUE_CHANNEL(portal, sc->sc_rx_channel); } - sc->sc_rx_fq = fq; - sc->sc_rx_fqid = qman_fq_get_fqid(fq); - - error = qman_fq_register_cb(fq, dpaa_eth_fq_rx_callback, sc); + sc->sc_nrxfqs = 1; + sc->sc_rx_fqs = malloc(sc->sc_nrxfqs * sizeof(*sc->sc_rx_fqs), + M_DEVBUF, M_WAITOK | M_ZERO); + sc->sc_rx_fqs[0].fq = fq; + sc->sc_rx_fqs[0].fqid = qman_fq_get_fqid(fq); + sc->sc_rx_fqs[0].cpu = -1; /* not pinned; any portal may drain */ + sc->sc_rx_fqs[0].sc = sc; + sc->sc_rx_fqid_base = sc->sc_rx_fqs[0].fqid; + + error = qman_fq_register_cb(fq, dpaa_eth_fq_rx_callback, + &sc->sc_rx_fqs[0]); if (error != 0) { device_printf(sc->sc_dev, "could not register RX callback\n"); dpaa_eth_fq_rx_free(sc); diff --git a/sys/dev/dpaa/dpaa_eth.h b/sys/dev/dpaa/dpaa_eth.h index a897b43b725e..e4090f8521cb 100644 --- a/sys/dev/dpaa/dpaa_eth.h +++ b/sys/dev/dpaa/dpaa_eth.h @@ -35,6 +35,21 @@ struct dpaa_pcpu_cnt { u_int cnt; } __aligned(CACHE_LINE_SIZE); +struct dpaa_eth_softc; + +/* + * Per RX Frame Queue state. Today there is exactly one of these per + * port; a follow-on adds FMan KeyGen-driven hash distribution across + * N per-CPU FQs and this struct becomes the per-CPU RX slot. The + * back-pointer keeps the RX callback signature single-argument. + */ +struct dpaa_eth_rx_fq { + struct qman_fq *fq; + uint32_t fqid; + int cpu; /* CPU pin, or -1 if unpinned */ + struct dpaa_eth_softc *sc; +}; + struct dpaa_eth_softc { /* XXX MII bus requires that struct ifnet is first!!! */ if_t sc_ifnet; @@ -52,9 +67,10 @@ struct dpaa_eth_softc { char sc_rx_zname[64]; struct dpaa_pcpu_cnt *sc_rx_pool_check_cnt; /* per-CPU */ - /* RX Frame Queue */ - struct qman_fq *sc_rx_fq; - uint32_t sc_rx_fqid; + /* RX Frame Queues (array of sc_nrxfqs entries). */ + struct dpaa_eth_rx_fq *sc_rx_fqs; + int sc_nrxfqs; + uint32_t sc_rx_fqid_base; /* TX Frame Queue */ struct qman_fq *sc_tx_fq;