From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Stefan Hajnoczi <stefanha@redhat.com>,
Bin Wu <wu.wubin@huawei.com>,
Anthony Liguori <aliguori@amazon.com>
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 [thread overview]
Message-ID: <1415018633-16041-23-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1415018633-16041-1-git-send-email-mst@redhat.com>
From: Bin Wu <wu.wubin@huawei.com>
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 <wu.wubin@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
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
next prev parent reply other threads:[~2014-11-03 12:46 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-03 12:44 [Qemu-devel] [PULL 00/29] pc, virtio, misc bugfixes Michael S. Tsirkin
2014-11-03 12:44 ` [Qemu-devel] [PULL 01/29] smbios: Fix assertion on socket count calculation Michael S. Tsirkin
2014-11-03 12:44 ` [Qemu-devel] [PULL 02/29] well-defined listing order for machine types Michael S. Tsirkin
2014-11-03 12:44 ` [Qemu-devel] [PULL 03/29] i386/pc: add piix and q35 machtypes to sorting families for -M \? Michael S. Tsirkin
2014-11-03 12:44 ` [Qemu-devel] [PULL 04/29] pc: Fix disabling of vapic for compat PC models Michael S. Tsirkin
2014-11-03 12:44 ` [Qemu-devel] [PULL 05/29] i386: Add an ACPI_EXTRACT_NAME_BUFFER16 directive Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 06/29] pcie: change confused comment clearer Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 07/29] virtio-pci: fix migration for pci bus master Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 08/29] intel_iommu: fix VTD_SID_TO_BUS Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 09/29] tests: fix rebuild-expected-aml.sh for acpi-test rename Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 10/29] acpi: create separate file for TCPA log Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 11/29] acpi/cpu: add cpu hotplug callback function to match hotplug_handler API Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 12/29] acpi:ich9: convert cpu hotplug to " Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 13/29] acpi:piix4: " Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 14/29] pc: add cpu hotplug handler to PC_MACHINE Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 15/29] pc: Update rtc_cmos in pc_cpu_plug Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 16/29] qom/cpu: remove the unused CPU hot-plug notifier Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 17/29] cpu-hotplug: rename function for better readability Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 18/29] acpi/cpu-hotplug: introduce helper function to keep bit setting in one place Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 19/29] -machine vmport=off: Allow disabling of VMWare ioport emulation Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 20/29] hw/pci: fixed error flow in pci_qdev_init Michael S. Tsirkin
2014-11-03 12:45 ` [Qemu-devel] [PULL 21/29] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Michael S. Tsirkin
2014-11-03 12:45 ` Michael S. Tsirkin [this message]
2014-11-03 12:45 ` [Qemu-devel] [PULL 23/29] pc: Add pc_compat_2_1() function Michael S. Tsirkin
2014-11-03 12:46 ` [Qemu-devel] [PULL 24/29] smbios: Encode UUID according to SMBIOS specification Michael S. Tsirkin
2014-11-03 12:46 ` [Qemu-devel] [PULL 25/29] hw/i386/acpi-build.c: Fix memory leak in acpi_build_tables_cleanup() Michael S. Tsirkin
2014-11-03 12:46 ` [Qemu-devel] [PULL 26/29] qemu-char: fix tcp_get_fds Michael S. Tsirkin
2014-11-03 12:46 ` [Qemu-devel] [PULL 27/29] vhost-user: fix mmap offset calculation Michael S. Tsirkin
2014-11-03 12:46 ` [Qemu-devel] [PULL 28/29] vga: add default display to machine class Michael S. Tsirkin
2014-11-03 12:46 ` [Qemu-devel] [PULL 29/29] vga: flip qemu 2.2 pc machine types from cirrus to stdvga Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1415018633-16041-23-git-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=aliguori@amazon.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=wu.wubin@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).