All of lore.kernel.org
 help / color / mirror / Atom feed
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [Linaro-mm-sig] [RFC] ARM DMA mapping TODO, v1
Date: Thu, 28 Apr 2011 16:29:52 +0200	[thread overview]
Message-ID: <201104281629.52863.arnd@arndb.de> (raw)
In-Reply-To: <20110428131531.GK17290@n2100.arm.linux.org.uk>

On Thursday 28 April 2011, Russell King - ARM Linux wrote:
> On Thu, Apr 28, 2011 at 02:28:56PM +0200, Arnd Bergmann wrote:
> > On Thursday 28 April 2011, Russell King - ARM Linux wrote:
> > > What I'd suggest is that dma_alloc_noncoherent() should be architecture
> > > independent, and should call into whatever iommu support the device has
> > > to setup an approprite iommu mapping.  IOW, I don't see any need for
> > > every architecture to provide its own dma_alloc_noncoherent() allocation
> > > function - or indeed every iommu implementation to deal with the
> > > allocation issues either.
> > 
> > Almost all architectures today define dma_alloc_noncoherent to
> > dma_alloc_coherent, which is totally fine on architectures
> > where cacheable coherent mappings are the default or where
> > we don't need to flush individual cache lines for dma_sync_*.
> 
> However, dma_alloc_coherent() memory can't be used with the dma_sync_*
> API as its return address (unlike other architectures) is not in the
> kernel direct mapped memory range.

Right, because ARM does not fit in the two categories I listed
above: the regular DMA is not cache coherent and we need to flush
the cache lines for the data we want to access in dma_sync_*.

> The only thing valid for dma_sync_* are buffers which have been passed
> to the dma_map_* APIs.
> 
> Instead, I think what you're referring to is dma_cache_sync(), which is
> the API to be used with dma_alloc_noncoherent(), which we don't
> implement.
> 
> As we have problems with some SMP implementations, and the noncoherent
> API doesn't have the idea of buffer ownership, it's rather hard to deal
> with the DMA cache implications with the existing API, especially with
> the issues of speculative prefetching.  The current usage (looking at
> drivers/scsi/53c700.c) doesn't cater for speculative prefetch as the
> dma_cache_sync(,,,DMA_FROM_DEVICE) is done well in advance of the DMA
> actually happening.
> 
> So all in all, I think the noncoherent API is broken as currently
> designed - and until we have devices on ARM which use it, I don't see
> much point into trying to fix the current thing especially as we'd be
> unable to test.

I agree that dma_cache_sync() is totally unusable on ARM, I thought we
had killed that off and replaced it with dma_sync_*. Unfortunately,
I was mistaken there: all drivers that use dma_alloc_noncoherent
either use dma_cache_sync() or they do something that is more broken,
but they don't do dma_sync_*.

Given that people still want to have an interface that does what I
though this one did, I guess we have two options:

* Kill off dma_cache_sync and replace it with calls to dma_sync_*
  so we can start using dma_alloc_noncoherent on ARM

* Introduce a new interface

	Arnd

WARNING: multiple messages have this Message-ID (diff)
From: Arnd Bergmann <arnd@arndb.de>
To: "Russell King - ARM Linux" <linux@arm.linux.org.uk>,
	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
	"'Benjamin Herrenschmidt'" <benh@kernel.crashing.org>,
	linaro-mm-sig@lists.linaro.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [Linaro-mm-sig] [RFC] ARM DMA mapping TODO, v1
Date: Thu, 28 Apr 2011 16:29:52 +0200	[thread overview]
Message-ID: <201104281629.52863.arnd@arndb.de> (raw)
In-Reply-To: <20110428131531.GK17290@n2100.arm.linux.org.uk>

On Thursday 28 April 2011, Russell King - ARM Linux wrote:
> On Thu, Apr 28, 2011 at 02:28:56PM +0200, Arnd Bergmann wrote:
> > On Thursday 28 April 2011, Russell King - ARM Linux wrote:
> > > What I'd suggest is that dma_alloc_noncoherent() should be architecture
> > > independent, and should call into whatever iommu support the device has
> > > to setup an approprite iommu mapping.  IOW, I don't see any need for
> > > every architecture to provide its own dma_alloc_noncoherent() allocation
> > > function - or indeed every iommu implementation to deal with the
> > > allocation issues either.
> > 
> > Almost all architectures today define dma_alloc_noncoherent to
> > dma_alloc_coherent, which is totally fine on architectures
> > where cacheable coherent mappings are the default or where
> > we don't need to flush individual cache lines for dma_sync_*.
> 
> However, dma_alloc_coherent() memory can't be used with the dma_sync_*
> API as its return address (unlike other architectures) is not in the
> kernel direct mapped memory range.

