diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2012-12-24 17:35:27 +0200 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2013-01-07 19:42:23 +0200 |
commit | f1d0f15a6d46bd47e7658e44a004c8898c8cb91e (patch) | |
tree | d660f5f1ae105ade8db5eb39fa52677990a6e8a5 /hw/virtio.h | |
parent | 774345f981854b026e24aeb0833311183a8e8067 (diff) |
virtio: backend virtqueue notifier masking
some backends (notably vhost) can mask events
at their source in a way that is more efficient
than masking through kvm.
Specifically
- masking in kvm uses rcu write side so it has high latency
- in kvm on unmask we always send an interrupt
masking at source does not have these issues.
Add such support in virtio.h and use in virtio-pci.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/virtio.h')
-rw-r--r-- | hw/virtio.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/hw/virtio.h b/hw/virtio.h index 329b426fc0..b9f1873fd6 100644 --- a/hw/virtio.h +++ b/hw/virtio.h @@ -126,6 +126,19 @@ struct VirtIODevice void (*set_config)(VirtIODevice *vdev, const uint8_t *config); void (*reset)(VirtIODevice *vdev); void (*set_status)(VirtIODevice *vdev, uint8_t val); + /* Test and clear event pending status. + * Should be called after unmask to avoid losing events. + * If backend does not support masking, + * must check in frontend instead. + */ + bool (*guest_notifier_pending)(VirtIODevice *vdev, int n); + /* Mask/unmask events from this vq. Any events reported + * while masked will become pending. + * If backend does not support masking, + * must mask in frontend instead. + */ + void (*guest_notifier_mask)(VirtIODevice *vdev, int n, bool mask); + VirtQueue *vq; const VirtIOBindings *binding; DeviceState *binding_opaque; |