From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
To: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Mark Salter <msalter@redhat.com>,
Vineet Gupta <Vineet.Gupta1@synopsys.com>,
linux-arch@vger.kernel.org, linux-c6x-dev@linux-c6x.org,
linux-kernel@vger.kernel.org
Subject: Re: [Linux-c6x-dev] [PATCH 3/9] c6x: Provide dma_mmap_coherent() and dma_get_sgtable()
Date: Wed, 23 Jan 2013 12:53:48 +0530 [thread overview]
Message-ID: <50FF9004.50807@synopsys.com> (raw)
In-Reply-To: <1358850164.2387.16.camel@dabdike.int.hansenpartnership.com>
On Tuesday 22 January 2013 03:52 PM, James Bottomley wrote:
> On Tue, 2013-01-22 at 11:15 +0100, Marek Szyprowski wrote:
>> Hello,
>>
>> On 1/15/2013 5:56 PM, James Bottomley wrote:
>>> On Tue, 2013-01-15 at 15:07 +0100, Marek Szyprowski wrote:
>>>> Hello,
>>>>
>>>> On 1/15/2013 10:13 AM, Geert Uytterhoeven wrote:
>>>>> Marek?
>>>>>
>>>>> On Tue, Jan 15, 2013 at 5:16 AM, Vineet Gupta
>>>>> <Vineet.Gupta1@synopsys.com> wrote:
>>>>>> On Monday 14 January 2013 09:07 PM, Mark Salter wrote:
>>>>>>> On Sun, 2013-01-13 at 11:44 +0100, Geert Uytterhoeven wrote:
>>>>>>>> c6x/allmodconfig (assumed):
>>>>>>>>
>>>>>>>> drivers/media/v4l2-core/videobuf2-dma-contig.c: In function ‘vb2_dc_mmap’:
>>>>>>>> drivers/media/v4l2-core/videobuf2-dma-contig.c:204: error: implicit declaration of function ‘dma_mmap_coherent’
>>>>>>>> drivers/media/v4l2-core/videobuf2-dma-contig.c: In function ‘vb2_dc_get_base_sgt’:
>>>>>>>> drivers/media/v4l2-core/videobuf2-dma-contig.c:387: error: implicit declaration of function ‘dma_get_sgtable’
>>>>>>>>
>>>>>>>> For architectures using dma_map_ops, dma_mmap_coherent() and
>>>>>>>> dma_get_sgtable() are provided in <asm-generic/dma-mapping-common.h>.
>>>>>>>>
>>>>>>>> C6x does not use dma_map_ops, hence it should implement them as inline
>>>>>>>> stubs using dma_common_mmap() and dma_common_get_sgtable().
>>>>>>>>
>>>>>>> So are dma_mmap_coherent() and dma_get_sgtable() part of the DMA API
>>>>>>> now? I don't them in Documentation/DMA*.txt anywhere.
>>>>>>>
>>>>>>> Why does the default dma_common_mmap() for !CONFIG_MMU return an
>>>>>>> error?
>>>>>>>
>>>>>>> Wouldn't it be better to provide default implementations that an arch
>>>>>>> could override rather than having to patch all "no dma_map_ops"
>>>>>>> architectures?
>>>>>>>
>>>>>> Speaking for the still-reviewed ARC Port, I completely agree with Mark.
>>>>
>>>> dma_mmap_coherent() was partially in the DMA mapping API for some time, but
>>>> it was available only on a few architectures (afair ARM, powerpc and avr32).
>>>> This caused significant problems for writing unified device drivers or some
>>>> device helper modules which were aimed to work on more than one
>>>> architecture.
>>>>
>>>> dma_get_sgtable() is an extension discussed during the Linaro meetings. It
>>>> is required to correctly implement buffer sharing between device driver
>>>> without hacks or any assumptions about memory layout in the device drivers.
>>>>
>>>> I have implemented some generic code for both of those two functions,
>>>> keeping
>>>> in mind that on some hardware architectures (like already mentioned VIVT)
>>>> it might be not possible to provide coherent mapping to userspace. It is
>>>> perfectly fine for those functions to return an error in such case.
>>>
>>> It's not possible on VIPT either. This means that the API is unusable
>>> on quite a large number of architectures. Surely, if we're starting to
>>> write drivers using this, we need to fix the API before more people try
>>> to use it.
>>
>> I don't get this one. On ARM coherent mappings are implemented as
>> non-cacheable,
>> both in userspace and kernel-space, so having a coherent mapping is
>> possible on
>> VIPT architecture.
>
> Only if you have an uncacheable bit in the architecture page table ...
> which some of ours don't.
>
> Regardless, setting pages Uncacheable is really a hack job on shared
> buffers because it creates a huge slow down .... like an order of
> magnitude more than simply copying the page, which I believe is the
> current solution.
IMHO, setting the page uncached, even for shared buffer, is the only option for
arches with non snooping DMA - independent of VIPT issue.
-Vineet
WARNING: multiple messages have this Message-ID (diff)
From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
To: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Mark Salter <msalter@redhat.com>,
Vineet Gupta <Vineet.Gupta1@synopsys.com>,
<linux-arch@vger.kernel.org>, <linux-c6x-dev@linux-c6x.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [Linux-c6x-dev] [PATCH 3/9] c6x: Provide dma_mmap_coherent() and dma_get_sgtable()
Date: Wed, 23 Jan 2013 12:53:48 +0530 [thread overview]
Message-ID: <50FF9004.50807@synopsys.com> (raw)
In-Reply-To: <1358850164.2387.16.camel@dabdike.int.hansenpartnership.com>
On Tuesday 22 January 2013 03:52 PM, James Bottomley wrote:
> On Tue, 2013-01-22 at 11:15 +0100, Marek Szyprowski wrote:
>> Hello,
>>
>> On 1/15/2013 5:56 PM, James Bottomley wrote:
>>> On Tue, 2013-01-15 at 15:07 +0100, Marek Szyprowski wrote:
>>>> Hello,
>>>>
>>>> On 1/15/2013 10:13 AM, Geert Uytterhoeven wrote:
>>>>> Marek?
>>>>>
>>>>> On Tue, Jan 15, 2013 at 5:16 AM, Vineet Gupta
>>>>> <Vineet.Gupta1@synopsys.com> wrote:
>>>>>> On Monday 14 January 2013 09:07 PM, Mark Salter wrote:
>>>>>>> On Sun, 2013-01-13 at 11:44 +0100, Geert Uytterhoeven wrote:
>>>>>>>> c6x/allmodconfig (assumed):
>>>>>>>>
>>>>>>>> drivers/media/v4l2-core/videobuf2-dma-contig.c: In function ‘vb2_dc_mmap’:
>>>>>>>> drivers/media/v4l2-core/videobuf2-dma-contig.c:204: error: implicit declaration of function ‘dma_mmap_coherent’
>>>>>>>> drivers/media/v4l2-core/videobuf2-dma-contig.c: In function ‘vb2_dc_get_base_sgt’:
>>>>>>>> drivers/media/v4l2-core/videobuf2-dma-contig.c:387: error: implicit declaration of function ‘dma_get_sgtable’
>>>>>>>>
>>>>>>>> For architectures using dma_map_ops, dma_mmap_coherent() and
>>>>>>>> dma_get_sgtable() are provided in <asm-generic/dma-mapping-common.h>.
>>>>>>>>
>>>>>>>> C6x does not use dma_map_ops, hence it should implement them as inline
>>>>>>>> stubs using dma_common_mmap() and dma_common_get_sgtable().
>>>>>>>>
>>>>>>> So are dma_mmap_coherent() and dma_get_sgtable() part of the DMA API
>>>>>>> now? I don't them in Documentation/DMA*.txt anywhere.
>>>>>>>
>>>>>>> Why does the default dma_common_mmap() for !CONFIG_MMU return an
>>>>>>> error?
>>>>>>>
>>>>>>> Wouldn't it be better to provide default implementations that an arch
>>>>>>> could override rather than having to patch all "no dma_map_ops"
>>>>>>> architectures?
>>>>>>>
>>>>>> Speaking for the still-reviewed ARC Port, I completely agree with Mark.
>>>>
>>>> dma_mmap_coherent() was partially in the DMA mapping API for some time, but
>>>> it was available only on a few architectures (afair ARM, powerpc and avr32).
>>>> This caused significant problems for writing unified device drivers or some
>>>> device helper modules which were aimed to work on more than one
>>>> architecture.
>>>>
>>>> dma_get_sgtable() is an extension discussed during the Linaro meetings. It
>>>> is required to correctly implement buffer sharing between device driver
>>>> without hacks or any assumptions about memory layout in the device drivers.
>>>>
>>>> I have implemented some generic code for both of those two functions,
>>>> keeping
>>>> in mind that on some hardware architectures (like already mentioned VIVT)
>>>> it might be not possible to provide coherent mapping to userspace. It is
>>>> perfectly fine for those functions to return an error in such case.
>>>
>>> It's not possible on VIPT either. This means that the API is unusable
>>> on quite a large number of architectures. Surely, if we're starting to
>>> write drivers using this, we need to fix the API before more people try
>>> to use it.
>>
>> I don't get this one. On ARM coherent mappings are implemented as
>> non-cacheable,
>> both in userspace and kernel-space, so having a coherent mapping is
>> possible on
>> VIPT architecture.
>
> Only if you have an uncacheable bit in the architecture page table ...
> which some of ours don't.
>
> Regardless, setting pages Uncacheable is really a hack job on shared
> buffers because it creates a huge slow down .... like an order of
> magnitude more than simply copying the page, which I believe is the
> current solution.
IMHO, setting the page uncached, even for shared buffer, is the only option for
arches with non snooping DMA - independent of VIPT issue.
-Vineet
next prev parent reply other threads:[~2013-01-23 7:24 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-13 10:44 [PATCH 1/9] avr32: Provide dma_mmap_coherent() and dma_get_sgtable() Geert Uytterhoeven
[not found] ` <1358073890-3610-1-git-send-email-geert-Td1EMuHUCqxL1ZNQvxDV9g@public.gmane.org>
2013-01-13 10:44 ` [PATCH 2/9] blackfin: " Geert Uytterhoeven
2013-01-13 10:44 ` Geert Uytterhoeven
2013-01-15 8:12 ` [uclinux-dist-devel] " Jiang, Scott
2013-01-15 8:12 ` Jiang, Scott
2013-01-13 10:44 ` [PATCH 3/9] c6x: " Geert Uytterhoeven
2013-01-14 15:37 ` [Linux-c6x-dev] " Mark Salter
2013-01-15 4:16 ` Vineet Gupta
2013-01-15 4:16 ` Vineet Gupta
2013-01-15 9:13 ` Geert Uytterhoeven
2013-01-15 14:07 ` Marek Szyprowski
2013-01-15 16:56 ` James Bottomley
2013-01-21 20:00 ` Geert Uytterhoeven
2013-01-21 22:59 ` James Bottomley
2013-01-22 10:13 ` James Bottomley
2013-01-22 10:16 ` James Bottomley
2013-01-22 10:32 ` James Bottomley
2013-01-22 13:42 ` Mauro Carvalho Chehab
2013-01-22 13:23 ` Mauro Carvalho Chehab
2013-01-22 13:23 ` Mauro Carvalho Chehab
2013-01-22 10:33 ` Marek Szyprowski
2013-01-22 10:47 ` James Bottomley
2013-01-23 9:47 ` Marek Szyprowski
2013-01-23 10:29 ` James Bottomley
2013-01-23 17:44 ` Marek Szyprowski
2013-01-24 11:14 ` James Bottomley
2013-01-24 10:49 ` Marek Szyprowski
2013-01-22 10:15 ` Marek Szyprowski
2013-01-22 10:22 ` James Bottomley
2013-01-23 7:23 ` Vineet Gupta [this message]
2013-01-23 7:23 ` Vineet Gupta
2013-01-23 8:58 ` James Bottomley
2013-01-13 10:44 ` [PATCH 4/9] cris: " Geert Uytterhoeven
2013-01-14 8:38 ` Jesper Nilsson
2013-01-13 10:44 ` [PATCH 5/9] frv: " Geert Uytterhoeven
2013-01-13 10:44 ` [PATCH 6/9] m68k: " Geert Uytterhoeven
2013-01-13 10:44 ` Geert Uytterhoeven
2013-01-13 10:44 ` [PATCH 7/9] mn10300: " Geert Uytterhoeven
2013-01-13 10:44 ` [PATCH 8/9] parisc: " Geert Uytterhoeven
2013-01-13 10:44 ` Geert Uytterhoeven
2013-01-13 11:36 ` James Bottomley
2013-01-13 11:36 ` James Bottomley
2013-01-13 13:12 ` Geert Uytterhoeven
2013-01-13 13:12 ` Geert Uytterhoeven
2013-01-13 13:49 ` James Bottomley
2013-01-13 13:49 ` James Bottomley
2013-01-13 14:52 ` Geert Uytterhoeven
2013-01-13 14:52 ` Geert Uytterhoeven
2013-01-13 16:37 ` James Bottomley
2013-01-13 16:37 ` James Bottomley
2013-01-13 10:44 ` [PATCH 9/9] xtensa: " Geert Uytterhoeven
2013-01-13 16:01 ` [PATCH 1/9] avr32: " Hans-Christian Egtvedt
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=50FF9004.50807@synopsys.com \
--to=vineet.gupta1@synopsys.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=geert@linux-m68k.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-c6x-dev@linux-c6x.org \
--cc=linux-kernel@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=msalter@redhat.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.