Right, because ARM does not fit in the two categories I listed
above: the regular DMA is not cache coherent and we need to flush
the cache lines for the data we want to access in dma_sync_*.

> The only thing valid for dma_sync_* are buffers which have been passed
> to the dma_map_* APIs.
> 
> Instead, I think what you're referring to is dma_cache_sync(), which is
> the API to be used with dma_alloc_noncoherent(), which we don't
> implement.
> 
> As we have problems with some SMP implementations, and the noncoherent
> API doesn't have the idea of buffer ownership, it's rather hard to deal
> with the DMA cache implications with the existing API, especially with
> the issues of speculative prefetching.  The current usage (looking at
> drivers/scsi/53c700.c) doesn't cater for speculative prefetch as the
> dma_cache_sync(,,,DMA_FROM_DEVICE) is done well in advance of the DMA
> actually happening.
> 
> So all in all, I think the noncoherent API is broken as currently
> designed - and until we have devices on ARM which use it, I don't see
> much point into trying to fix the current thing especially as we'd be
> unable to test.

I agree that dma_cache_sync() is totally unusable on ARM, I thought we
had killed that off and replaced it with dma_sync_*. Unfortunately,
I was mistaken there: all drivers that use dma_alloc_noncoherent
either use dma_cache_sync() or they do something that is more broken,
but they don't do dma_sync_*.

Given that people still want to have an interface that does what I
though this one did, I guess we have two options:

* Kill off dma_cache_sync and replace it with calls to dma_sync_*
  so we can start using dma_alloc_noncoherent on ARM

* Introduce a new interface

	Arnd

  reply	other threads:[~2011-04-28 14:29 UTC|newest]

