From nobody Sun Sep 06 00:14:03 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 4hcrKS1zq9z6rMn4 for ; Sun, 06 Sep 2026 00:14:04 +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 4hcrKR6zWTz3JgB for ; Sun, 06 Sep 2026 00:14:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788653644; 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=6REQH7zTagY9B7ZNg9BR5y+hxzGJ23o+S7VqSs37vN4=; b=AlG7SmazWuKuVTcY+KdZ24sBks0HRA4RQ9YxGcL6mZWlPd21o043hm0jDGmw4gOOiLfgYe 3XOSrVLW5uje0QWbuXJq4vZu+BMpza8TjdIwP4Lr2/PIOU8YiU3usT2uq/4uc0KSDrvpY7 vW5kC5JWfb7wu8r8qiJCxzOPfTTbC8aUdTl/PBL6EhuxuZnWOH+h5AqfMqYdCdIc0Xv08Y CJTbZlJqvpRYdgHHo2/2OrL4E36NYFB1fSL3IKNAbOiGyRcJO2PDsVt/EZoN7wk4pNdzWz ybbYMC/zfSa1mYOs6d+Ewr65lWWWcUgy4gLGSmhKkpECLimHnUgDvhSwKJdC2g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788653644; a=rsa-sha256; cv=none; b=TfUp1M7lxVGs+7i8Y8AxALSK7sNx/527D1zUCIyviMtV+ykPq9pL3uHD7W04Ox1qrAzTuk wLWNMEZEy0UCQWaZLKzS1ZOmeD9IPni/XFfF+RKAj6QdCvt7ObXVop0MjXFs165+UiOu5L +CeaVtm2jITIh/TrYB3ZoFIjeBDduCDLsb7WmQWmlNHC0zLa6eMk+gmdIHVw2zWvP9TesX OcRbe839EKhYc5KGggkXIA+EHOoHaHJMSS5PdRv1DAX7E7Vustg/fG3t7NSAQVlViPEuSp iONXVOCRWBKehw1xLnn8v1xHflpn/EuVYObe6kI5lRcrm1FXWyxNsB2aTRAJkw== 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=1788653644; 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=6REQH7zTagY9B7ZNg9BR5y+hxzGJ23o+S7VqSs37vN4=; b=ubsENwMx79B05qTYMFhgRQVh1dDtfkT1QK/hOfAr1G3hUejmIoTEXLl2F+WocE4sIJUnSw uTQAxha7+vurRyyYOyP/T/OR+0AZfkkMoWCV/PyXoUYT9GCNAJt61Qd1Yu/u1rNKhcp63d sAumFHXlwUIJNf7xhC9ZZdaXSZTGMWNzrMSq4Fz03Xx4vN2tRJ9Qdhe6fc2GVbmIBJIdoV 1r9HwMVGUEWF3HVAwsFIm/W+IvhNKK8osDPX2Lso8Gy29n12df7R/pkImHLtObJ60TjJCo 2Tcna0Y2KmGcfe9X8hdCIFFLOl82/ozBjkt/2+MrqKlJF7+tIoW4YzL9P6D7HQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hcrKR5mnNz16mc for ; Sun, 06 Sep 2026 00:14:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 258fc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 06 Sep 2026 00:14:03 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Zishun Yi From: Bjoern A. Zeeb Subject: git: 9dec0cd79c69 - main - LinuxKPI: implement dma_sync_sg_for_{cpu, device}() 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: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9dec0cd79c693951fc58d82a99918fc5a02cbcd0 Auto-Submitted: auto-generated Date: Sun, 06 Sep 2026 00:14:03 +0000 Message-Id: <6a9cb04b.258fc.e143aad@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=9dec0cd79c693951fc58d82a99918fc5a02cbcd0 commit 9dec0cd79c693951fc58d82a99918fc5a02cbcd0 Author: Zishun Yi AuthorDate: 2026-09-05 20:05:39 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-09-06 00:12:48 +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 MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D57766 --- .../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 ce0703bd7999..e7589056ae46 100644 --- a/sys/compat/linuxkpi/common/include/linux/dma-mapping.h +++ b/sys/compat/linuxkpi/common/include/linux/dma-mapping.h @@ -121,6 +121,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) @@ -307,21 +308,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 9e11f53cb299..44082e6ecaa6 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)