From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 61003C7EE2A for ; Wed, 25 Jun 2025 13:19:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F3F3F8D000D; Wed, 25 Jun 2025 09:19:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EC7238D0001; Wed, 25 Jun 2025 09:19:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DB5C28D000D; Wed, 25 Jun 2025 09:19:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id CA7B58D0001 for ; Wed, 25 Jun 2025 09:19:44 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 92896B8A5D for ; Wed, 25 Jun 2025 13:19:44 +0000 (UTC) X-FDA: 83593980288.04.D04F0AB Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf16.hostedemail.com (Postfix) with ESMTP id 0E2E0180012 for ; Wed, 25 Jun 2025 13:19:42 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=N0G3gV+E; spf=pass (imf16.hostedemail.com: domain of leon@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=leon@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750857583; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=VaTVD/mLalAtTgGY4GQNF+mAYuMi86gY31K7sa0UK48=; b=2k3seuj5agCzjFUWnHMx9RgL4jsVcNaoaDLsj5N9jtQPsSlGRkt4BJFzlUaTr+TCpL2g5P 1PIN0JyexTFNH7BVwFrbe0+aieWEVFtK0FXths/s1zVEvzUQQyqZ4b2UX2KV/GtxYR4zTA vEaZzEjEVMf/UBfdtcos1PjGl6Mju1o= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=N0G3gV+E; spf=pass (imf16.hostedemail.com: domain of leon@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=leon@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750857583; a=rsa-sha256; cv=none; b=egFJsNmjzdu76rJJczqXAv6Lc/WhOhJWb60beO0bxgJXFhkXmXwZoPPYK47JineMS+KgdM v5HM0po4UYK9yLratuOuPjFnoQlXDf4O4yRv8YtwOn8gsMjZ50C6zjb2Qu+s/tHf6eLF6a nbXW5vqbr0bdXTwAxo46gevpOBxlPuk= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 88376A52615; Wed, 25 Jun 2025 13:19:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 54036C4CEEE; Wed, 25 Jun 2025 13:19:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750857582; bh=U1ovqnANomb/cEXYdYYeiuP4LQydDqNW/NB4OU1aqgE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=N0G3gV+E4IJhrAeOantpO1cwUDcMsTCEPcIcE6wM9Gm6ZtwQv921RF9CtRTt0u2ST 6zAGA6OPg7exrFGuRKaOuTBaAc3+xMSRRas96RdgU6LBRx9z1AHyuVVAaukNs4jqny w87lOQJxPHyIi2wWXWfNDG/uhOfNvtNKL7VptMtzDVYmgSu8W5Ffhyy3cXRQ8W1qeN RO1pVbaELBUG77Cpm2gj2Kg/KSFIyv8/ESeICwpQFGTpNKAYpx78H9+/4AK7jzqdgM J/dSHbdmM6OAh3JFhCQFo+OhjxQc9meDO5S/8S+hV8AyJv+sp1BqLnSLCmXIbqc8/6 ldPiGE4Zu1Z0A== From: Leon Romanovsky To: Marek Szyprowski Cc: Leon Romanovsky , Christoph Hellwig , Jonathan Corbet , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Robin Murphy , Joerg Roedel , Will Deacon , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Alexander Potapenko , Marco Elver , Dmitry Vyukov , Masami Hiramatsu , Mathieu Desnoyers , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Andrew Morton , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux.dev, virtualization@lists.linux.dev, kasan-dev@googlegroups.com, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 7/8] dma-mapping: export new dma_*map_phys() interface Date: Wed, 25 Jun 2025 16:19:04 +0300 Message-ID: <7013881bb86a37e92ffaf93de6f53701943bf717.1750854543.git.leon@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 0E2E0180012 X-Stat-Signature: fu77kk7bwojes1zuqdki3nx8x4ej1uqr X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1750857582-37032 X-HE-Meta: U2FsdGVkX1+wolf5TPymQdgsQlZoInZjkwfsOGanjiC2LPa4LlXDV9jVKv12TQcMIDO5mlpb2PirVca6PEmsXvFQQU/VhA9fF2Hc7AJICt0lkjk/FVa64+YkE9caRULJNZAecGlwj+pr4gmpA3YNtz+MmfJI0ApOWKXeH0AoEOxmTpnAWDXAa5qQtChlyETzuPQvPHtGgFgj12iJeDWI9oMtiWpZ07+wdLvu6JRrDFITtNG8Lk9gHaHgGU0iWf2aNGV5j0Z6OXPXdGvEWHCjzD1MFyn7BHJ/BZ5zi1Dslnd3jpDHQCoCmEUKgcQJm1JfQILmITp4v1RJMUp/k84p9Q+eMn7LRwHw0Re+QVI9ocNk2321vMk2/w31VUqnMxjpsyiL0svv1SCxLqYEbdAosjtLnmRfypIoa/K6zufdp9XsPAUa5/7nZ8AsioJaQRo44Q9ot41jKN6E7Y1oXsq202wp9vsj1rGjrxNSZYYjihPIh2ZJ+X5IfWTcnAwSUlZR2Whb6XoySAx9G9uQk9uzoJ3zMUoM75/MgeEnDRZvTCb3XzAG/x+2zwQqt+z8rjdbwDtzfnA3uVnnP1UyTgq2wOySfDjnHdSPBdrWsgpfCkHLjYHascfs+H73UKCSXhf/66i8cLRBuw7pVecQvK2gZa3Pb2Vh4rFc9tOQzG9tGmPj7U+bUAp/ngZnJpGOqkRX9l0seGu1oQztzCcnPVICOi7n/w2ILm8/xFfIIbINEQOBVRILR5QsZFLudDggT0888HcMgGE9FIrOxST6D9ZN1fA7mFNbsp9pr7jKwiayGeOk6NeaYXvRYfauAT4+uvnuDNPsaI0r7pjKZrxMxbaV3sL+nMAsw6U8HpRhXDlF5tXGmvDUqeC4in2NcSoNgw9XyAHsyxdjJ2guKqEJ7Kkd2rraGt3F6VzzRsmWUM4CN406fzSQN0btK4f1MC7/Cb4zN2zdzH8/WGpCJz4UdDm 9ccY45yq dp0pRwncLsCPM4I3ZS++IvHXhFS4LOq1ggSzTALzccpUnzTykiGRQwLruP8A3qI1/6RJUmJcqEdNiZksaosj2eAufnxfZsGuum43LyzlQBiHe3i3WoRVFYqmPEDD+IS7/33DBfPm+YpBWD5BlkfGgy2e84BA3Jxe+yt8Hkk/ld5cYp2O3Z0BobSCctMrSnK2MpyzLrkpwwIZYQtNOIlBmzPMJFJhb3HARaBglGttNNrpnC2EWJGL1wWTX9sPHs2zvsrDPKkmf9/kxiXGF3DOD+zpXjg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Leon Romanovsky Introduce new DMA mapping functions dma_map_phys() and dma_unmap_phys() that operate directly on physical addresses instead of page+offset parameters. This provides a more efficient interface for drivers that already have physical addresses available. The new functions are implemented as the primary mapping layer, with the existing dma_map_page_attrs() and dma_unmap_page_attrs() functions converted to simple wrappers around the phys-based implementations. The old page-based API is preserved in mapping.c to ensure that existing code won't be affected by changing EXPORT_SYMBOL to EXPORT_SYMBOL_GPL variant for dma_*map_phys(). Signed-off-by: Leon Romanovsky --- include/linux/dma-mapping.h | 13 +++++++++++++ kernel/dma/mapping.c | 25 ++++++++++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 55c03e5fe8cb..ba54bbeca861 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -118,6 +118,10 @@ dma_addr_t dma_map_page_attrs(struct device *dev, struct page *page, unsigned long attrs); void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs); +dma_addr_t dma_map_phys(struct device *dev, phys_addr_t phys, size_t size, + enum dma_data_direction dir, unsigned long attrs); +void dma_unmap_phys(struct device *dev, dma_addr_t addr, size_t size, + enum dma_data_direction dir, unsigned long attrs); unsigned int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, unsigned long attrs); void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, @@ -172,6 +176,15 @@ static inline void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs) { } +static inline dma_addr_t dma_map_phys(struct device *dev, phys_addr_t phys, + size_t size, enum dma_data_direction dir, unsigned long attrs) +{ + return DMA_MAPPING_ERROR; +} +static inline void dma_unmap_phys(struct device *dev, dma_addr_t addr, + size_t size, enum dma_data_direction dir, unsigned long attrs) +{ +} static inline unsigned int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, unsigned long attrs) diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c index 74efb6909103..29e8594a725a 100644 --- a/kernel/dma/mapping.c +++ b/kernel/dma/mapping.c @@ -152,12 +152,12 @@ static inline bool dma_map_direct(struct device *dev, return dma_go_direct(dev, *dev->dma_mask, ops); } -dma_addr_t dma_map_page_attrs(struct device *dev, struct page *page, - size_t offset, size_t size, enum dma_data_direction dir, - unsigned long attrs) +dma_addr_t dma_map_phys(struct device *dev, phys_addr_t phys, size_t size, + enum dma_data_direction dir, unsigned long attrs) { const struct dma_map_ops *ops = get_dma_ops(dev); - phys_addr_t phys = page_to_phys(page) + offset; + struct page *page = phys_to_page(phys); + size_t offset = offset_in_page(page); bool is_pfn_valid = true; dma_addr_t addr; @@ -191,9 +191,17 @@ dma_addr_t dma_map_page_attrs(struct device *dev, struct page *page, return addr; } +EXPORT_SYMBOL_GPL(dma_map_phys); + +dma_addr_t dma_map_page_attrs(struct device *dev, struct page *page, + size_t offset, size_t size, enum dma_data_direction dir, + unsigned long attrs) +{ + return dma_map_phys(dev, page_to_phys(page) + offset, size, dir, attrs); +} EXPORT_SYMBOL(dma_map_page_attrs); -void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size, +void dma_unmap_phys(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs) { const struct dma_map_ops *ops = get_dma_ops(dev); @@ -209,6 +217,13 @@ void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size, trace_dma_unmap_phys(dev, addr, size, dir, attrs); debug_dma_unmap_phys(dev, addr, size, dir); } +EXPORT_SYMBOL_GPL(dma_unmap_phys); + +void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size, + enum dma_data_direction dir, unsigned long attrs) +{ + dma_unmap_phys(dev, addr, size, dir, attrs); +} EXPORT_SYMBOL(dma_unmap_page_attrs); static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, -- 2.49.0