From nobody Fri Feb 27 02:29:26 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 4fMXMq2BWTz6T7fN for ; Fri, 27 Feb 2026 02:29: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" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fMXMp6tLWz40S8 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=1772159367; 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=FSUdXZipUI7jMSM+otbKz9QMSGl4JCVx7C0fCWgpr3k+nIwRkpPZwuUSIV7kThChluGJ0b c5KEYmdsucncEPrO7ogE/OFqJgn/S2QGbxYQBLyFvCSV0FXAKv8aLcpKVzRJfrpU5mrlVj Ze3Xs/x9ND8uDrs+ISun63tVDtRmljEpnpXr6kAKKe2ClFLvtKF6Ag2trs5I6anz/LgEcw WoCP0IAmxLPSz3WaGEA1Ps8DCXh4oeHzp89wnaXpplFtWPWmdYgUIzDlVSpWG17YdAfl/r PNh2EqONevn3M0D2UO+4EX8/8qcGzJF8ncEcrA4c4fE8Sv1yVnYkSUKUk8qamQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1772159367; a=rsa-sha256; cv=none; b=oKIwmFPkpGneGTKHBMkvehT9vCvGGFnATNTue1wgEcHvNaCPZsnhNRedafsHJqn7vAb0Jn ALlxUD88YxIhfnawo5jPeK5SKXSHxAzvLuSL51YOo/cntQfQCKOrXSwVKZNxyr9S9KkdOJ ymvZAchdUJ+1rZ28rH/H8H3YCGQfgwI4T+c4CEBzKnCI/WabJQIxW+laOPaF2bVPIhIgDy NXvc4OEv3CT2/IDFGdPkypD5QtqP/WFDJXtwNUg+PFyvn9ZwSk5jsMYfaInkA1lDhYrVDY fIozDoZwHr2Uxo75NUY/AA641k9Ruvh4DfYNPQiwSQOWTwf78NCjYxRVrFAVZw== 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=1772159367; 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=RtKSLZQX6x5Nr1d0tIzHbstUlVhu3FE5VKZyionowdWKSrnqHMTzqfn2R1ReUoOKMJ5/Qc BdDu5gbmtrMMyM1KbGXGJstZqA/1k9V9yLwlZbFPOKITmqrhDsQpoIxVkv9TblXcv++XzE djKUTzNFO6v7tmVrfjyHqi+JgmR4wFFi/XycOOzdR9fVMrn5+qBl8NkwUWJ9tKKJ9JMegx og9/LhlNF4XIZrc7MipDYyiwWq+uuqtUi+SWP7FrTvuxTJHCE+Y3ejnSQZrJ4a2Yj+lRHk vQXZNMDi6Wi4IFUJVXL+Ib4OmJonHHRydKsdfRBXJwl5yAYYaO2q+lvltqMo+g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fMXMp5ChfzyHm 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: 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 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)