Here's a patchset with vhost support for upstream qemu. Note that irqchip/MSI is no longer required for vhost, but you should not expect performance gains from vhost unless in-kernel irqchip is enabled (which is not in upstream qemu now), and unless guest enables MSI. A follow-up patchset against qemu-kvm will add irqchip support.
Only virtio-pci is currently supported: I'm interested in supporting syborg/s390 as well, and tried to make APIs generic to make this possible. Also missing is packet socket backend: another team is working on this. Michael S. Tsirkin (15): exec: memory notifiers kvm: move kvm_set_phys_mem around kvm: move kvm to use memory notifiers kvm: add API to set ioeventfd notifier: event notifier implementation virtio: add notifier support virtio: add APIs for queue fields virtio: add status change callback virtio: move typedef to qemu-common virtio-pci: fill in notifier support tap: add interface to get device fd vhost: vhost net support tap: add vhost/vhostfd options tap: add API to retrieve vhost net header virtio-net: vhost net support Makefile.target | 2 + cpu-common.h | 19 ++ exec.c | 110 +++++++++- hw/notifier.c | 50 ++++ hw/notifier.h | 16 ++ hw/s390-virtio-bus.c | 3 + hw/syborg_virtio.c | 2 + hw/vhost.c | 603 ++++++++++++++++++++++++++++++++++++++++++++++++++ hw/vhost.h | 44 ++++ hw/vhost_net.c | 147 ++++++++++++ hw/vhost_net.h | 20 ++ hw/virtio-net.c | 67 ++++++- hw/virtio-pci.c | 68 ++++++ hw/virtio.c | 52 +++++- hw/virtio.h | 15 +- kvm-all.c | 330 ++++++++++++++++------------ kvm.h | 24 ++- net.c | 8 + net/tap.c | 43 ++++ net/tap.h | 5 + qemu-common.h | 2 + qemu-options.hx | 4 +- 22 files changed, 1470 insertions(+), 164 deletions(-) create mode 100644 hw/notifier.c create mode 100644 hw/notifier.h create mode 100644 hw/vhost.c create mode 100644 hw/vhost.h create mode 100644 hw/vhost_net.c create mode 100644 hw/vhost_net.h