All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: Robin Murphy <robin.murphy@arm.com>
Cc: Christoph Hellwig <hch@infradead.org>,
	Vinod Koul <vinod.koul@intel.com>,
	linux-renesas-soc@vger.kernel.org,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"dmaengine@vger.kernel.org" <dmaengine@vger.kernel.org>,
	iommu@lists.linux-foundation.org,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	geert+renesas@glider.be, Linus Walleij <linus.walleij@linaro.org>,
	Arnd Bergmann <arnd@arndb.de>,
	linux-arch@vger.kernel.org
Subject: Re: [PATCH v5 3/9] dma-mapping: add dma_{map,unmap}_resource
Date: Fri, 11 Mar 2016 09:51:49 -0800	[thread overview]
Message-ID: <CAPcyv4irvir8kmVwfgLMP0WJaycYycxT1sa3Ttv0VeGkyijezQ@mail.gmail.com> (raw)
In-Reply-To: <56E2CC42.5070406@arm.com>

On Fri, Mar 11, 2016 at 5:46 AM, Robin Murphy <robin.murphy@arm.com> wrote:
> Hi Dan,
>
>
> On 11/03/16 06:47, Dan Williams wrote:
>>
>> On Thu, Mar 10, 2016 at 8:05 AM, Niklas S??derlund
>> <niklas.soderlund@ragnatech.se> wrote:
>>>
>>> Hi Christoph,
>>>
>>> On 2016-03-07 23:38:47 -0800, Christoph Hellwig wrote:
>>>>
>>>> Please add some documentation on where/how this should be used.  It's
>>>> not a very obvious interface.
>>>
>>>
>>> Good idea, I have added the following to Documentation/DMA-API.txt and
>>> folded it in to this patch. Do you feel it's adequate and do you know
>>> anywhere else I should add documentation?
>>>
>>> diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt
>>> index 45ef3f2..248556a 100644
>>> --- a/Documentation/DMA-API.txt
>>> +++ b/Documentation/DMA-API.txt
>>> @@ -277,14 +277,29 @@ and <size> parameters are provided to do partial
>>> page mapping, it is
>>>   recommended that you never use these unless you really know what the
>>>   cache width is.
>>>
>>> +dma_addr_t
>>> +dma_map_resource(struct device *dev, phys_addr_t phys_addr, size_t size,
>>> +                enum dma_data_direction dir, struct dma_attrs *attrs)
>>> +
>>> +Maps a MMIO region so it can be accessed by the device and returns the
>>> +DMA address of the memory. API should only be used to map device MMIO,
>>> +mapping of RAM is not permitted.
>>> +
>>
>>
>> I think it is confusing to use the dma_ prefix for this peer-to-peer
>> mmio functionality.  dma_addr_t is a device's view of host memory.
>> Something like bus_addr_t bus_map_resource().  Doesn't this routine
>> also need the source device in addition to the target device?  The
>> resource address is from the perspective of the host cpu, it may be a
>> different address space in the view of two devices relative to each
>> other.
>
>
> Hmm, the trouble with that is that when the DMA master is behind an IOMMU,
> the address space as seen by the device is dynamic and whatever we decide it
> to be, so there is no distinction between a "DMA" address and a "bus"
> address.
>
> In practice the dmaengine API has clearly worked for however long with slave
> MMIO addresses being a dma_addr_t, and it doesn't look like anyone objected
> to the change to phys_addr_t in -next either. If nothing is using bus_addr_t
> anyway, what's the right thing to do? Looking up through higher abstraction
> layers, we have the likes of struct snd_dmaengine_dai_dma_data also
> expecting the slave address to be a dma_addr_t, leading to things like the
> direct casting in bcm2835_i2s_probe() for the non-IOMMU dma != phys != bus
> case that could also be cleaned up with this proposed interface.
>

So the "bus_addr_t" reaction was prompted by the recent activity of
RDMA developers looking to re-use the devm_memremap_pages() api.  That
enabling is looking at how to setup peer-to-peer PCI-E cycles for an
RDMA device to deliver data to another local device without taking a
round trip through host memory.

I understand the history of the dmaengine-slave implementation, but it
seems we're getting to point where we need a less overloaded
identifier than "dma" for the case of devices talking to each other.

WARNING: multiple messages have this Message-ID (diff)
From: dan.j.williams@intel.com (Dan Williams)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 3/9] dma-mapping: add dma_{map,unmap}_resource
Date: Fri, 11 Mar 2016 09:51:49 -0800	[thread overview]
Message-ID: <CAPcyv4irvir8kmVwfgLMP0WJaycYycxT1sa3Ttv0VeGkyijezQ@mail.gmail.com> (raw)
In-Reply-To: <56E2CC42.5070406@arm.com>

