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 10B3CE6B240 for ; Fri, 1 Nov 2024 11:06:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 923AF6B007B; Fri, 1 Nov 2024 07:06:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8D3BC6B0082; Fri, 1 Nov 2024 07:06:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 79B3D6B0083; Fri, 1 Nov 2024 07:06:31 -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 5B6586B007B for ; Fri, 1 Nov 2024 07:06:31 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 13CEE81B7A for ; Fri, 1 Nov 2024 11:06:31 +0000 (UTC) X-FDA: 82737245850.20.646E836 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf20.hostedemail.com (Postfix) with ESMTP id 6DDF91C0002 for ; Fri, 1 Nov 2024 11:05:54 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=CTwdqT2l; spf=pass (imf20.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=1730459107; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ptRUarOmNXICaIbCBIPc7XK0gmaouhBlqEQZ7/bssJA=; b=NpplMowhqac1EIcu0zxmsyvt/McwMKzdJMRjErR6YXlPTGdv6rx78r6NBSmFHbio986Nqp HHiCqsvSw3EBUFNvFisL07KaaIzmmqyjbk9oh7xK6CzUvNnBIHUYCULZyXeqTDbrxV5R85 bq4CLOxyIRS46nvVbkagxPkJk6CkBtg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730459107; a=rsa-sha256; cv=none; b=WkIAiQ9EFEQk7f0vqjF6+gipGJQVuDVjqqNKM5grl6dCZxhTBenEa9adDu35zhFDgzQM3f /IXJ0iIHNkniR7727vKXWKqrPk0h7Ey7UGnl/W4A2I9ZzHbJmXJf3+tYvyOxOIg7WIEEHU Vmb3BOQdRF4MC74c7VdoB6enqyAhQAk= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=CTwdqT2l; spf=pass (imf20.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 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 0FCB1A406CC; Fri, 1 Nov 2024 11:04:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 71C58C4CECD; Fri, 1 Nov 2024 11:06:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1730459188; bh=4cdN8oppOPWY/v1yFlCvkKvAwOHnBpBM0oBxJMPVYLk=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=CTwdqT2l5uk5gwpVRS10I7uPpizsb/hBcBKWekYNb0/1/xyMQmvvfagsufSNIp0+H St+9WxVL8pwKleCrfHfZOuVkWSULd6MySOeEWfvsCSV0bHUjeaV4Ap2L+3O8raqwIS p8YZpzpRR2xY/A6EMSIL/RHlUwRsD/PxD5D4If7Zj2eoCfoQV5qXib+WWg4KhvHw2Z saicJOq/ogsv1rxc7raI5JADLpXusjkRSrgZdWf1j6772wyPuX/i0FTrFjRY3w286B PjBi7Ma3lUD9gnl/JBiWlvccuEDx1UcX9zpXWH1OJeH3wNcgUidQmhlFlXz687wucc p44pH3kVnbTcg== Date: Fri, 1 Nov 2024 13:06:22 +0200 From: Leon Romanovsky To: Robin Murphy Cc: Jens Axboe , Jason Gunthorpe , Joerg Roedel , Will Deacon , Christoph Hellwig , Sagi Grimberg , Keith Busch , Bjorn Helgaas , Logan Gunthorpe , Yishai Hadas , Shameer Kolothum , Kevin Tian , Alex Williamson , Marek Szyprowski , =?iso-8859-1?B?Suly9G1l?= Glisse , Andrew Morton , Jonathan Corbet , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-rdma@vger.kernel.org, iommu@lists.linux.dev, linux-nvme@lists.infradead.org, linux-pci@vger.kernel.org, kvm@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH v1 08/17] dma-mapping: add a dma_need_unmap helper Message-ID: <20241101110622.GD88858@unreal> References: <00385b3557fa074865d37b0ac613d2cb28bcb741.1730298502.git.leon@kernel.org> <7e362d8b-c02a-4327-9c5d-af1c4725ddc7@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7e362d8b-c02a-4327-9c5d-af1c4725ddc7@arm.com> X-Rspamd-Server: rspam10 X-Stat-Signature: dhki53zzzm3ent1wx9njp7ms7qjwg4dd X-Rspamd-Queue-Id: 6DDF91C0002 X-Rspam-User: X-HE-Tag: 1730459154-78732 X-HE-Meta: U2FsdGVkX1/+IOLgYRe+MXLFplWH+apoEbQYio7o8XKbYWTkaimhl7l3djYRpuKDSrGEwQOFdBRHVgtiAgXOLr29dABhumQUnGkqGc89j0o+Wj/YKJvk6LPLYV7olyqKu7md3AfguKI9oi2dNKVE4rMVGvw10MFq5RdE6LYLaNtW/SSrNxdV0tgNTJn88XTgT2jVsvnm3ayugtOgwaTd/COYPINIDJLx9jat0BU3kDRXoaKBtBSztMlOpMsAHkODixC8/vs5lA0r3siIC3rAyC4AfiujIpmi82WjeGKczRTwV+7R2yBKuiTyhepTZ/ApBeLUJyJMrTnyKLWyEOoIpBLU9S8ApEDoOS/ubKGs/0rtonvquX6/pGYwOf3h0PYjIljAuagDXvn8ug42sw0yp5MgNeqp9g8zAhglJZHsN3GepT1Ko4VKkKOtFi2YQ7m90Yck84kRRCcuQepjYLk2ngAdOKJnPNN9S0kSubTQd9Nnyu7wd73oGZYqWP0N/8mbl1WsHihtL+bcVTRKI0P1+LXubdO2DqAVkpsVEiUSeF97Zb2UDWbiN31AUhtMdivb0wkFah5y0fDRKbKAp9DEpW4CKNSz1J0XIH+ku78UI5v/1/kh0jISLhwVTAJuN43PyAml62EtcwH1ODAIaCniJsYHEgZI3Kzg9ivbxrNMwqdtAP4ydui4i5FtIAZydM56H/IHW6dFEaTcthVJ3w81HmbRqpEXKoGDo2nvEiuRED/N4ssTvKcZUi8B1zd7C6JJz91axDM/hV98LSHWCAPdsUboHDsZNJZm/acoQ6jIXwBbr0wVN23xWBWcnfZjBaU/TLVsJRnqr29aSq5da/9Ej+7o0ewFHdaw1OxoksguGoC9MkNtOiflRX//mLI5x4yPf1hvs7dKfJkLmNF9/iLY6JjWW9+IwAAmpw4eVo/JVV5ZstYg1boWFeHsWZHjDGTdN/jkqS5LQukBHRqqDwe wytw6kuX 8UY4IWAM6wq8yDE8DijYRTmmewAsicR5gU9g56UTy0ocW5H5M1OzJLj3ABuD4Z5jGiPSPqKsxUYxBV2iza8MlpMF97y/Bboq9MX024GultfG0GrinSjcDQYhi2NZhc4flUPiFIx0Lh0UWRHWrqJ7a14ZftCU+RrPPXUb1DAOld/LihTYV/cQ8Pcxfctjfo68m0IKhT1DunDM549MzM0vQL7vPSv8FyCJQacqOs8sc2sxNyF5+U9t4+RPsZjX/Gj5dqeCteg2Odykp/IFUSbWdfWi40mcVSmFyqTxNUIGu0uBDnubNRiDO6jJXGhm6yd7RhtZx 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: On Thu, Oct 31, 2024 at 09:18:11PM +0000, Robin Murphy wrote: > On 30/10/2024 3:12 pm, Leon Romanovsky wrote: > > From: Christoph Hellwig > > > > Add helper that allows a driver to skip calling dma_unmap_* > > if the DMA layer can guarantee that they are no-nops. > > > > Signed-off-by: Christoph Hellwig > > Signed-off-by: Leon Romanovsky > > --- > > include/linux/dma-mapping.h | 5 +++++ > > kernel/dma/mapping.c | 20 ++++++++++++++++++++ > > 2 files changed, 25 insertions(+) > > > > diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h > > index 8074a3b5c807..6906edde505d 100644 > > --- a/include/linux/dma-mapping.h > > +++ b/include/linux/dma-mapping.h > > @@ -410,6 +410,7 @@ static inline bool dma_need_sync(struct device *dev, dma_addr_t dma_addr) > > { > > return dma_dev_need_sync(dev) ? __dma_need_sync(dev, dma_addr) : false; > > } > > +bool dma_need_unmap(struct device *dev); > > #else /* !CONFIG_HAS_DMA || !CONFIG_DMA_NEED_SYNC */ > > static inline bool dma_dev_need_sync(const struct device *dev) > > { > > @@ -435,6 +436,10 @@ static inline bool dma_need_sync(struct device *dev, dma_addr_t dma_addr) > > { > > return false; > > } > > +static inline bool dma_need_unmap(struct device *dev) > > +{ > > + return false; > > +} > > #endif /* !CONFIG_HAS_DMA || !CONFIG_DMA_NEED_SYNC */ > > struct page *dma_alloc_pages(struct device *dev, size_t size, > > diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c > > index 864a1121bf08..daa97a650778 100644 > > --- a/kernel/dma/mapping.c > > +++ b/kernel/dma/mapping.c > > @@ -442,6 +442,26 @@ bool __dma_need_sync(struct device *dev, dma_addr_t dma_addr) > > } > > EXPORT_SYMBOL_GPL(__dma_need_sync); > > +/** > > + * dma_need_unmap - does this device need dma_unmap_* operations > > + * @dev: device to check > > + * > > + * If this function returns %false, drivers can skip calling dma_unmap_* after > > + * finishing an I/O. This function must be called after all mappings that might > > + * need to be unmapped have been performed. > > In terms of the unmap call itself, why don't we just use dma_skip_sync to > short-cut dma_direct_unmap_*() and make sure it's as cheap as possible? >From what I see dma_skip_sync is not available when kernel is built without CONFIG_DMA_NEED_SYNC. > > In terms of not having to unmap implying not having to store addresses at > all, it doesn't seem super-useful when you still have to store them for long > enough to find out that you don't :/ Why? The decision if DMA addresses are needed is taken when allocating relevant arrays, before we have any DMA address to store. If we know that we don't need to unmap, we can skip allocation of the array for free. So what and when "you still have to store them"? Thanks > > Thanks, > Robin. > > > + */ > > +bool dma_need_unmap(struct device *dev) > > +{ > > + if (!dma_map_direct(dev, get_dma_ops(dev))) > > + return true; > > +#ifdef CONFIG_DMA_NEED_SYNC > > + if (!dev->dma_skip_sync) > > + return true; > > +#endif > > + return IS_ENABLED(CONFIG_DMA_API_DEBUG); > > +} > > +EXPORT_SYMBOL_GPL(dma_need_unmap); > > + > > static void dma_setup_need_sync(struct device *dev) > > { > > const struct dma_map_ops *ops = get_dma_ops(dev); >