From nobody Sun Jan 25 12:35:52 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 4dzWNn4D8pz6PT4F for ; Sun, 25 Jan 2026 12:35:53 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dzWNm52TFz3n40 for ; Sun, 25 Jan 2026 12:35:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769344552; 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=joqJpq6wlwvHjRJ0crzwoMT0j+PVj+NIVNinaargoC0=; b=s8yABpA6lwNvWwjcBjnSMfuNZjq0ia6wSYBVV+l+7qzL2CBfQy7nb9hflPTkEtAvBiZ2VD b2afQG1GB1ltZ1khjuQ2HNfMHs/fTXvekwgB5CITjeHEvB+azKRDAYUuT7/e8pveWWKQD0 HabRKAtRVa+nbT/XWmnT5/g2uCoeOhvMSDKmaj2uhmi+E9hJtJJ+ld4YW5QE8PWXB5TFgh lcad3n1oQWBnR8UyKMZertvGwPDttv1Rs3Uq6pkemWGNtVTCkPh7tPqcCT0/XHL/VHo9/g iW7uIc7gCMPBjwEhWQh0wQOV9R2IcL6pEZgAPGx23sJC8h5u5wqK2GtdhUtiNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769344552; 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=joqJpq6wlwvHjRJ0crzwoMT0j+PVj+NIVNinaargoC0=; b=jcxX6gkW5holcwVyMadKeB10eIqdA9jmieulVd5iqnoDrCN3u/migld9y8IVkrzImWB6yD rOuGjT/5U4OsAvYiAZrRtU9MvHwJD6oBxPLFpw7J6sZuKdaDFwnGnEy/U0mP+9vZ37rrvG xrseC5CQXX4AwFUr8NbqSubGRhClnAu/Gw3zGLP6ZIBzgw2xYiJri5ucshoNBcoVoEG3za EQPRZJ5SVUpnqEduUSEPgaOsdJ3VfdrhHB8dZ2wUFgkL4+ZB+Ygh4KWudwn1CD7CIFQ2gI v+G8JM0Tpt6EKb+Gm3MgDKykNRbv+utxJ4n4CKT2VNzVaM1e1BLsE+XU/Td3Sg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1769344552; a=rsa-sha256; cv=none; b=NXSkOH+bhMHGzjBVeySZmjB7z5BP6guRJ3VgrbzxxhsZEO5PYfNaL+kolC7rw115qHQ5v7 B1yORF5IEz7+rABdDv03B8mSBewl3PJcbhxC7Z5XvgCFC4xP4H3j6tz2CkHlOYP3n9kbU0 gI9QrY4/MrFOuAzhTQps7h8IM6u7f/fpD3V7OlkTVHwkQ6ZJynXg26G2k/dgsgveI04BKq codP2GZoZWHqCM7ZT7v3tS7+tiDd50/Dk14hCkXVbPpZzkIIv6u5z8wvpcBTdkXASZL8gO JWkMjveBRlUBuYUpZDaCXyeBSf3k44i7jd+iGyAVvAeDQmIRYnYK7WcUpd4phw== 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 4dzWNm4dXNzbD7 for ; Sun, 25 Jan 2026 12:35:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46e2a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 25 Jan 2026 12:35:52 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 0a575891211e - main - 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/main X-Git-Reftype: branch X-Git-Commit: 0a575891211eff545bab1e4de5e2b7adf4a4c1da Auto-Submitted: auto-generated Date: Sun, 25 Jan 2026 12:35:52 +0000 Message-Id: <69760e28.46e2a.6a0eb8d@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=0a575891211eff545bab1e4de5e2b7adf4a4c1da commit 0a575891211eff545bab1e4de5e2b7adf4a4c1da Author: Bjoern A. Zeeb AuthorDate: 2026-01-21 13:57:55 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-01-25 12:35:22 +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 MFC after: 3 days Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D54810 --- .../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 df5255d8a6ca..9e4fad45433a 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)