On Fri, Mar 11, 2016 at 5:46 AM, Robin Murphy <robin.murphy@arm.com> wrote:
> Hi Dan,
>
>
> On 11/03/16 06:47, Dan Williams wrote:
>>
>> On Thu, Mar 10, 2016 at 8:05 AM, Niklas S??derlund
>> <niklas.soderlund@ragnatech.se> wrote:
>>>
>>> Hi Christoph,
>>>
>>> On 2016-03-07 23:38:47 -0800, Christoph Hellwig wrote:
>>>>
>>>> Please add some documentation on where/how this should be used.  It's
>>>> not a very obvious interface.
>>>
>>>
>>> Good idea, I have added the following to Documentation/DMA-API.txt and
>>> folded it in to this patch. Do you feel it's adequate and do you know
>>> anywhere else I should add documentation?
>>>
>>> diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt
>>> index 45ef3f2..248556a 100644
>>> --- a/Documentation/DMA-API.txt
>>> +++ b/Documentation/DMA-API.txt
>>> @@ -277,14 +277,29 @@ and <size> parameters are provided to do partial
>>> page mapping, it is
>>>   recommended that you never use these unless you really know what the
>>>   cache width is.
>>>
>>> +dma_addr_t
>>> +dma_map_resource(struct device *dev, phys_addr_t phys_addr, size_t size,
>>> +                enum dma_data_direction dir, struct dma_attrs *attrs)
>>> +
>>> +Maps a MMIO region so it can be accessed by the device and returns the
>>> +DMA address of the memory. API should only be used to map device MMIO,
>>> +mapping of RAM is not permitted.
>>> +
>>
>>
>> I think it is confusing to use the dma_ prefix for this peer-to-peer
>> mmio functionality.  dma_addr_t is a device's view of host memory.
>> Something like bus_addr_t bus_map_resource().  Doesn't this routine
>> also need the source device in addition to the target device?  The
>> resource address is from the perspective of the host cpu, it may be a
>> different address space in the view of two devices relative to each
>> other.
>
>
> Hmm, the trouble with that is that when the DMA master is behind an IOMMU,
> the address space as seen by the device is dynamic and whatever we decide it
> to be, so there is no distinction between a "DMA" address and a "bus"
> address.
>
> In practice the dmaengine API has clearly worked for however long with slave
> MMIO addresses being a dma_addr_t, and it doesn't look like anyone objected
> to the change to phys_addr_t in -next either. If nothing is using bus_addr_t
> anyway, what's the right thing to do? Looking up through higher abstraction
> layers, we have the likes of struct snd_dmaengine_dai_dma_data also
> expecting the slave address to be a dma_addr_t, leading to things like the
> direct casting in bcm2835_i2s_probe() for the non-IOMMU dma != phys != bus
> case that could also be cleaned up with this proposed interface.
>

So the "bus_addr_t" reaction was prompted by the recent activity of
RDMA developers looking to re-use the devm_memremap_pages() api.  That
enabling is looking at how to setup peer-to-peer PCI-E cycles for an
RDMA device to deliver data to another local device without taking a
round trip through host memory.