Thread overview: 198+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-21 19:29 [RFC] ARM DMA mapping TODO, v1 Arnd Bergmann
2011-04-21 19:29 ` Arnd Bergmann
2011-04-21 20:09 ` [Linaro-mm-sig] " Jesse Barnes
2011-04-21 20:09   ` Jesse Barnes
2011-04-21 21:52   ` Zach Pfeffer
2011-04-21 21:52     ` Zach Pfeffer
2011-04-22  0:34     ` KyongHo Cho
2011-04-22  0:34       ` KyongHo Cho
2011-04-26 14:29       ` Arnd Bergmann
2011-04-26 14:29         ` Arnd Bergmann
2011-04-26 14:28     ` Arnd Bergmann
2011-04-26 14:28       ` Arnd Bergmann
2011-04-26 14:26   ` Arnd Bergmann
2011-04-26 14:26     ` Arnd Bergmann
2011-04-26 15:39     ` Jesse Barnes
2011-04-26 15:39       ` Jesse Barnes
2011-04-27  7:35 ` Russell King - ARM Linux
2011-04-27  7:35   ` Russell King - ARM Linux
2011-04-27  8:56   ` Arnd Bergmann
2011-04-27  8:56     ` Arnd Bergmann
2011-04-27  9:09     ` Russell King - ARM Linux
2011-04-27  9:09       ` Russell King - ARM Linux
2011-04-27 11:02       ` Arnd Bergmann
2011-04-27 11:02         ` Arnd Bergmann
2011-04-27 16:16         ` [Linaro-mm-sig] " Alex Deucher
2011-04-27 16:16           ` Alex Deucher
2011-04-27 17:44           ` Anca Emanuel
2011-04-27 17:44             ` Anca Emanuel
2011-04-27 20:27             ` Russell King - ARM Linux
2011-04-27 20:27               ` Russell King - ARM Linux
2011-04-27 20:16         ` Russell King - ARM Linux
2011-04-27 20:16           ` Russell King - ARM Linux
2011-04-27 20:21           ` Arnd Bergmann
2011-04-27 20:21             ` Arnd Bergmann
2011-04-27 20:26             ` Russell King - ARM Linux
2011-04-27 20:26               ` Russell King - ARM Linux
2011-04-27 20:48               ` Arnd Bergmann
2011-04-27 20:48                 ` Arnd Bergmann
2011-04-27 21:41               ` Benjamin Herrenschmidt
2011-04-27 21:41                 ` Benjamin Herrenschmidt
2011-04-28  9:30                 ` Russell King - ARM Linux
2011-04-28  9:30                   ` Russell King - ARM Linux
2011-04-28 21:07                   ` Benjamin Herrenschmidt
2011-04-28 21:07                     ` Benjamin Herrenschmidt
2011-04-29 11:26                     ` Arnd Bergmann
2011-04-29 11:26                       ` Arnd Bergmann
2011-04-29 11:47                       ` Benjamin Herrenschmidt
2011-04-29 11:47                         ` Benjamin Herrenschmidt
2011-04-29 11:56                       ` Alan Cox
2011-04-29 11:56                         ` Alan Cox
2011-04-29 22:51                         ` Benjamin Herrenschmidt
2011-04-29 22:51                           ` Benjamin Herrenschmidt
2011-04-29 12:06                       ` [Linaro-mm-sig] " Thomas Hellstrom
2011-04-29 12:06                         ` Thomas Hellstrom
2011-04-29 13:34                         ` Jerome Glisse
2011-04-29 13:34                           ` Jerome Glisse
2011-04-29 22:55                           ` Benjamin Herrenschmidt
2011-04-29 22:55                             ` Benjamin Herrenschmidt
2011-04-29 22:53                         ` Benjamin Herrenschmidt
2011-04-29 22:53                           ` Benjamin Herrenschmidt
2011-04-27 10:51     ` Marek Szyprowski
2011-04-27 10:51       ` Marek Szyprowski
2011-04-27 21:37   ` Benjamin Herrenschmidt
2011-04-27 21:37     ` Benjamin Herrenschmidt
2011-04-28  6:40     ` [Linaro-mm-sig] " Arnd Bergmann
2011-04-28  6:40       ` Arnd Bergmann
2011-04-28  6:46       ` FUJITA Tomonori
2011-04-28  6:46         ` FUJITA Tomonori
2011-04-28  9:37     ` Russell King - ARM Linux
2011-04-28  9:37       ` Russell King - ARM Linux
2011-04-28 10:32       ` [Linaro-mm-sig] " Marek Szyprowski
2011-04-28 10:32         ` Marek Szyprowski
2011-04-28 10:51         ` Russell King - ARM Linux
2011-04-28 10:51           ` Russell King - ARM Linux
2011-04-28 12:28           ` Arnd Bergmann
2011-04-28 12:28             ` Arnd Bergmann
2011-04-28 13:15             ` Russell King - ARM Linux
2011-04-28 13:15               ` Russell King - ARM Linux
2011-04-28 14:29               ` Arnd Bergmann [this message]
2011-04-28 14:29                 ` Arnd Bergmann
2011-04-28 14:34                 ` Russell King - ARM Linux
2011-04-28 14:34                   ` Russell King - ARM Linux
2011-04-28 14:39                   ` Arnd Bergmann
2011-04-28 14:39                     ` Arnd Bergmann
2011-04-28 14:58                     ` Russell King - ARM Linux
2011-04-28 14:58                       ` Russell King - ARM Linux
2011-04-28 19:37                   ` Jerome Glisse
2011-04-28 19:37                     ` Jerome Glisse
2011-04-29  0:29                     ` Benjamin Herrenschmidt
2011-04-29  0:29                       ` Benjamin Herrenschmidt
2011-04-29  5:50                       ` Thomas Hellstrom
2011-04-29  5:50                         ` Thomas Hellstrom
2011-04-29  7:35                         ` Benjamin Herrenschmidt
2011-04-29  7:35                           ` Benjamin Herrenschmidt
2011-04-29 10:55                           ` Thomas Hellstrom
2011-04-29 10:55                             ` Thomas Hellstrom
2011-04-29 22:50                             ` Benjamin Herrenschmidt
2011-04-29 22:50                               ` Benjamin Herrenschmidt
2011-04-29 16:27                           ` Jesse Barnes
2011-04-29 16:27                             ` Jesse Barnes
2011-04-29 22:46                             ` Benjamin Herrenschmidt
2011-04-29 22:46                               ` Benjamin Herrenschmidt
2011-04-30  2:45                               ` Jesse Barnes
2011-04-30  2:45                                 ` Jesse Barnes
2011-04-29  7:59                         ` Russell King - ARM Linux
2011-04-29  7:59                           ` Russell King - ARM Linux
2011-04-29 16:32                           ` Jesse Barnes
2011-04-29 16:32                             ` Jesse Barnes
2011-04-29 18:29                             ` Arnd Bergmann
2011-04-29 18:29                               ` Arnd Bergmann
2011-04-29 22:15                               ` Russell King - ARM Linux
2011-04-29 22:15                                 ` Russell King - ARM Linux
2011-05-02  4:42                                 ` David Brown
2011-05-02  4:42                                   ` David Brown
2011-05-02 11:26                                   ` Arnd Bergmann
2011-05-02 11:26                                     ` Arnd Bergmann
2011-04-29 22:37                               ` Benjamin Herrenschmidt
2011-04-29 22:37                                 ` Benjamin Herrenschmidt
2011-04-29 13:42                     ` Joerg Roedel
2011-04-29 13:42                       ` Joerg Roedel
2011-04-29 14:19                       ` Jerome Glisse
2011-04-29 14:19                         ` Jerome Glisse
2011-04-29 15:37                       ` Jordan Crouse
2011-04-29 15:37                         ` Jordan Crouse
2011-04-28 14:38                 ` FUJITA Tomonori
2011-04-28 14:38                   ` FUJITA Tomonori
2011-04-29  0:25               ` Benjamin Herrenschmidt
2011-04-29  0:25                 ` Benjamin Herrenschmidt
2011-04-29 11:21                 ` Arnd Bergmann
2011-04-29 11:21                   ` Arnd Bergmann
2011-04-28 10:41   ` Joerg Roedel
2011-04-28 10:41     ` Joerg Roedel
2011-04-28 11:01     ` Russell King - ARM Linux
2011-04-28 11:01       ` Russell King - ARM Linux
2011-04-28 12:25       ` Joerg Roedel
2011-04-28 12:25         ` Joerg Roedel
2011-04-28 12:42         ` Russell King - ARM Linux
2011-04-28 12:42           ` Russell King - ARM Linux
2011-04-28 12:59           ` Joerg Roedel
2011-04-28 12:59             ` Joerg Roedel
2011-04-28 13:02           ` Arnd Bergmann
2011-04-28 13:02             ` Arnd Bergmann
2011-04-28 13:19             ` Russell King - ARM Linux
2011-04-28 13:19               ` Russell King - ARM Linux
2011-04-28 13:56               ` Joerg Roedel
2011-04-28 13:56                 ` Joerg Roedel
2011-04-28 14:30                 ` Russell King - ARM Linux
2011-04-28 14:30                   ` Russell King - ARM Linux
2011-04-27  9:52 ` Catalin Marinas
2011-04-27  9:52   ` Catalin Marinas
2011-04-27 10:43   ` Arnd Bergmann
2011-04-27 10:43     ` Arnd Bergmann
2011-04-27 11:08     ` Catalin Marinas
2011-04-27 11:08       ` Catalin Marinas
2011-04-28  0:15       ` Valdis.Kletnieks at vt.edu
2011-04-28  0:15         ` Valdis.Kletnieks
2011-04-28  8:27         ` Catalin Marinas
2011-04-28  8:27           ` Catalin Marinas
2011-04-28 12:12           ` Arnd Bergmann
2011-04-28 12:12             ` Arnd Bergmann
2011-04-28 12:36             ` Russell King - ARM Linux
2011-04-28 12:36               ` Russell King - ARM Linux
2011-04-28 12:48               ` Arnd Bergmann
2011-04-28 12:48                 ` Arnd Bergmann
2011-05-03 14:45             ` Dave Martin
2011-05-03 14:45               ` Dave Martin
2011-04-29 15:41       ` [Linaro-mm-sig] " Arnd Bergmann
2011-04-29 15:41         ` Arnd Bergmann
2011-04-29 16:42         ` Catalin Marinas
2011-04-29 16:42           ` Catalin Marinas
2011-05-03 15:05     ` [Linaro-mm-sig] " Laurent Pinchart
2011-05-03 15:05       ` Laurent Pinchart
2011-05-03 15:31       ` Arnd Bergmann
2011-05-03 15:31         ` Arnd Bergmann
2011-04-27 14:06   ` FUJITA Tomonori
2011-04-27 14:06     ` FUJITA Tomonori
2011-04-27 14:29     ` Catalin Marinas
2011-04-27 14:29       ` Catalin Marinas
2011-04-27 14:34       ` FUJITA Tomonori
2011-04-27 14:34         ` FUJITA Tomonori
2011-04-27 20:29     ` Russell King - ARM Linux
2011-04-27 20:29       ` Russell King - ARM Linux
2011-04-27 21:45   ` Benjamin Herrenschmidt
2011-04-27 21:45     ` Benjamin Herrenschmidt
2011-04-28  7:24     ` [Linaro-mm-sig] " KyongHo Cho
2011-04-28  7:24       ` KyongHo Cho
2011-04-28  8:31     ` Catalin Marinas
2011-04-28  8:31       ` Catalin Marinas
2011-04-27 21:31 ` Benjamin Herrenschmidt
2011-04-27 21:31   ` Benjamin Herrenschmidt
2011-04-28  9:42   ` Russell King - ARM Linux
2011-04-28  9:42     ` Russell King - ARM Linux
2011-04-28 10:27 ` Joerg Roedel
2011-04-28 10:27   ` Joerg Roedel
2011-04-28 12:15   ` Arnd Bergmann
2011-04-28 12:15     ` Arnd Bergmann
  -- strict thread matches above, loose matches on Subject: below --
2011-05-03 14:35 [Linaro-mm-sig] " Laurent Pinchart
2011-05-03 14:35 ` Laurent Pinchart

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=201104281629.52863.arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.