On 07/07/17 17:44, Vladimir Murzin wrote: > On 07/07/17 17:06, Robin Murphy wrote: >> On 07/07/17 16:40, Vladimir Murzin wrote: >>> Christoph, >>> >>> On 07/07/17 15:27, Christoph Hellwig wrote: >>>> Vladimir, >>>> >>>> this is why I really didn't like overloading the current >>>> dma coherent infrastructure with the global pool. >>>> >>>> And this new patch seems like piling hacks over hacks. I think we >>>> should go back and make sure allocations from the global coherent >>>> pool are done by the dma ops implementation, and not before calling >>>> into them - preferably still reusing the common code for it. >>>> >>>> Vladimir or Vitaly - can you look into that? >>>> >>> >>> It is really sad that Vitaly and George did not join to discussions earlier, >>> so we could avoid being in situation like this. >>> >>> Likely I'm missing something, but what should happen if device relies on >>> dma_contiguous_default_area? >>> >>> Originally, intention behind dma-default was to simplify things, so instead of >>> >>> reserved-memory { >>> #address-cells = <1>; >>> #size-cells = <1>; >>> ranges; >>> >>> coherent_dma: linux,dma { >>> compatible = "shared-dma-pool"; >>> no-map; >>> reg = <0x78000000 0x800000>; >>> }; >>> }; >>> >>> >>> dev0: dev@12300000 { >>> memory-region = <&coherent_dma>; >>> /* ... */ >>> }; >>> >>> dev1: dev@12500000 { >>> memory-region = <&coherent_dma>; >>> /* ... */ >>> }; >>> >>> dev2: dev@12600000 { >>> memory-region = <&coherent_dma>; >>> /* ... */ >>> }; >>> >>> in device tree we could simply have >>> >>> reserved-memory { >>> #address-cells = <1>; >>> #size-cells = <1>; >>> ranges; >>> >>> coherent_dma: linux,dma { >>> compatible = "shared-dma-pool"; >>> no-map; >>> reg = <0x78000000 0x800000>; >>> linux,dma-default; >>> }; >>> }; >>> >>> and that just work in my (NOMMU) case because there is no CMA there... >>> >>> However, given that dma-default is being overloaded and there are no device >>> tree users merged yet, I would not object stepping back, reverting "drivers: >>> dma-coherent: Introduce default DMA pool" and cooperatively rethinking >>> design/implementation, so every party gets happy. >> >> I don't think we need to go that far, I reckon it would be clear enough >> to just split the per-device vs. global pool interfaces, something like >> I've sketched out below (such that the ops->alloc implementation calls >> dma_alloc_from_global_coherent() if dma_alloc_from_contiguous() fails). > > Would not we need also release and mmap variants? Sure, that was just bashed out in 2 minutes and diffed into an email on the assumption that code would help illustrate the general idea I had in mind more clearly than prose alone. I'm certain it won't even compile as-is ;) Robin. -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html