From nobody Thu Sep 10 09:48:43 2026 X-Original-To: dev-commits-src-branches@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 4hgXtg4FQsz6rm8C for ; Thu, 10 Sep 2026 09:48:43 +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 4hgXtg2LhMz4b7r for ; Thu, 10 Sep 2026 09:48:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789033723; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+7rz9moGJWFmW4AwAxAOZm+2QaldPwzCFXfzMxoKIsc=; b=DI+kBtG7bopa+gyNC7cbrpgNbaFJU9J1mWCYnDMRQmx3IJhepTbtkHBjdn0AkTteu8DjJJ rnZZ8gWV4CVAXQ4PmRQPN3PARUIPxm9JJyG3+WRyUaicfHxDOiEGHnvmh1ex37wkkFjyeM BFefbQ86BC77JXk0bcRFyDcOkDcutMaAhSHuB1TxmQ8thKEZ/uk2bykheOTYA3frKgRPW0 qZp+Hn4P0xe0HG2LuBzZWpw+tBf6q+LhAJfWa4fGYF2dCNXPFmjqIasIg8HqLSMzzYAOfs dN5wxH2a5+bH5oyAxnvmQKaqtFC0IrVLGtg93XlU4vlN7GlZad1GT2jdEDPtVw== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789033723; b=VYIcPiFfZwRILPYtBxaAJ+d0e/TXnuJ2qvZ9YXPJdv0ijqnqEYcky7MPmqJc2Keff2Yw/x qSfpInH1g/HFbmyRhJAzi4qxgk4Yoo69l/Go6VXlAgRJslFlKjz6n8yLqNQs63j46xBcb7 xMsm/XIAl4vMDv18DwlrFryMaT1bx07EyzkZgsiFeUDy+FTYBK5lL9mOOl6CuY1oeUEUI0 2Gf+6q2RrvZHJTA20iY93DTlrGUe0Ca0Awpjxx8BjxcRhhSBgqHAeQ/mRWRHoPOQlnFhJ9 fQFQO9TIO40yqws2mKBDa4132OwkEd+1JBKE+Y3ubXTRpurRU4jS4SbdcNjSfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789033723; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+7rz9moGJWFmW4AwAxAOZm+2QaldPwzCFXfzMxoKIsc=; b=cqWfhJ/DDvzZwzDTgizPYWtLGhCKOr8aZMJhwPyJeSQM4zJoDauIkSJ4LDdg176ih25wyQ mTEKfWkzzQ92tUM3MqJ/yY1C93s+AtrAWckh/GnPUvUoTR7vem4Y4VHnLLIkyPXpJHdgC0 JPiV7ChN5efDpZg1o4L/GqdsNHosNdZgR1wYwADluVodK1VaYHDaWDMRDJp3Crsx0hcXv6 EIMGHPp00JMvd7M5GCUzSGGx4U/92LRMdddDSMhWYChYgJgqivymf137VzuQ3+OyDGJmqG rLDv8RafzSo38y+olbAnmjJ95bMMm4VCaQtiupfWMll5qZPeuw3z6V5s5yGblw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hgXtg1Nw8zM0f for ; Thu, 10 Sep 2026 09:48:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26151 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 10 Sep 2026 09:48:43 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Zishun Yi From: Bjoern A. Zeeb Subject: git: 8b59c5f824aa - stable/15 - LinuxKPI: implement dma_sync_sg_for_{cpu, device}() List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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: bz X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 8b59c5f824aac748278c3e480094e92c43c49de3 Auto-Submitted: auto-generated Date: Thu, 10 Sep 2026 09:48:43 +0000 Message-Id: <6aa27cfb.26151.15711033@gitrepo.freebsd.org> The branch stable/15 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=8b59c5f824aac748278c3e480094e92c43c49de3 commit 8b59c5f824aac748278c3e480094e92c43c49de3 Author: Zishun Yi AuthorDate: 2026-09-05 20:05:39 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-09-10 09:46:54 +0000 LinuxKPI: implement dma_sync_sg_for_{cpu, device}() Implement dma_sync_sg_for_{cpu, device}() and dma_sync_sgtable_for_device(). These functions are useful for my GSoC 2026 project, udmabuf. Reviewed by: bz Differential Revision: https://reviews.freebsd.org/D57766 (cherry picked from commit 9dec0cd79c693951fc58d82a99918fc5a02cbcd0) --- .../linuxkpi/common/include/linux/dma-mapping.h | 51 ++++++++++++++++++++-- sys/compat/linuxkpi/common/src/linux_pci.c | 11 +++++ 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/dma-mapping.h b/sys/compat/linuxkpi/common/include/linux/dma-mapping.h index d32518a4d6ae..f26bb0e6eb99 100644 --- a/sys/compat/linuxkpi/common/include/linux/dma-mapping.h +++ b/sys/compat/linuxkpi/common/include/linux/dma-mapping.h @@ -111,6 +111,7 @@ void linux_dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, int nents __unused, enum dma_data_direction direction, unsigned long attrs); void linuxkpi_dma_sync(struct device *, dma_addr_t, size_t, bus_dmasync_op_t); +void lkpi_dma_sync_sg(struct device *, struct scatterlist *, bus_dmasync_op_t); static inline int dma_supported(struct device *dev, u64 dma_mask) @@ -290,21 +291,65 @@ dma_sync_single_for_device(struct device *dev, dma_addr_t dma, linuxkpi_dma_sync(dev, dma, size, op); } -/* (20250329) These four seem to be unused code. */ static inline void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, enum dma_data_direction direction) { - pr_debug("%s:%d: TODO dir %d\n", __func__, __LINE__, direction); + bus_dmasync_op_t op; + + switch (direction) { + case DMA_BIDIRECTIONAL: + op = BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE; + break; + case DMA_TO_DEVICE: + op = BUS_DMASYNC_POSTWRITE; + break; + case DMA_FROM_DEVICE: + op = BUS_DMASYNC_POSTREAD; + break; + default: + return; + } + + lkpi_dma_sync_sg(dev, sg, op); +} + +static inline void dma_sync_sgtable_for_cpu(struct device *dev, + struct sg_table *sgt, enum dma_data_direction dir) +{ + dma_sync_sg_for_cpu(dev, sgt->sgl, sgt->orig_nents, dir); } static inline void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems, enum dma_data_direction direction) { - pr_debug("%s:%d: TODO dir %d\n", __func__, __LINE__, direction); + bus_dmasync_op_t op; + + switch (direction) { + case DMA_BIDIRECTIONAL: + op = BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD; + break; + case DMA_TO_DEVICE: + op = BUS_DMASYNC_PREWRITE; + break; + case DMA_FROM_DEVICE: + op = BUS_DMASYNC_PREREAD; + break; + default: + return; + } + + lkpi_dma_sync_sg(dev, sg, op); +} + +static inline void dma_sync_sgtable_for_device(struct device *dev, + struct sg_table *sgt, enum dma_data_direction dir) +{ + dma_sync_sg_for_device(dev, sgt->sgl, sgt->orig_nents, dir); } +/* (20250329) These two seem to be unused code. */ static inline void dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle, unsigned long offset, size_t size, enum dma_data_direction direction) diff --git a/sys/compat/linuxkpi/common/src/linux_pci.c b/sys/compat/linuxkpi/common/src/linux_pci.c index 9d4d7bba8265..c966daae9507 100644 --- a/sys/compat/linuxkpi/common/src/linux_pci.c +++ b/sys/compat/linuxkpi/common/src/linux_pci.c @@ -2012,6 +2012,17 @@ linuxkpi_dma_sync(struct device *dev, dma_addr_t dma_addr, size_t size, DMA_PRIV_UNLOCK(priv); } +void +lkpi_dma_sync_sg(struct device *dev, struct scatterlist *sgl, bus_dmasync_op_t op) +{ + struct linux_dma_priv *priv; + + priv = dev->dma_priv; + DMA_PRIV_LOCK(priv); + bus_dmamap_sync(priv->dmat, sgl->dma_map, op); + DMA_PRIV_UNLOCK(priv); +} + int linux_dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction direction, unsigned long attrs)