I understand the history of the dmaengine-slave implementation, but it
seems we're getting to point where we need a less overloaded
identifier than "dma" for the case of devices talking to each other.

  reply	other threads:[~2016-03-11 17:51 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-08  2:42 [PATCH v5 0/9] dmaengine: rcar-dmac: add iommu support for slave transfers Niklas Söderlund
2016-03-08  2:42 ` Niklas Söderlund
2016-03-08  2:42 ` [PATCH v5 1/9] iommu: Add MMIO mapping type Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-17 11:18   ` Laurent Pinchart
2016-03-17 11:18     ` Laurent Pinchart
2016-03-17 11:18     ` Laurent Pinchart
2016-03-17 11:18     ` Laurent Pinchart
2016-03-08  2:42 ` [PATCH v5 2/9] dma-mapping: add {map,unmap}_resource to dma_map_ops Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42 ` [PATCH v5 3/9] dma-mapping: add dma_{map,unmap}_resource Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  7:38   ` Christoph Hellwig
2016-03-08  7:38     ` Christoph Hellwig
2016-03-10 16:05     ` Niklas S??derlund
2016-03-10 16:05       ` Niklas S??derlund
2016-03-10 16:05       ` Niklas S??derlund
2016-03-11  6:19       ` Vinod Koul
2016-03-11  6:19         ` Vinod Koul
2016-03-11  6:19         ` Vinod Koul
2016-03-11  6:47       ` Dan Williams
2016-03-11  6:47         ` Dan Williams
2016-03-11  6:47         ` Dan Williams
2016-03-11 11:15         ` Christoph Hellwig
2016-03-11 11:15           ` Christoph Hellwig
2016-03-11 11:15           ` Christoph Hellwig
2016-03-11 12:58           ` Niklas Söderlund
2016-03-11 12:58             ` Niklas Söderlund
2016-03-11 12:58             ` Niklas Söderlund
2016-03-11 12:58             ` Niklas Söderlund
2016-03-15  8:22             ` Christoph Hellwig
2016-03-15  8:22               ` Christoph Hellwig
2016-03-15  8:22               ` Christoph Hellwig
2016-03-17 11:33               ` Laurent Pinchart
2016-03-17 11:33                 ` Laurent Pinchart
2016-03-17 11:33                 ` Laurent Pinchart
2016-03-17 11:33                 ` Laurent Pinchart
2016-03-21 15:26                 ` Christoph Hellwig
2016-03-21 15:26                   ` Christoph Hellwig
2016-03-21 15:26                   ` Christoph Hellwig
2016-04-13 13:29                   ` Niklas Söderlund
2016-04-13 13:29                     ` Niklas Söderlund
2016-04-13 13:29                     ` Niklas Söderlund
2016-04-13 13:29                     ` Niklas Söderlund
2016-04-13 13:29                     ` Niklas Söderlund
2016-04-21  9:48                     ` Niklas Söderlund
2016-04-21  9:48                       ` Niklas Söderlund
2016-04-21  9:48                       ` Niklas Söderlund
2016-04-21  9:48                       ` Niklas Söderlund
2016-04-21 13:49                     ` Christoph Hellwig
2016-04-21 13:49                       ` Christoph Hellwig
2016-04-21 13:49                       ` Christoph Hellwig
2016-04-25 14:26                       ` Niklas Söderlund
2016-04-25 14:26                         ` Niklas Söderlund
2016-04-25 14:26                         ` Niklas Söderlund
2016-04-25 14:26                         ` Niklas Söderlund
2016-04-25 19:10                         ` Christoph Hellwig
2016-04-25 19:10                           ` Christoph Hellwig
2016-04-25 19:10                           ` Christoph Hellwig
2016-04-26 13:29                           ` Niklas Söderlund
2016-04-26 13:29                             ` Niklas Söderlund
2016-04-26 13:29                             ` Niklas Söderlund
2016-04-26 13:29                             ` Niklas Söderlund
2016-04-26 13:29                             ` Niklas Söderlund
2016-03-11 13:46         ` Robin Murphy
2016-03-11 13:46           ` Robin Murphy
2016-03-11 13:46           ` Robin Murphy
2016-03-11 13:46           ` Robin Murphy
2016-03-11 17:51           ` Dan Williams [this message]
2016-03-11 17:51             ` Dan Williams
2016-03-11 17:51             ` Dan Williams
2016-03-08  2:42 ` [PATCH v5 4/9] arm: dma-mapping: add {map,unmap}_resource for iommu ops Niklas Söderlund
2016-03-08  2:42   ` [PATCH v5 4/9] arm: dma-mapping: add {map, unmap}_resource " Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42 ` [PATCH v5 5/9] dmaengine: rcar-dmac: slave address are physical Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-17 11:30   ` Laurent Pinchart
2016-03-17 11:30     ` Laurent Pinchart
2016-03-17 11:30     ` Laurent Pinchart
2016-03-17 11:30     ` Laurent Pinchart
2016-03-08  2:42 ` [PATCH v5 6/9] dmaengine: rcar-dmac: group slave configuration Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-17 11:28   ` Laurent Pinchart
2016-03-17 11:28     ` Laurent Pinchart
2016-03-17 11:28     ` Laurent Pinchart
2016-03-17 11:28     ` Laurent Pinchart
2016-03-08  2:42 ` [PATCH v5 7/9] dmaengine: rcar-dmac: add iommu support for slave transfers Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42 ` [PATCH v5 8/9] ARM: dts: r8a7790: add iommus to dmac0 and dmac1 Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund
2016-03-08  2:42 ` [PATCH v5 9/9] ARM: dts: r8a7791: " Niklas Söderlund
2016-03-08  2:42   ` Niklas Söderlund

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=CAPcyv4irvir8kmVwfgLMP0WJaycYycxT1sa3Ttv0VeGkyijezQ@mail.gmail.com \
    --to=dan.j.williams@intel.com \
    --cc=arnd@arndb.de \
    --cc=dmaengine@vger.kernel.org \
    --cc=geert+renesas@glider.be \
    --cc=hch@infradead.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=vinod.koul@intel.com \
    /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.