From nobody Fri Feb 27 02:29:26 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 4fMXMp6w0Rz6T7fK for ; Fri, 27 Feb 2026 02:29:26 +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" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fMXMp5hbGz40bk for ; Fri, 27 Feb 2026 02:29:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1772159366; 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=EIKHa518uwXbkKEtXnYFMV8wJnLPO7G4lKuhcAAnKcE=; b=mtXB3E/3/9J8CQTNQPtRa0qCC0gcHiWRZdF302aONZ6BjL4694WAy+krLMGMYX5R6O++XW 6aGCyzPGpBRXQWGxKQB2fmN03d9pcWvvz5s6uYnS+jBKNhhxzLVjwe9bNy3uA8S5wFHp5Q jTuh2JaZTq4aUVHJUcgcLOFH1B15zlggPk+ExOIvoAROjqKShkdNujQIz6mLsJ2hssuXzZ 4DcWm0DK+kVv7ndZUSTzJ2G4+GpUAulSYU9gFpODPnarEHW1+tYDAYR7KXbmFrPq3rIEpQ YYh1q5I2fVb0csYqrZZfGla+yLjO//yiySr83x3b1ecPLSWN+KoptwUH40BAkQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1772159366; a=rsa-sha256; cv=none; b=MaQrRfBL4WVGtSMuEp8auROeZFaak3Cy9X8uHqh6Mu0rB9BdxxqGH2GXXHuPIqRJPoy/FN OpmfAtuiU4DCuxLtb29v1U1RyfNF0D7jvAM3c2AogEbn5N3VaWQGkbv+NXQLl1KhtTG8tE O4gMYetZl8+KU9y4nY3ZNcTwt0u++9qxfBonen5J06z+jnHC88omBTFhWkl8/E3x0mHed0 aN3vQaPEXkZ3yb4zvq3c0QmCiROAhoK/0Hfii9h/Uyfsv25NpBP7fkfMvfXzOg7MNoJCrj JcYINzG/zcmnk9Hh9I8uQOqJVIUtGbxNWeDPWyoj2yw3XxIyYrhnmkvr4Nk73w== 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=1772159366; 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=EIKHa518uwXbkKEtXnYFMV8wJnLPO7G4lKuhcAAnKcE=; b=wATxOpw4B48m+gbE6A0/835tkyoImdPzn+lJ//PHi07lfZyhX//vK9ys1d+/5qh9JJImCz VBwG3FP3zOP8cYMXLesxjMt1DqX5+YS+mxPUpf6sOdzzld6/1BPVbAk4T/MU+YczbP/k96 JMDronIlKNAWuAFlFazDGBxwQXxmWbohtu+NVPBcomD/AV5NdRHTrV4JR27F3MSF0ryiqB j+Pazbv0d4JC1782Xg7VWZJNqMq2BGWmnWYlPlMFjcE/IWp8o/rzmFsOTYMdTjmTK8RG0V SbGHN865FZNdabunsKm/M1kO3mrjYab3xmU6RMXyFh/SNUf1Vpv9mbKA305Dcg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fMXMp5C39zyGm for ; Fri, 27 Feb 2026 02:29:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1ece0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 27 Feb 2026 02:29:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Bjoern A. Zeeb Subject: git: bd5301f27899 - stable/15 - LinuxKPI: implement dmam_free_coherent() 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: bz X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: bd5301f278993fc1c661f071b4148a7f7fc3e5f3 Auto-Submitted: auto-generated Date: Fri, 27 Feb 2026 02:29:26 +0000 Message-Id: <69a10186.1ece0.63a1e0b7@gitrepo.freebsd.org> The branch stable/15 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=bd5301f278993fc1c661f071b4148a7f7fc3e5f3 commit bd5301f278993fc1c661f071b4148a7f7fc3e5f3 Author: Bjoern A. Zeeb AuthorDate: 2026-01-21 13:57:55 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-02-26 22:59:32 +0000 LinuxKPI: implement dmam_free_coherent() dmam_free_coherent() is used by an updated mt76 driver at v6.19-rc6. We need to surgically find the devres information and destroy it before calling dma_free_coherent. Sponsored by: The FreeBSD Foundation Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D54810 (cherry picked from commit 0a575891211eff545bab1e4de5e2b7adf4a4c1da) --- .../linuxkpi/common/include/linux/dma-mapping.h | 9 ++++++ sys/compat/linuxkpi/common/src/linux_pci.c | 36 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/sys/compat/linuxkpi/common/include/linux/dma-mapping.h b/sys/compat/linuxkpi/common/include/linux/dma-mapping.h index 2d8e1196d3d3..76efbfd51074 100644 --- a/sys/compat/linuxkpi/common/include/linux/dma-mapping.h +++ b/sys/compat/linuxkpi/common/include/linux/dma-mapping.h @@ -96,6 +96,8 @@ void *linux_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag); void *linuxkpi_dmam_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag); +void linuxkpi_dmam_free_coherent(struct device *dev, size_t size, + void *addr, dma_addr_t dma_handle); dma_addr_t linux_dma_map_phys(struct device *dev, vm_paddr_t phys, size_t len); /* backward compat */ dma_addr_t lkpi_dma_map_phys(struct device *, vm_paddr_t, size_t, enum dma_data_direction, unsigned long); @@ -181,6 +183,13 @@ dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, kmem_free(cpu_addr, size); } +static inline void +dmam_free_coherent(struct device *dev, size_t size, void *addr, + dma_addr_t dma_handle) +{ + linuxkpi_dmam_free_coherent(dev, size, addr, dma_handle); +} + static inline dma_addr_t dma_map_page_attrs(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction direction, unsigned long attrs) diff --git a/sys/compat/linuxkpi/common/src/linux_pci.c b/sys/compat/linuxkpi/common/src/linux_pci.c index fb3f648df496..cf8a6ffeb46c 100644 --- a/sys/compat/linuxkpi/common/src/linux_pci.c +++ b/sys/compat/linuxkpi/common/src/linux_pci.c @@ -1796,6 +1796,42 @@ lkpi_dmam_free_coherent(struct device *dev, void *p) dma_free_coherent(dev, dr->size, dr->mem, *dr->handle); } +static int +lkpi_dmam_coherent_match(struct device *dev, void *dr, void *mp) +{ + struct lkpi_devres_dmam_coherent *a, *b; + + a = dr; + b = mp; + + if (a->mem != b->mem) + return (0); + if (a->size != b->size || a->handle != b->handle) + dev_WARN(dev, "for mem %p: size %zu != %zu || handle %#jx != %#jx\n", + a->mem, a->size, b->size, + (uintmax_t)a->handle, (uintmax_t)b->handle); + return (1); +} + +void +linuxkpi_dmam_free_coherent(struct device *dev, size_t size, + void *addr, dma_addr_t dma_handle) +{ + struct lkpi_devres_dmam_coherent match = { + .size = size, + .handle = &dma_handle, + .mem = addr + }; + int error; + + error = devres_destroy(dev, lkpi_dmam_free_coherent, + lkpi_dmam_coherent_match, &match); + if (error != 0) + dev_WARN(dev, "devres_destroy returned %d, size %zu addr %p " + "dma_handle %#jx\n", error, size, addr, (uintmax_t)dma_handle); + dma_free_coherent(dev, size, addr, dma_handle); +} + void * linuxkpi_dmam_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag)