All of 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

WARNING: multiple messages have this Message-ID (diff)
From: Tomasz Figa <tfiga@chromium.org>
To: Christoph Hellwig <hch@lst.de>
Cc: alsa-devel@alsa-project.org, linux-ia64@vger.kernel.org,
	Linux Doc Mailing List <linux-doc@vger.kernel.org>,
	nouveau@lists.freedesktop.org, linux-nvme@lists.infradead.org,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	linux-mm@kvack.org, Marek Szyprowski <m.szyprowski@samsung.com>,
	linux-samsung-soc <linux-samsung-soc@vger.kernel.org>,
	Joonyoung Shim <jy0922.shim@samsung.com>,
	linux-scsi@vger.kernel.org,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Ben Skeggs <bskeggs@redhat.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Pawel Osciak <pawel@osciak.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,
	" <linux-arm-kernel@lists.infradead.org>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	linux-parisc@vger.kernel.org, netdev@vger.kernel.org,
	Seung-Woo Kim <sw0312.kim@samsung.com>,
	linux-mips@vger.kernel.org,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,
	" <iommu@lists.linux-foundation.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

_______________________________________________
Linux-nvme mailing list
Linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

WARNING: multiple messages have this Message-ID (diff)
From: Tomasz Figa <tfiga@chromium.org>
To: Christoph Hellwig <hch@lst.de>
Cc: alsa-devel@alsa-project.org, linux-ia64@vger.kernel.org,
	Linux Doc Mailing List <linux-doc@vger.kernel.org>,
	nouveau@lists.freedesktop.org, linux-nvme@lists.infradead.org,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	linux-mm@kvack.org, Marek Szyprowski <m.szyprowski@samsung.com>,
	linux-samsung-soc <linux-samsung-soc@vger.kernel.org>,
	Joonyoung Shim <jy0922.shim@samsung.com>,
	linux-scsi@vger.kernel.org,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Ben Skeggs <bskeggs@redhat.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Pawel Osciak <pawel@osciak.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,
	" <linux-arm-kernel@lists.infradead.org>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	linux-parisc@vger.kernel.org, netdev@vger.kernel.org,
	Seung-Woo Kim <sw0312.kim@samsung.com>,
	linux-mips@vger.kernel.org,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,
	" <iommu@lists.linux-foundation.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

WARNING: multiple messages have this Message-ID (diff)
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.k
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

WARNING: multiple messages have this Message-ID (diff)
From: Tomasz Figa <tfiga@chromium.org>
To: Christoph Hellwig <hch@lst.de>
Cc: alsa-devel@alsa-project.org, linux-ia64@vger.kernel.org,
	Linux Doc Mailing List <linux-doc@vger.kernel.org>,
	nouveau@lists.freedesktop.org, linux-nvme@lists.infradead.org,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	linux-mm@kvack.org,
	linux-samsung-soc <linux-samsung-soc@vger.kernel.org>,
	Joonyoung Shim <jy0922.shim@samsung.com>,
	linux-scsi@vger.kernel.org,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Ben Skeggs <bskeggs@redhat.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Pawel Osciak <pawel@osciak.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,
	" <linux-arm-kernel@lists.infradead.org>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	linux-parisc@vger.kernel.org, netdev@vger.kernel.org,
	Seung-Woo Kim <sw0312.kim@samsung.com>,
	linux-mips@vger.kernel.org,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,
	" <iommu@lists.linux-foundation.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
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

