virtio, vhost, pc: fixes
Most notably this fixes a regression with vhost introduced by the pull before last. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJYLyObAAoJECgfDbjSjVRptPoIAK/4SdEAqS9pnXPekPZpIddV KHCFjj4Q68s22i0jpA1hxSXk1yQZIl56dnynU0DIAbCD1NYQIEmWx7uOJjppre9O L64V2s2ItEagFBGFwQDoJnUDIyEhth8KRqsa36V2YWJXYOaH1Rx1QNb9tX9R0aeb 2lVwYE+yig1Gc/2PAYJrcKWwM3iwWrYW6ssycP2LEOGOhBCIrGZwDJkqv7ayDVL9 j4tH2eBRrOAzm8c3fybC3OZkeLqcQJnbVONmD8kV0Q0IphcFvloJQCvcefb/3Ox1 HAz57JxZfpxMZPVtvgU8Q+xzElz8noCXg+6lF/dx71CKicwXxg4lsMF1LyKHUoU= =cuAn -----END PGP SIGNATURE----- Merge remote-tracking branch 'mst/tags/for_upstream' into staging virtio, vhost, pc: fixes Most notably this fixes a regression with vhost introduced by the pull before last. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Fri 18 Nov 2016 03:51:55 PM GMT # gpg: using RSA key 0x281F0DB8D28D5469 # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * mst/tags/for_upstream: acpi: Use apic_id_limit when calculating legacy ACPI table size ipmi: fix qemu crash while migrating with ipmi ivshmem: Fix 64 bit memory bar configuration virtio: set ISR on dataplane notifications virtio: access ISR atomically virtio: introduce grab/release_ioeventfd to fix vhost virtio-crypto: fix virtio_queue_set_notification() race Message-id: 1479484366-7977-1-git-send-email-mst@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
c36ed06e91
15 changed files with 151 additions and 57 deletions
|
|
@ -97,6 +97,16 @@ struct VirtioBusState {
|
|||
* Set if ioeventfd has been started.
|
||||
*/
|
||||
bool ioeventfd_started;
|
||||
|
||||
/*
|
||||
* Set if ioeventfd has been grabbed by vhost. When ioeventfd
|
||||
* is grabbed by vhost, we track its started/stopped state (which
|
||||
* depends in turn on the virtio status register), but do not
|
||||
* register a handler for the ioeventfd. When ioeventfd is
|
||||
* released, if ioeventfd_started is true we finally register
|
||||
* the handler so that QEMU's device model can use ioeventfd.
|
||||
*/
|
||||
int ioeventfd_grabbed;
|
||||
};
|
||||
|
||||
void virtio_bus_device_plugged(VirtIODevice *vdev, Error **errp);
|
||||
|
|
@ -131,6 +141,10 @@ bool virtio_bus_ioeventfd_enabled(VirtioBusState *bus);
|
|||
int virtio_bus_start_ioeventfd(VirtioBusState *bus);
|
||||
/* Stop the ioeventfd. */
|
||||
void virtio_bus_stop_ioeventfd(VirtioBusState *bus);
|
||||
/* Tell the bus that vhost is grabbing the ioeventfd. */
|
||||
int virtio_bus_grab_ioeventfd(VirtioBusState *bus);
|
||||
/* bus that vhost is not using the ioeventfd anymore. */
|
||||
void virtio_bus_release_ioeventfd(VirtioBusState *bus);
|
||||
/* Switch from/to the generic ioeventfd handler */
|
||||
int virtio_bus_set_host_notifier(VirtioBusState *bus, int n, bool assign);
|
||||
|
||||
|
|
|
|||
|
|
@ -137,6 +137,5 @@ void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev,
|
|||
void virtio_scsi_dataplane_setup(VirtIOSCSI *s, Error **errp);
|
||||
int virtio_scsi_dataplane_start(VirtIODevice *s);
|
||||
void virtio_scsi_dataplane_stop(VirtIODevice *s);
|
||||
void virtio_scsi_dataplane_notify(VirtIODevice *vdev, VirtIOSCSIReq *req);
|
||||
|
||||
#endif /* QEMU_VIRTIO_SCSI_H */
|
||||
|
|
|
|||
|
|
@ -181,6 +181,7 @@ void virtqueue_get_avail_bytes(VirtQueue *vq, unsigned int *in_bytes,
|
|||
unsigned max_in_bytes, unsigned max_out_bytes);
|
||||
|
||||
bool virtio_should_notify(VirtIODevice *vdev, VirtQueue *vq);
|
||||
void virtio_notify_irqfd(VirtIODevice *vdev, VirtQueue *vq);
|
||||
void virtio_notify(VirtIODevice *vdev, VirtQueue *vq);
|
||||
|
||||
void virtio_save(VirtIODevice *vdev, QEMUFile *f);
|
||||
|
|
@ -272,13 +273,14 @@ void virtio_queue_set_guest_notifier_fd_handler(VirtQueue *vq, bool assign,
|
|||
bool with_irqfd);
|
||||
int virtio_device_start_ioeventfd(VirtIODevice *vdev);
|
||||
void virtio_device_stop_ioeventfd(VirtIODevice *vdev);
|
||||
int virtio_device_grab_ioeventfd(VirtIODevice *vdev);
|
||||
void virtio_device_release_ioeventfd(VirtIODevice *vdev);
|
||||
bool virtio_device_ioeventfd_enabled(VirtIODevice *vdev);
|
||||
EventNotifier *virtio_queue_get_host_notifier(VirtQueue *vq);
|
||||
void virtio_queue_host_notifier_read(EventNotifier *n);
|
||||
void virtio_queue_aio_set_host_notifier_handler(VirtQueue *vq, AioContext *ctx,
|
||||
void (*fn)(VirtIODevice *,
|
||||
VirtQueue *));
|
||||
void virtio_irq(VirtQueue *vq);
|
||||
VirtQueue *virtio_vector_first_queue(VirtIODevice *vdev, uint16_t vector);
|
||||
VirtQueue *virtio_vector_next_queue(VirtQueue *vq);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue