Netdev Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Tomasz Figa <tfiga@chromium.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
Joonyoung Shim <jy0922.shim@samsung.com>,
Seung-Woo Kim <sw0312.kim@samsung.com>,
Kyungmin Park <kyungmin.park@samsung.com>,
Ben Skeggs <bskeggs@redhat.com>, Pawel Osciak <pawel@osciak.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Matt Porter <mporter@kernel.crashing.org>,
"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
Joerg Roedel <joro@8bytes.org>,"
<iommu@lists.linux-foundation.org>,
Tom Lendacky <thomas.lendacky@amd.com>,
alsa-devel@alsa-project.org,
linux-samsung-soc <linux-samsung-soc@vger.kernel.org>,
linux-ia64@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-parisc@vger.kernel.org,
Linux Doc Mailing List <linux-doc@vger.kernel.org>,
nouveau@lists.freedesktop.org,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-nvme@lists.infradead.org, linux-mips@vger.kernel.org,
linux-mm@kvack.org, netdev@vger.kernel.org,
"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
Joerg Roedel <joro@8bytes.org>,"
<linux-arm-kernel@lists.infradead.org>,
Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: Re: [PATCH 19/28] dma-mapping: replace DMA_ATTR_NON_CONSISTENT with dma_{alloc, free}_pages
Date: Wed, 19 Aug 2020 17:03:52 +0200 [thread overview]
Message-ID: <CAAFQd5Bbp-eAVKS1MKS8xtrT4ZoOmBPfZyw9mys=eOmDb6r8Lw@mail.gmail.com> (raw)
In-Reply-To: <20200819065555.1802761-20-hch@lst.de>
Hi Christoph,
On Wed, Aug 19, 2020 at 8:57 AM Christoph Hellwig <hch@lst.de> wrote:
>
> Add a new API to allocate and free pages that are guaranteed to be
> addressable by a device, but otherwise behave like pages allocated by
> alloc_pages. The intended APIs to sync them for use with the device
> and cpu are dma_sync_single_for_{device,cpu} that are also used for
> streaming mappings.
>
> Switch all drivers over to this new API, but keep the usage of the
> crufty dma_cache_sync API for now, which will be cleaned up on a driver
> by driver basis.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> Documentation/core-api/dma-api.rst | 68 +++++++++++------------
> Documentation/core-api/dma-attributes.rst | 8 ---
> arch/alpha/kernel/pci_iommu.c | 2 +
> arch/arm/mm/dma-mapping-nommu.c | 2 +
> arch/arm/mm/dma-mapping.c | 4 ++
> arch/ia64/hp/common/sba_iommu.c | 2 +
> arch/mips/jazz/jazzdma.c | 7 +--
> arch/powerpc/kernel/dma-iommu.c | 2 +
> arch/powerpc/platforms/ps3/system-bus.c | 4 ++
> arch/powerpc/platforms/pseries/vio.c | 2 +
> arch/s390/pci/pci_dma.c | 2 +
> arch/x86/kernel/amd_gart_64.c | 2 +
> drivers/iommu/dma-iommu.c | 2 +
> drivers/iommu/intel/iommu.c | 4 ++
> drivers/net/ethernet/i825xx/lasi_82596.c | 13 ++---
> drivers/net/ethernet/seeq/sgiseeq.c | 12 ++--
> drivers/parisc/ccio-dma.c | 2 +
> drivers/parisc/sba_iommu.c | 2 +
> drivers/scsi/53c700.c | 8 +--
> drivers/scsi/sgiwd93.c | 12 ++--
> drivers/xen/swiotlb-xen.c | 2 +
> include/linux/dma-direct.h | 5 ++
> include/linux/dma-mapping.h | 29 ++++++++--
> include/linux/dma-noncoherent.h | 3 -
> kernel/dma/direct.c | 51 ++++++++++++++++-
> kernel/dma/mapping.c | 43 +++++++++++++-
> kernel/dma/ops_helpers.c | 35 ++++++++++++
> kernel/dma/virt.c | 2 +
> sound/mips/hal2.c | 20 +++----
> 29 files changed, 254 insertions(+), 96 deletions(-)
>
Thanks for the patch. The general design looks quite nice, but please
see my comments inline.
> diff --git a/Documentation/core-api/dma-api.rst b/Documentation/core-api/dma-api.rst
> index 90239348b30f6f..047fcfffa0e5cf 100644
> --- a/Documentation/core-api/dma-api.rst
> +++ b/Documentation/core-api/dma-api.rst
> @@ -516,48 +516,53 @@ routines, e.g.:::
> }
>
>
> -Part II - Advanced dma usage
> -----------------------------
> +Part II - Non-coherent DMA allocations
> +--------------------------------------
>
> -Warning: These pieces of the DMA API should not be used in the
> -majority of cases, since they cater for unlikely corner cases that
> -don't belong in usual drivers.
> +These APIs allow to allocate pages that can be used like normal pages
> +in the kernel direct mapping, but are guaranteed to be DMA addressable.
Could we elaborate a bit more on what "like normal pages in kernel
direct mapping" mean from the driver perspective?
>
> If you don't understand how cache line coherency works between a
> processor and an I/O device, you should not be using this part of the
> -API at all.
> +API.
>
> ::
>
> void *
> - dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
> - gfp_t flag, unsigned long attrs)
> + dma_alloc_pages(struct device *dev, size_t size, dma_addr_t *dma_handle,
> + enum dma_data_direction dir, gfp_t gfp)
> +
> +This routine allocates a region of <size> bytes of consistent memory. It
> +returns a pointer to the allocated region (in the processor's virtual address
> +space) or NULL if the allocation failed. The returned memory is guanteed to
> +behave like memory allocated using alloc_pages.
There is one aspect that the existing dma_alloc_attrs() handles, but
this new function doesn't: IOMMU support. The function will always
allocate a physically-contiguous block memory, which is a costly
operation and not even guaranteed to succeed, even if enough free
memory is available.
Modern SoCs employ IOMMUs to avoid the need to allocate
physically-contiguous memory and those happen to be also the devices
that could benefit from non-coherent allocations a lot. One of the
tasks of the DMA API was making it possible to allocate suitable
memory for a given device, without having the driver know about the
SoC integration details, such as the presence of an IOMMU.
Today, dma_alloc_attrs() uses the .alloc callback of the dma_ops
struct and the IOMMU-aware implementations, like the dma-iommu helpers
[1], would allocate discontiguous pages. Therefore, while I see the
DMA-aware page allocation functionality as a useful functionality on
its own for scatter-gather-capable hardware, I believe it is not a
complete replacement for dma_alloc_attrs() with the
DMA_ATTR_NON_CONSISTENT attribute.
[1] https://elixir.bootlin.com/linux/v5.9-rc1/source/drivers/iommu/dma-iommu.c#L510
Best regards,
Tomasz
next prev parent reply other threads:[~2020-08-19 15:10 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20200819065610eucas1p2fde88e81917071b1888e7cc01ba0f298@eucas1p2.samsung.com>
2020-08-19 6:55 ` a saner API for allocating DMA addressable pages Christoph Hellwig
2020-08-19 6:55 ` [PATCH 01/28] mm: turn alloc_pages into an inline function Christoph Hellwig
2020-08-19 6:55 ` [PATCH 02/28] drm/exynos: stop setting DMA_ATTR_NON_CONSISTENT Christoph Hellwig
2020-08-19 6:55 ` [PATCH 03/28] drm/nouveau/gk20a: " Christoph Hellwig
2020-08-19 6:55 ` [PATCH 04/28] net/au1000-eth: stop using DMA_ATTR_NON_CONSISTENT Christoph Hellwig
2020-08-19 6:55 ` [PATCH 05/28] media/v4l2: remove V4L2-FLAG-MEMORY-NON-CONSISTENT Christoph Hellwig
2020-08-19 11:16 ` Tomasz Figa
2020-08-19 11:51 ` Robin Murphy
2020-08-19 12:49 ` Tomasz Figa
2020-08-19 13:57 ` Christoph Hellwig
2020-08-19 14:11 ` Tomasz Figa
2020-08-20 4:45 ` Christoph Hellwig
2020-08-20 10:09 ` Tomasz Figa
2020-08-20 16:51 ` Christoph Hellwig
2020-08-19 14:07 ` Robin Murphy
2020-08-19 14:22 ` Tomasz Figa
2020-08-20 4:52 ` Christoph Hellwig
2020-08-20 5:02 ` Christoph Hellwig
2020-08-20 10:24 ` Tomasz Figa
2020-08-20 16:52 ` Christoph Hellwig
2020-08-20 17:41 ` Tomasz Figa
2020-08-19 13:54 ` Christoph Hellwig
2020-08-19 13:57 ` Tomasz Figa
2020-08-20 4:43 ` Christoph Hellwig
2020-08-20 5:20 ` Christoph Hellwig
2020-08-20 10:05 ` Tomasz Figa
2020-08-20 16:54 ` Christoph Hellwig
2020-08-20 17:33 ` Tomasz Figa
2020-09-01 11:06 ` Christoph Hellwig
2020-09-01 15:02 ` Tomasz Figa
2020-08-19 6:55 ` [PATCH 06/28] lib82596: move DMA allocation into the callers of i82596_probe Christoph Hellwig
2020-09-01 13:29 ` Thomas Bogendoerfer
2020-08-19 6:55 ` [PATCH 07/28] 53c700: improve non-coherent DMA handling Christoph Hellwig
2020-09-01 14:52 ` James Bottomley
2020-09-01 15:05 ` Matthew Wilcox
2020-09-01 15:22 ` James Bottomley
2020-09-01 16:21 ` Helge Deller
2020-09-01 16:41 ` Helge Deller
2020-09-01 16:53 ` Matthew Wilcox
2020-09-02 15:00 ` Helge Deller
2020-08-19 6:55 ` [PATCH 08/28] MIPS: make dma_sync_*_for_cpu a little less overzealous Christoph Hellwig
2020-09-01 13:53 ` Thomas Bogendoerfer
2020-08-19 6:55 ` [PATCH 09/28] MIPS/jazzdma: remove the unused vdma_remap function Christoph Hellwig
2020-09-01 13:49 ` Thomas Bogendoerfer
2020-08-19 6:55 ` [PATCH 10/28] MIPS/jazzdma: decouple from dma-direct Christoph Hellwig
2020-09-01 13:49 ` Thomas Bogendoerfer
2020-08-19 6:55 ` [PATCH 11/28] dma-mapping: add (back) arch_dma_mark_clean for ia64 Christoph Hellwig
2020-08-19 6:55 ` [PATCH 12/28] dma-direct: remove dma_direct_{alloc,free}_pages Christoph Hellwig
2020-08-19 6:55 ` [PATCH 13/28] dma-direct: lift gfp_t manipulation out of__dma_direct_alloc_pages Christoph Hellwig
2020-08-19 6:55 ` [PATCH 14/28] dma-direct: use phys_to_dma_direct in dma_direct_alloc Christoph Hellwig
2020-08-19 6:55 ` [PATCH 15/28] dma-direct: remove __dma_to_phys Christoph Hellwig
2020-08-19 6:55 ` [PATCH 16/28] dma-direct: rename and cleanup __phys_to_dma Christoph Hellwig
2020-08-19 6:55 ` [PATCH 17/28] dma-mapping: move dma_common_{mmap,get_sgtable} out of mapping.c Christoph Hellwig
2020-08-19 6:55 ` [PATCH 18/28] dma-mapping: move the dma_declare_coherent_memory documentation Christoph Hellwig
2020-08-19 6:55 ` [PATCH 19/28] dma-mapping: replace DMA_ATTR_NON_CONSISTENT with dma_{alloc,free}_pages Christoph Hellwig
2020-08-19 15:03 ` Tomasz Figa [this message]
2020-08-20 5:15 ` [PATCH 19/28] dma-mapping: replace DMA_ATTR_NON_CONSISTENT with dma_{alloc, free}_pages Christoph Hellwig
2020-08-19 6:55 ` [PATCH 20/28] sgiwd93: convert from dma_cache_sync to dma_sync_single_for_device Christoph Hellwig
2020-08-19 6:55 ` [PATCH 21/28] hal2: " Christoph Hellwig
2020-08-19 6:55 ` [PATCH 22/28] sgiseeq: " Christoph Hellwig
2020-09-01 15:22 ` Thomas Bogendoerfer
2020-09-01 17:12 ` Thomas Bogendoerfer
2020-09-01 17:16 ` Christoph Hellwig
2020-09-01 17:38 ` Thomas Bogendoerfer
2020-09-02 21:38 ` Thomas Bogendoerfer
2020-09-03 8:42 ` Christoph Hellwig
2020-09-03 8:43 ` Christoph Hellwig
2020-09-03 8:46 ` Christoph Hellwig
2020-08-19 6:55 ` [PATCH 23/28] lib82596: " Christoph Hellwig
2020-08-19 6:55 ` [PATCH 24/28] 53c700: " Christoph Hellwig
2020-08-19 6:55 ` [PATCH 25/28] dma-mapping: remove dma_cache_sync Christoph Hellwig
2020-08-19 6:55 ` [PATCH 26/28] dmapool: add dma_alloc_pages support Christoph Hellwig
2020-08-19 6:55 ` [PATCH 27/28] nvme-pci: fix PRP pool size Christoph Hellwig
2020-08-19 6:55 ` [PATCH 28/28] nvme-pci: use dma_alloc_pages backed dmapools Christoph Hellwig
2020-08-25 11:30 ` a saner API for allocating DMA addressable pages Marek Szyprowski
2020-08-25 13:26 ` Christoph Hellwig
2020-08-29 9:46 ` Helge Deller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAAFQd5Bbp-eAVKS1MKS8xtrT4ZoOmBPfZyw9mys=eOmDb6r8Lw@mail.gmail.com' \
--to=tfiga@chromium.org \
--cc=James.Bottomley@hansenpartnership.com \
--cc=alsa-devel@alsa-project.org \
--cc=bskeggs@redhat.com \
--cc=hch@lst.de \
--cc=iommu@lists.linux-foundation.org \
--cc=jy0922.shim@samsung.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mchehab@kernel.org \
--cc=mporter@kernel.crashing.org \
--cc=netdev@vger.kernel.org \
--cc=nouveau@lists.freedesktop.org \
--cc=pawel@osciak.com \
--cc=sw0312.kim@samsung.com \
--cc=thomas.lendacky@amd.com \
--cc=tsbogend@alpha.franken.de \
--subject='Re: [PATCH 19/28] dma-mapping: replace DMA_ATTR_NON_CONSISTENT with dma_{alloc, free}_pages' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).