mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
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>
This commit is contained in:
parent
774345f981
commit
f1d0f15a6d
2 changed files with 83 additions and 9 deletions
13
hw/virtio.h
13
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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue