Virtio is really a DMA engine. One of the nice things about it's
design is
that you can do things like transparent bounce buffering if needed.
Adding
a mechanism like this breaks this abstract and turns virtio into
something
that's more than I think it should be.
For guest shared memory, what makes sense to me is to make use of
uio_pci
within a guest to map bars in userspace. The device can have the
first bar
map a small MMIO region that is tied to a ioeventfd with KVM. With
just
qemu, it can be tied to a normal eventfd. You can use irqfd with
KVM to tie
an eventfd to the PCI irq. Likewise, you can use a normal eventfd to
emulate that. I'd suggest using a /dev/shm file to act as the
shared memory
segment. You'll need a little magic within qemu_ram_alloc() to use
this
(maybe qemu_ram_alloc() should take a context parameter so this can be
setup).