title: In virtio, why does guest notifier and host notifier use ioeventfd and irqfd respectively?
body: <p>I know that in virtio, when a guest try to notify the host, it writes to a device io address, which causes vm-exit and captured by the hypervisor. The write operation will signal to a eventfd struct, then awake the sleeping vhost_worker thread to deal with the packets in virtqueue.</p>
  
  <p>When the host try to notify the guest, it also uses eventfd to trigger interrupt inject and needs a vm-exit.</p>
  
  <p>My question is: does these two process have to be so complicated? Why don't we just put a eventfd struct into the shared memory between virtio front-end and back-end. Then if a guest try to notify the host, it signals to the eventfd, then the vhost_worker thread is awaken, which seems that we do not need vm-exit. For the guest notifier, it can be done in the same way.
  Why can't we notify in this simple way? </p>