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? > > > > > > Arnd > > > > 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. > > Arnd 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. Thanks, Sunil.