On 6/10/20 9:19 AM, Vladimir Murzin wrote: > On 6/10/20 8:24 AM, Christoph Hellwig wrote: >> Ok, I finally found the original patch from Vladimir. Comments below: >> >>> +++ b/kernel/dma/direct.c >>> @@ -456,14 +456,14 @@ int dma_direct_mmap(struct device *dev, struct vm_area_struct *vma, >>> #else /* CONFIG_MMU */ >>> bool dma_direct_can_mmap(struct device *dev) >>> { >>> - return false; >>> + return true; >>> } >>> >>> int dma_direct_mmap(struct device *dev, struct vm_area_struct *vma, >>> void *cpu_addr, dma_addr_t dma_addr, size_t size, >>> unsigned long attrs) >>> { >>> - return -ENXIO; >>> + return vm_iomap_memory(vma, vma->vm_start, (vma->vm_end - vma->vm_start));; >> >> I think we should try to reuse the mmu dma_direct_mmap implementation, >> which does about the same. This version has been compile tested on >> arm-nommu only, let me know what you think: (btw, a nommu_defconfig of >> some kind for arm would be nice..) > > Catch-all nommu_defconfig is not easy for ARM, AFAIK folk carry few hacks > for randconfig... > > Meanwhile, known working NOMMU configs > > $ git grep "# CONFIG_MMU is not set" arch/arm/configs/ > arch/arm/configs/efm32_defconfig:# CONFIG_MMU is not set > arch/arm/configs/lpc18xx_defconfig:# CONFIG_MMU is not set > arch/arm/configs/mps2_defconfig:# CONFIG_MMU is not set > arch/arm/configs/stm32_defconfig:# CONFIG_MMU is not set > arch/arm/configs/vf610m4_defconfig:# CONFIG_MMU is not set > >> >> diff --git a/kernel/dma/Kconfig b/kernel/dma/Kconfig >> index d006668c0027d2..e0dae570a51530 100644 >> --- a/kernel/dma/Kconfig >> +++ b/kernel/dma/Kconfig >> @@ -71,6 +71,7 @@ config SWIOTLB >> # in the pagetables >> # >> config DMA_NONCOHERENT_MMAP >> + default y if !MMU >> bool > > Nit: def_bool !MMU > >> >> config DMA_REMAP >> diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c >> index 0a4881e59aa7d6..9ec6a5c3fc578c 100644 >> --- a/kernel/dma/direct.c >> +++ b/kernel/dma/direct.c >> @@ -459,7 +459,6 @@ int dma_direct_get_sgtable(struct device *dev, struct sg_table *sgt, >> return ret; >> } >> >> -#ifdef CONFIG_MMU >> bool dma_direct_can_mmap(struct device *dev) >> { >> return dev_is_dma_coherent(dev) || >> @@ -485,19 +484,6 @@ int dma_direct_mmap(struct device *dev, struct vm_area_struct *vma, >> return remap_pfn_range(vma, vma->vm_start, pfn + vma->vm_pgoff, >> user_count << PAGE_SHIFT, vma->vm_page_prot); >> } >> -#else /* CONFIG_MMU */ >> -bool dma_direct_can_mmap(struct device *dev) >> -{ >> - return false; >> -} >> - >> -int dma_direct_mmap(struct device *dev, struct vm_area_struct *vma, >> - void *cpu_addr, dma_addr_t dma_addr, size_t size, >> - unsigned long attrs) >> -{ >> - return -ENXIO; >> -} >> -#endif /* CONFIG_MMU */ >> >> int dma_direct_supported(struct device *dev, u64 mask) >> { >> > > LGTM. FWIW: > > Reviewed-by: Vladimir Murzin <vladimir.murzin@xxxxxxx> > > @dillon, can you give it a try? I think Christoph would appreciate your Tested-by and that might speed up getting fix mainline. Cheers Vladimir > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >