RPMsg uses dma_alloc_coherent() to allocate memory to shared with the remote. In this case, as there is no pages setup in the dma_alloc_coherent(), we cannot get the physical address back from the virtual address, and thus, we can set the sg_dma_addr to store the DMA address and mark it already DMA mapped. When virtio vring sees the sg_dma_addr is ready set, do not call dma_map_page(). The issue was once discussed here: http://virtualization.linux-foundation.narkive.com/CfVP32Vy/rfc-0-4-rpmsg-fix-init-of-dma-able-virtqueues Edgar E. Iglesias (1): rpmsg: DMA map sgs passed to virtio Wendy Liang (1): virtio_ring: Do not call dma_map_page if sg is already mapped. drivers/rpmsg/virtio_rpmsg_bus.c | 22 +++++++++++++++++++--- drivers/virtio/virtio_ring.c | 6 ++++++ 2 files changed, 25 insertions(+), 3 deletions(-) -- 1.9.1 _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization