[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 22/29] hw/virtio/vring/event_idx: fix the vring_avail
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 22/29] hw/virtio/vring/event_idx: fix the vring_avail_event error |
Date: |
Mon, 3 Nov 2014 14:45:54 +0200 |
From: Bin Wu <address@hidden>
The event idx in virtio is an effective way to reduce the number of
interrupts and exits of the guest. When the guest puts an request
into the virtio ring, it doesn't exit immediately to inform the
backend. Instead, the guest checks the "avail" event idx to determine
the notification.
In virtqueue_pop, when a request is poped, the current avail event
idx should be set to the number of vq->last_avail_idx.
Signed-off-by: Bin Wu <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
---
hw/virtio/dataplane/vring.c | 8 ++++----
hw/virtio/virtio.c | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/hw/virtio/dataplane/vring.c b/hw/virtio/dataplane/vring.c
index 372706a..61f6d83 100644
--- a/hw/virtio/dataplane/vring.c
+++ b/hw/virtio/dataplane/vring.c
@@ -352,10 +352,6 @@ int vring_pop(VirtIODevice *vdev, Vring *vring,
goto out;
}
- if (vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) {
- vring_avail_event(&vring->vr) = vring->vr.avail->idx;
- }
-
i = head;
do {
if (unlikely(i >= num)) {
@@ -392,6 +388,10 @@ int vring_pop(VirtIODevice *vdev, Vring *vring,
/* On success, increment avail index. */
vring->last_avail_idx++;
+ if (vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) {
+ vring_avail_event(&vring->vr) = vring->last_avail_idx;
+ }
+
return head;
out:
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 2c236bf..013979a 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -469,7 +469,7 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
i = head = virtqueue_get_head(vq, vq->last_avail_idx++);
if (vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) {
- vring_avail_event(vq, vring_avail_idx(vq));
+ vring_avail_event(vq, vq->last_avail_idx);
}
if (vring_desc_flags(vdev, desc_pa, i) & VRING_DESC_F_INDIRECT) {
--
MST
- [Qemu-devel] [PULL 11/29] acpi/cpu: add cpu hotplug callback function to match hotplug_handler API, (continued)
- [Qemu-devel] [PULL 11/29] acpi/cpu: add cpu hotplug callback function to match hotplug_handler API, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 13/29] acpi:piix4: convert cpu hotplug to hotplug_handler API, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 14/29] pc: add cpu hotplug handler to PC_MACHINE, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 15/29] pc: Update rtc_cmos in pc_cpu_plug, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 16/29] qom/cpu: remove the unused CPU hot-plug notifier, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 17/29] cpu-hotplug: rename function for better readability, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 18/29] acpi/cpu-hotplug: introduce helper function to keep bit setting in one place, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 19/29] -machine vmport=off: Allow disabling of VMWare ioport emulation, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 20/29] hw/pci: fixed error flow in pci_qdev_init, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 21/29] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 22/29] hw/virtio/vring/event_idx: fix the vring_avail_event error,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 23/29] pc: Add pc_compat_2_1() function, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 24/29] smbios: Encode UUID according to SMBIOS specification, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 26/29] qemu-char: fix tcp_get_fds, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 25/29] hw/i386/acpi-build.c: Fix memory leak in acpi_build_tables_cleanup(), Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 28/29] vga: add default display to machine class, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 29/29] vga: flip qemu 2.2 pc machine types from cirrus to stdvga, Michael S. Tsirkin, 2014/11/03
- [Qemu-devel] [PULL 27/29] vhost-user: fix mmap offset calculation, Michael S. Tsirkin, 2014/11/03