nommu: allow mmap when !CONFIG_MMU

Message ID 1480600080-30196-1-git-send-email-benjamin.gaignard@linaro.org
State New
Headers show

Commit Message

Benjamin Gaignard Dec. 1, 2016, 1:48 p.m.
commit ab6494f0c96f ("nommu: Add noMMU support to the DMA API") have
add CONFIG_MMU compilation flag but that prohibit to use dma_mmap_wc()
when the platform doesn't have MMU.

This patch call vm_iomap_memory() in noMMU case to test if addresses
are correct and set wma->vm_flags rather than all return an error.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: arnd@arndb.de
---
 arch/arm/mm/dma-mapping.c | 3 +++
 1 file changed, 3 insertions(+)

-- 
1.9.1

Comments

Benjamin Gaignard Dec. 9, 2016, 3:27 p.m. | #1
+ Vladimir

2016-12-01 14:48 GMT+01:00 Benjamin Gaignard <benjamin.gaignard@linaro.org>:
> commit ab6494f0c96f ("nommu: Add noMMU support to the DMA API") have

> add CONFIG_MMU compilation flag but that prohibit to use dma_mmap_wc()

> when the platform doesn't have MMU.

>

> This patch call vm_iomap_memory() in noMMU case to test if addresses

> are correct and set wma->vm_flags rather than all return an error.

>

> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>

> Cc: Catalin Marinas <catalin.marinas@arm.com>

> Cc: arnd@arndb.de

> ---

>  arch/arm/mm/dma-mapping.c | 3 +++

>  1 file changed, 3 insertions(+)

>

> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c

> index ab4f745..230875e 100644

> --- a/arch/arm/mm/dma-mapping.c

> +++ b/arch/arm/mm/dma-mapping.c

> @@ -868,6 +868,9 @@ static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,

>                                       vma->vm_end - vma->vm_start,

>                                       vma->vm_page_prot);

>         }

> +#else

> +       ret = vm_iomap_memory(vma, vma->vm_start,

> +                             (vma->vm_end - vma->vm_start));

>  #endif /* CONFIG_MMU */

>

>         return ret;

> --

> 1.9.1

>
Vladimir Murzin Dec. 9, 2016, 3:36 p.m. | #2
On 09/12/16 15:27, Benjamin Gaignard wrote:
> + Vladimir


I'm not in DMA, but I can see that with your patch it deviates from
dma_common_mmap(), can you give more context, please?

Cheers
Vladimir

> 

> 2016-12-01 14:48 GMT+01:00 Benjamin Gaignard <benjamin.gaignard@linaro.org>:

>> commit ab6494f0c96f ("nommu: Add noMMU support to the DMA API") have

>> add CONFIG_MMU compilation flag but that prohibit to use dma_mmap_wc()

>> when the platform doesn't have MMU.

>>

>> This patch call vm_iomap_memory() in noMMU case to test if addresses

>> are correct and set wma->vm_flags rather than all return an error.

>>

>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>

>> Cc: Catalin Marinas <catalin.marinas@arm.com>

>> Cc: arnd@arndb.de

>> ---

>>  arch/arm/mm/dma-mapping.c | 3 +++

>>  1 file changed, 3 insertions(+)

>>

>> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c

>> index ab4f745..230875e 100644

>> --- a/arch/arm/mm/dma-mapping.c

>> +++ b/arch/arm/mm/dma-mapping.c

>> @@ -868,6 +868,9 @@ static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,

>>                                       vma->vm_end - vma->vm_start,

>>                                       vma->vm_page_prot);

>>         }

>> +#else

>> +       ret = vm_iomap_memory(vma, vma->vm_start,

>> +                             (vma->vm_end - vma->vm_start));

>>  #endif /* CONFIG_MMU */

>>

>>         return ret;

>> --

>> 1.9.1

>>

>
Benjamin Gaignard Dec. 9, 2016, 3:47 p.m. | #3
2016-12-09 16:36 GMT+01:00 Vladimir Murzin <vladimir.murzin@arm.com>:
> On 09/12/16 15:27, Benjamin Gaignard wrote:

>> + Vladimir

>

> I'm not in DMA, but I can see that with your patch it deviates from

> dma_common_mmap(), can you give more context, please?


I'm working on ARM platform with MMU (stm32f4) to enable display driver.
Framebuffer is allocated with dma_alloc_wc() and when userland try to mmap
drm/kms fraemwork calls dma_mmap_wc().
All this is in drivers/gpu/drm/drm_gem_cma_helper.c

dma_mmap_wc() call failed because __arm_dma_mmap() always return an
error if CONFIG_MMU
isn't defined.
That what I try to solve with this patch.

> Cheers

> Vladimir

>

>>

>> 2016-12-01 14:48 GMT+01:00 Benjamin Gaignard <benjamin.gaignard@linaro.org>:

>>> commit ab6494f0c96f ("nommu: Add noMMU support to the DMA API") have

>>> add CONFIG_MMU compilation flag but that prohibit to use dma_mmap_wc()

>>> when the platform doesn't have MMU.

>>>

>>> This patch call vm_iomap_memory() in noMMU case to test if addresses

>>> are correct and set wma->vm_flags rather than all return an error.

>>>

>>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>

>>> Cc: Catalin Marinas <catalin.marinas@arm.com>

>>> Cc: arnd@arndb.de

>>> ---

>>>  arch/arm/mm/dma-mapping.c | 3 +++

>>>  1 file changed, 3 insertions(+)

>>>

>>> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c

>>> index ab4f745..230875e 100644

>>> --- a/arch/arm/mm/dma-mapping.c

>>> +++ b/arch/arm/mm/dma-mapping.c

>>> @@ -868,6 +868,9 @@ static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,

>>>                                       vma->vm_end - vma->vm_start,

>>>                                       vma->vm_page_prot);

>>>         }

>>> +#else

>>> +       ret = vm_iomap_memory(vma, vma->vm_start,

>>> +                             (vma->vm_end - vma->vm_start));

>>>  #endif /* CONFIG_MMU */

>>>

>>>         return ret;

>>> --

>>> 1.9.1

>>>

>>

>




-- 
Benjamin Gaignard

Graphic Study Group

Linaro.org │ Open source software for ARM SoCs

Follow Linaro: Facebook | Twitter | Blog
Russell King - ARM Linux Dec. 9, 2016, 8:02 p.m. | #4
On Thu, Dec 01, 2016 at 02:48:00PM +0100, Benjamin Gaignard wrote:
> commit ab6494f0c96f ("nommu: Add noMMU support to the DMA API") have

> add CONFIG_MMU compilation flag but that prohibit to use dma_mmap_wc()

> when the platform doesn't have MMU.

> 

> This patch call vm_iomap_memory() in noMMU case to test if addresses

> are correct and set wma->vm_flags rather than all return an error.


ITYM vma.

I think this is fine, but I've no way to know as I don't run nommu here...
I've been hoping that others working on nommu would at least give an
ack or something, but I guess not.

So, please put it in the patch system, thanks.

-- 
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.

Patch hide | download patch | download mbox

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index ab4f745..230875e 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -868,6 +868,9 @@  static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,
 				      vma->vm_end - vma->vm_start,
 				      vma->vm_page_prot);
 	}
+#else
+	ret = vm_iomap_memory(vma, vma->vm_start,
+			      (vma->vm_end - vma->vm_start));
 #endif	/* CONFIG_MMU */
 
 	return ret;