WARNING: multiple messages have this Message-ID (diff)
From: Tomasz Figa <tfiga@chromium.org>
To: Christoph Hellwig <hch@lst.de>
Cc: alsa-devel@alsa-project.org, linux-ia64@vger.kernel.org,
	Linux Doc Mailing List <linux-doc@vger.kernel.org>,
	nouveau@lists.freedesktop.org, linux-nvme@lists.infradead.org,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	linux-mm@kvack.org, Marek Szyprowski <m.szyprowski@samsung.com>,
	linux-samsung-soc <linux-samsung-soc@vger.kernel.org>,
	Joonyoung Shim <jy0922.shim@samsung.com>,
	linux-scsi@vger.kernel.org,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Ben Skeggs <bskeggs@redhat.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Pawel Osciak <pawel@osciak.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,
	" <linux-arm-kernel@lists.infradead.org>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	linux-parisc@vger.kernel.org, netdev@vger.kernel.org,
	Seung-Woo Kim <sw0312.kim@samsung.com>,
	linux-mips@vger.kernel.org,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,
	" <iommu@lists.linux-foundation.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

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
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 15:03:52 +0000	[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

  reply	other threads:[~2020-08-19 15:11 UTC|newest]

Thread overview: 553+ 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   ` Christoph Hellwig
2020-08-19  6:55   ` Christoph Hellwig
2020-08-19  6:55   ` Christoph Hellwig
2020-08-19  6:55   ` Christoph Hellwig
2020-08-19  6:55   ` Christoph Hellwig
2020-08-19  6:55   ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 03/28] drm/nouveau/gk20a: " Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 05/28] media/v4l2: remove V4L2-FLAG-MEMORY-NON-CONSISTENT Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19 11:16     ` Tomasz Figa
2020-08-19 11:16       ` Tomasz Figa
2020-08-19 11:16       ` Tomasz Figa
2020-08-19 11:16       ` Tomasz Figa
2020-08-19 11:16       ` Tomasz Figa
2020-08-19 11:16       ` Tomasz Figa
2020-08-19 11:16       ` Tomasz Figa
2020-08-19 11:16       ` Tomasz Figa
2020-08-19 11:51       ` Robin Murphy
2020-08-19 11:51         ` Robin Murphy
2020-08-19 11:51         ` Robin Murphy
2020-08-19 11:51         ` Robin Murphy
2020-08-19 11:51         ` Robin Murphy
2020-08-19 11:51         ` Robin Murphy
2020-08-19 12:49         ` Tomasz Figa
2020-08-19 12:49           ` Tomasz Figa
2020-08-19 12:49           ` Tomasz Figa
2020-08-19 12:49           ` Tomasz Figa
2020-08-19 12:49           ` Tomasz Figa
2020-08-19 12:49           ` Tomasz Figa
2020-08-19 12:49           ` Tomasz Figa
2020-08-19 12:49           ` Tomasz Figa
2020-08-19 13:57           ` Christoph Hellwig
2020-08-19 13:57             ` Christoph Hellwig
2020-08-19 13:57             ` Christoph Hellwig
2020-08-19 13:57             ` Christoph Hellwig
2020-08-19 13:57             ` Christoph Hellwig
2020-08-19 13:57             ` Christoph Hellwig
2020-08-19 14:11             ` Tomasz Figa
2020-08-19 14:11               ` Tomasz Figa
2020-08-19 14:11               ` Tomasz Figa
2020-08-19 14:11               ` Tomasz Figa
2020-08-19 14:11               ` Tomasz Figa
2020-08-19 14:11               ` Tomasz Figa
2020-08-19 14:11               ` Tomasz Figa
2020-08-19 14:11               ` Tomasz Figa
2020-08-20  4:45               ` Christoph Hellwig
2020-08-20  4:45                 ` Christoph Hellwig
2020-08-20  4:45                 ` Christoph Hellwig
2020-08-20  4:45                 ` Christoph Hellwig
2020-08-20  4:45                 ` Christoph Hellwig
2020-08-20  4:45                 ` Christoph Hellwig
2020-08-20 10:09                 ` Tomasz Figa
2020-08-20 10:09                   ` Tomasz Figa
2020-08-20 10:09                   ` Tomasz Figa
2020-08-20 10:09                   ` Tomasz Figa
2020-08-20 10:09                   ` Tomasz Figa
2020-08-20 10:09                   ` Tomasz Figa
2020-08-20 10:09                   ` Tomasz Figa
2020-08-20 10:09                   ` Tomasz Figa
2020-08-20 16:51                   ` Christoph Hellwig
2020-08-20 16:51                     ` Christoph Hellwig
2020-08-20 16:51                     ` Christoph Hellwig
2020-08-20 16:51                     ` Christoph Hellwig
2020-08-20 16:51                     ` Christoph Hellwig
2020-08-20 16:51                     ` Christoph Hellwig
2020-08-19 14:07           ` Robin Murphy
2020-08-19 14:07             ` Robin Murphy
2020-08-19 14:07             ` Robin Murphy
2020-08-19 14:07             ` Robin Murphy
2020-08-19 14:07             ` Robin Murphy
2020-08-19 14:07             ` Robin Murphy
2020-08-19 14:22             ` Tomasz Figa
2020-08-19 14:22               ` Tomasz Figa
2020-08-19 14:22               ` Tomasz Figa
2020-08-19 14:22               ` Tomasz Figa
2020-08-19 14:22               ` Tomasz Figa
2020-08-19 14:22               ` Tomasz Figa
2020-08-19 14:22               ` Tomasz Figa
2020-08-19 14:22               ` Tomasz Figa
2020-08-20  4:52               ` Christoph Hellwig
2020-08-20  4:52                 ` Christoph Hellwig
2020-08-20  4:52                 ` Christoph Hellwig
2020-08-20  4:52                 ` Christoph Hellwig
2020-08-20  4:52                 ` Christoph Hellwig
2020-08-20  4:52                 ` Christoph Hellwig
2020-08-20  5:02             ` Christoph Hellwig
2020-08-20  5:02               ` Christoph Hellwig
2020-08-20  5:02               ` Christoph Hellwig
2020-08-20  5:02               ` Christoph Hellwig
2020-08-20  5:02               ` Christoph Hellwig
2020-08-20  5:02               ` Christoph Hellwig
2020-08-20 10:24               ` Tomasz Figa
2020-08-20 10:24                 ` Tomasz Figa
2020-08-20 10:24                 ` Tomasz Figa
2020-08-20 10:24                 ` Tomasz Figa
2020-08-20 10:24                 ` Tomasz Figa
2020-08-20 10:24                 ` Tomasz Figa
2020-08-20 10:24                 ` Tomasz Figa
2020-08-20 10:24                 ` Tomasz Figa
2020-08-20 16:52                 ` Christoph Hellwig
2020-08-20 16:52                   ` Christoph Hellwig
2020-08-20 16:52                   ` Christoph Hellwig
2020-08-20 16:52                   ` Christoph Hellwig
2020-08-20 16:52                   ` Christoph Hellwig
2020-08-20 16:52                   ` Christoph Hellwig
2020-08-20 17:41                   ` Tomasz Figa
2020-08-20 17:41                     ` Tomasz Figa
2020-08-20 17:41                     ` Tomasz Figa
2020-08-20 17:41                     ` Tomasz Figa
2020-08-20 17:41                     ` Tomasz Figa
2020-08-20 17:41                     ` Tomasz Figa
2020-08-20 17:41                     ` Tomasz Figa
2020-08-20 17:41                     ` Tomasz Figa
2020-08-19 13:54       ` Christoph Hellwig
2020-08-19 13:54         ` Christoph Hellwig
2020-08-19 13:54         ` Christoph Hellwig
2020-08-19 13:54         ` Christoph Hellwig
2020-08-19 13:54         ` Christoph Hellwig
2020-08-19 13:54         ` Christoph Hellwig
2020-08-19 13:54         ` Christoph Hellwig
2020-08-19 13:57         ` Tomasz Figa
2020-08-19 13:57           ` Tomasz Figa
2020-08-19 13:57           ` Tomasz Figa
2020-08-19 13:57           ` Tomasz Figa
2020-08-19 13:57           ` Tomasz Figa
2020-08-19 13:57           ` Tomasz Figa
2020-08-19 13:57           ` Tomasz Figa
2020-08-19 13:57           ` Tomasz Figa
2020-08-20  4:43           ` Christoph Hellwig
2020-08-20  4:43             ` Christoph Hellwig
2020-08-20  4:43             ` Christoph Hellwig
2020-08-20  4:43             ` Christoph Hellwig
2020-08-20  4:43             ` Christoph Hellwig
2020-08-20  4:43             ` Christoph Hellwig
2020-08-20  4:43             ` Christoph Hellwig
2020-08-20  5:20             ` Christoph Hellwig
2020-08-20  5:20               ` Christoph Hellwig
2020-08-20  5:20               ` Christoph Hellwig
2020-08-20  5:20               ` Christoph Hellwig
2020-08-20  5:20               ` Christoph Hellwig
2020-08-20  5:20               ` Christoph Hellwig
2020-08-20  5:20               ` Christoph Hellwig
2020-08-20 10:05               ` Tomasz Figa
2020-08-20 10:05                 ` Tomasz Figa
2020-08-20 10:05                 ` Tomasz Figa
2020-08-20 10:05                 ` Tomasz Figa
2020-08-20 10:05                 ` Tomasz Figa
2020-08-20 10:05                 ` Tomasz Figa
2020-08-20 10:05                 ` Tomasz Figa
2020-08-20 10:05                 ` Tomasz Figa
2020-08-20 16:54                 ` Christoph Hellwig
2020-08-20 16:54                   ` Christoph Hellwig
2020-08-20 16:54                   ` Christoph Hellwig
2020-08-20 16:54                   ` Christoph Hellwig
2020-08-20 16:54                   ` Christoph Hellwig
2020-08-20 16:54                   ` Christoph Hellwig
2020-08-20 16:54                   ` Christoph Hellwig
2020-08-20 17:33                   ` Tomasz Figa
2020-08-20 17:33                     ` Tomasz Figa
2020-08-20 17:33                     ` Tomasz Figa
2020-08-20 17:33                     ` Tomasz Figa
2020-08-20 17:33                     ` Tomasz Figa
2020-08-20 17:33                     ` Tomasz Figa
2020-08-20 17:33                     ` Tomasz Figa
2020-08-20 17:33                     ` Tomasz Figa
2020-09-01 11:06                     ` Christoph Hellwig
2020-09-01 11:06                       ` Christoph Hellwig
2020-09-01 11:06                       ` Christoph Hellwig
2020-09-01 11:06                       ` Christoph Hellwig
2020-09-01 11:06                       ` Christoph Hellwig
2020-09-01 11:06                       ` Christoph Hellwig
2020-09-01 11:06                       ` Christoph Hellwig
2020-09-01 15:02                       ` Tomasz Figa
2020-09-01 15:02                         ` Tomasz Figa
2020-09-01 15:02                         ` Tomasz Figa
2020-09-01 15:02                         ` Tomasz Figa
2020-09-01 15:02                         ` Tomasz Figa
2020-09-01 15:02                         ` Tomasz Figa
2020-09-01 15:02                         ` Tomasz Figa
2020-09-01 15:02                         ` Tomasz Figa
2020-09-08 21:58                         ` Tomasz Figa
2020-09-08 22:09                           ` Tomasz Figa
2020-09-10  9:49                           ` Sergey Senozhatsky
2020-09-10  9:57                             ` Hans Verkuil
2020-09-10 10:14                               ` Sergey Senozhatsky
2020-09-10 10:23                                 ` Hans Verkuil
2020-09-10 14:48                                   ` Sergey Senozhatsky
2020-09-10 15:38                                     ` Sergey Senozhatsky
2020-08-19  6:55   ` [PATCH 06/28] lib82596: move DMA allocation into the callers of i82596_probe Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-09-01 13:29     ` Thomas Bogendoerfer
2020-09-01 13:29       ` Thomas Bogendoerfer
2020-09-01 13:29       ` Thomas Bogendoerfer
2020-09-01 13:29       ` Thomas Bogendoerfer
2020-09-01 13:29       ` Thomas Bogendoerfer
2020-09-01 13:29       ` Thomas Bogendoerfer
2020-09-01 13:29       ` Thomas Bogendoerfer
2020-08-19  6:55   ` [PATCH 07/28] 53c700: improve non-coherent DMA handling Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-09-01 14:52     ` James Bottomley
2020-09-01 14:52       ` James Bottomley
2020-09-01 14:52       ` James Bottomley
2020-09-01 14:52       ` James Bottomley
2020-09-01 14:52       ` James Bottomley
2020-09-01 14:52       ` James Bottomley
2020-09-01 14:52       ` James Bottomley
2020-09-01 14:52       ` James Bottomley
2020-09-01 15:05       ` Matthew Wilcox
2020-09-01 15:05         ` Matthew Wilcox
2020-09-01 15:05         ` Matthew Wilcox
2020-09-01 15:05         ` Matthew Wilcox
2020-09-01 15:05         ` Matthew Wilcox
2020-09-01 15:05         ` Matthew Wilcox
2020-09-01 15:05         ` Matthew Wilcox
2020-09-01 15:22         ` James Bottomley
2020-09-01 15:22           ` James Bottomley
2020-09-01 15:22           ` James Bottomley
2020-09-01 15:22           ` James Bottomley
2020-09-01 15:22           ` James Bottomley
2020-09-01 15:22           ` James Bottomley
2020-09-01 15:22           ` James Bottomley
2020-09-01 15:22           ` James Bottomley
2020-09-01 16:21           ` Helge Deller
2020-09-01 16:21             ` Helge Deller
2020-09-01 16:21             ` Helge Deller
2020-09-01 16:21             ` Helge Deller
2020-09-01 16:21             ` Helge Deller
2020-09-01 16:21             ` Helge Deller
2020-09-01 16:21             ` Helge Deller
2020-09-01 16:41             ` Helge Deller
2020-09-01 16:41               ` Helge Deller
2020-09-01 16:41               ` Helge Deller
2020-09-01 16:41               ` Helge Deller
2020-09-01 16:41               ` Helge Deller
2020-09-01 16:41               ` Helge Deller
2020-09-01 16:41               ` Helge Deller
2020-09-01 16:53               ` Matthew Wilcox
2020-09-01 16:53                 ` Matthew Wilcox
2020-09-01 16:53                 ` Matthew Wilcox
2020-09-01 16:53                 ` Matthew Wilcox
2020-09-01 16:53                 ` Matthew Wilcox
2020-09-01 16:53                 ` Matthew Wilcox
2020-09-01 16:53                 ` Matthew Wilcox
2020-09-02 15:00                 ` Helge Deller
2020-09-02 15:00                   ` Helge Deller
2020-09-02 15:00                   ` Helge Deller
2020-09-02 15:00                   ` Helge Deller
2020-09-02 15:00                   ` Helge Deller
2020-09-02 15:00                   ` Helge Deller
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-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-09-01 13:53     ` Thomas Bogendoerfer
2020-09-01 13:53       ` Thomas Bogendoerfer
2020-09-01 13:53       ` Thomas Bogendoerfer
2020-09-01 13:53       ` Thomas Bogendoerfer
2020-09-01 13:53       ` Thomas Bogendoerfer
2020-09-01 13:53       ` Thomas Bogendoerfer
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-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-09-01 13:49     ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-08-19  6:55   ` [PATCH 10/28] MIPS/jazzdma: decouple from dma-direct Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-09-01 13:49     ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
2020-09-01 13:49       ` Thomas Bogendoerfer
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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 15/28] dma-direct: remove __dma_to_phys Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` [PATCH 17/28] dma-mapping: move dma_common_{mmap, get_sgtable} " Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` 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  6:55     ` 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  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19 15:03     ` Tomasz Figa [this message]
2020-08-19 15:03       ` Tomasz Figa
2020-08-19 15:03       ` Tomasz Figa
2020-08-19 15:03       ` Tomasz Figa
2020-08-19 15:03       ` Tomasz Figa
2020-08-19 15:03       ` Tomasz Figa
2020-08-19 15:03       ` Tomasz Figa
2020-08-19 15:03       ` Tomasz Figa
2020-08-20  5:15       ` Christoph Hellwig
2020-08-20  5:15         ` Christoph Hellwig
2020-08-20  5:15         ` Christoph Hellwig
2020-08-20  5:15         ` Christoph Hellwig
2020-08-20  5:15         ` Christoph Hellwig
2020-08-20  5:15         ` Christoph Hellwig
2020-08-20  5:15         ` Christoph Hellwig
2020-08-19 16:46     ` kernel test robot
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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 21/28] hal2: " Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 22/28] sgiseeq: " Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-09-01 15:22     ` Thomas Bogendoerfer
2020-09-01 15:22       ` Thomas Bogendoerfer
2020-09-01 15:22       ` Thomas Bogendoerfer
2020-09-01 15:22       ` Thomas Bogendoerfer
2020-09-01 15:22       ` Thomas Bogendoerfer
2020-09-01 15:22       ` Thomas Bogendoerfer
2020-09-01 15:22       ` Thomas Bogendoerfer
2020-09-01 17:12       ` Thomas Bogendoerfer
2020-09-01 17:12         ` Thomas Bogendoerfer
2020-09-01 17:12         ` Thomas Bogendoerfer
2020-09-01 17:12         ` Thomas Bogendoerfer
2020-09-01 17:12         ` Thomas Bogendoerfer
2020-09-01 17:12         ` Thomas Bogendoerfer
2020-09-01 17:12         ` Thomas Bogendoerfer
2020-09-01 17:16         ` Christoph Hellwig
2020-09-01 17:16           ` Christoph Hellwig
2020-09-01 17:16           ` Christoph Hellwig
2020-09-01 17:16           ` Christoph Hellwig
2020-09-01 17:16           ` Christoph Hellwig
2020-09-01 17:16           ` Christoph Hellwig
2020-09-01 17:16           ` Christoph Hellwig
2020-09-01 17:38           ` Thomas Bogendoerfer
2020-09-01 17:38             ` Thomas Bogendoerfer
2020-09-01 17:38             ` Thomas Bogendoerfer
2020-09-01 17:38             ` Thomas Bogendoerfer
2020-09-01 17:38             ` Thomas Bogendoerfer
2020-09-01 17:38             ` Thomas Bogendoerfer
2020-09-01 17:38             ` Thomas Bogendoerfer
2020-09-02 21:38             ` Thomas Bogendoerfer
2020-09-02 21:38               ` Thomas Bogendoerfer
2020-09-02 21:38               ` Thomas Bogendoerfer
2020-09-02 21:38               ` Thomas Bogendoerfer
2020-09-02 21:38               ` Thomas Bogendoerfer
2020-09-02 21:38               ` Thomas Bogendoerfer
2020-09-02 21:38               ` Thomas Bogendoerfer
2020-09-03  8:42               ` Christoph Hellwig
2020-09-03  8:42                 ` Christoph Hellwig
2020-09-03  8:42                 ` Christoph Hellwig
2020-09-03  8:42                 ` Christoph Hellwig
2020-09-03  8:42                 ` Christoph Hellwig
2020-09-03  8:42                 ` Christoph Hellwig
2020-09-03  8:42                 ` Christoph Hellwig
2020-09-03  8:43             ` Christoph Hellwig
2020-09-03  8:43               ` Christoph Hellwig
2020-09-03  8:43               ` Christoph Hellwig
2020-09-03  8:43               ` Christoph Hellwig
2020-09-03  8:43               ` Christoph Hellwig
2020-09-03  8:43               ` Christoph Hellwig
2020-09-03  8:43               ` Christoph Hellwig
2020-09-03  8:46               ` Christoph Hellwig
2020-09-03  8:46                 ` Christoph Hellwig
2020-09-03  8:46                 ` Christoph Hellwig
2020-09-03  8:46                 ` Christoph Hellwig
2020-09-03  8:46                 ` Christoph Hellwig
2020-09-03  8:46                 ` 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     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 24/28] 53c700: " Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 25/28] dma-mapping: remove dma_cache_sync Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 26/28] dmapool: add dma_alloc_pages support Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 27/28] nvme-pci: fix PRP pool size Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55   ` [PATCH 28/28] nvme-pci: use dma_alloc_pages backed dmapools Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-19  6:55     ` Christoph Hellwig
2020-08-25 11:30   ` a saner API for allocating DMA addressable pages Marek Szyprowski
2020-08-25 11:30     ` Marek Szyprowski
2020-08-25 11:30     ` Marek Szyprowski
2020-08-25 11:30     ` Marek Szyprowski
2020-08-25 11:30     ` Marek Szyprowski
2020-08-25 11:30     ` Marek Szyprowski
2020-08-25 11:30     ` Marek Szyprowski
2020-08-25 13:26     ` Christoph Hellwig
2020-08-25 13:26       ` Christoph Hellwig
2020-08-25 13:26       ` Christoph Hellwig
2020-08-25 13:26       ` Christoph Hellwig
2020-08-25 13:26       ` Christoph Hellwig
2020-08-25 13:26       ` Christoph Hellwig
2020-08-25 13:26       ` Christoph Hellwig
2020-08-29  9:46   ` Helge Deller
2020-08-29  9:46     ` Helge Deller
2020-08-29  9:46     ` Helge Deller
2020-08-29  9:46     ` Helge Deller
2020-08-29  9:46     ` Helge Deller
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 \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.