Question regarding Virtio Console and Remoteproc

Sjur BRENDELAND
Fri, 01 Jun 2012 07:31:30 -0000

Hi Amit and Rusty,

I've been looking into the possibility of using the Virtio Console
Driver together with the remoteproc framework to communicate with
ST-Ericsson modem over shared memory.

It seems like Virtio Console would be a good fit, except for a issue
with buffer allocation. Due to HW limitations the STE-Modem cannot
access kernel memory (no IOMMU and limited address range). Instead
we have a designated shared memory region used for IPC.

Due to this I cannot use kmalloc() for buffer allocation, but I
have to allocate buffers from the memory region shared with the
modem.

In remoteproc this is solved by using dma_alloc_coherent() for all
memory to be shared with the modem. This works fine for me, because
I can pass the IPC memory region to dma_declare_coherent_memory()
so dma_alloc_coherent() will allocate from this memory region.

I think I can solve this issue in Virtio Console by changing calls
to kmalloc() to something like:

	if (virtio_has_feature(vdev, VIRTIO_CONSOLE_USE_DMA_MEM)) {
		dma_addr_t dma;
		buf = dma_alloc_coherent(dev, size, &dma, GFP_KERNEL);
	} else
		buf = kmalloc(count, GFP_KERNEL);

I'd like to get the opinion from you virtualization folks on this!
If you think it looks reasonable I might start cooking some patches...

Regards,
Sjur