On Wed, Oct 10, 2018 at 9:36 AM Sunil Kovvuri <sunil.kovvuri@xxxxxxxxx> wrote: > On Tue, Oct 9, 2018 at 5:30 PM Arnd Bergmann <arnd@xxxxxxxx> wrote: > > On Tue, Oct 9, 2018 at 11:20 AM Sunil Kovvuri <sunil.kovvuri@xxxxxxxxx> wrote: > > > On Tue, Oct 9, 2018 at 1:27 PM Arnd Bergmann <arnd@xxxxxxxx> wrote: > > > > On Tue, Oct 9, 2018 at 9:03 AM Sunil Kovvuri <sunil.kovvuri@xxxxxxxxx> wrote: > > > > > On Mon, Oct 8, 2018 at 5:38 PM Arnd Bergmann <arnd@xxxxxxxx> wrote: > > > > > > On Sun, Oct 7, 2018 at 5:01 PM <sunil.kovvuri@xxxxxxxxx> wrote: > > > > I think if you enable CONFIG_DEBUG_VIRTUAL, the virt_to_page() > > > > above should trigger a warning in > > > > > > > > phys_addr_t __virt_to_phys(unsigned long x) > > > > { > > > > WARN(!__is_lm_address(x), > > > > "virt_to_phys used for non-linear address: %pK (%pS)\n", > > > > (void *)x, > > > > (void *)x); > > > > > > > > return __virt_to_phys_nodebug(x); > > > > } > > > > > > > > Can you verify that? > > > > > > No, it isn't, as for 64bit systems CONFIG_SPARSEMEM_VMEMMAP is enabled. > > > > But that is also user-selectable, right? It still seems to be really > > fragile to rely on non-documented behavior of virt_to_phys() > > here, if that only works for some configurations. > > > > > But is there any alternative to what is being done ? > > > > I'm not completely sure, but there may be a way to do this correctly > > using the iommu API instead of the dma-mapping API. What you do > > here is fairly rare, but not unprecedented. > > After further checking the only way i found is using dma_map_resource() which > accepts physical address and creates a mapping. Will test and submit next series > with the changes. Ah, perfect. I remember having seen this in the past, but forgot about it when commenting here. This should be the correct way to do it. If it doesn't work, we need to fix the implementation. Arnd