qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCHv2 08/12] virtio-pci: fill in notifier support


From: Anthony Liguori
Subject: [Qemu-devel] Re: [PATCHv2 08/12] virtio-pci: fill in notifier support
Date: Thu, 25 Feb 2010 13:30:40 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091209 Fedora/3.0-4.fc12 Lightning/1.0pre Thunderbird/3.0

On 02/25/2010 12:28 PM, Michael S. Tsirkin wrote:
Support host/guest notifiers in virtio-pci.
The last one only with kvm, that's okay
because vhost relies on kvm anyway.

Note on kvm usage: kvm ioeventfd API
is implemented on non-kvm systems as well,
this is the reason we don't need if (kvm_enabled())
around it.

Signed-off-by: Michael S. Tsirkin<address@hidden>
---
  hw/virtio-pci.c |   62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index 006ff38..3f1214c 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -24,6 +24,7 @@
  #include "net.h"
  #include "block_int.h"
  #include "loader.h"
+#include "kvm.h"

  /* from Linux's linux/virtio_pci.h */

@@ -398,6 +399,65 @@ static unsigned virtio_pci_get_features(void *opaque)
      return proxy->host_features;
  }

+static void virtio_pci_guest_notifier_read(void *opaque)
+{
+    VirtQueue *vq = opaque;
+    EventNotifier *n = virtio_queue_guest_notifier(vq);
+    if (event_notifier_test_and_clear(n)) {
+        virtio_irq(vq);
+    }
+}
+
+static int virtio_pci_guest_notifier(void *opaque, int n, bool assign)
+{
+    VirtIOPCIProxy *proxy = opaque;
+    VirtQueue *vq = virtio_queue(proxy->vdev, n);
+    EventNotifier *notifier = virtio_queue_guest_notifier(vq);
+
+    if (assign) {
+        int r = event_notifier_init(notifier, 0);
+       if (r<  0)
+               return r;
+        qemu_set_fd_handler(event_notifier_get_fd(notifier),
+                            virtio_pci_guest_notifier_read, NULL, vq);

While not super important, it would be nice to have this a bit more common. IOW:

r = read_event_notifier_init(notifier, virtio_pci_guest_notifier_read, vq);

and:

r = kvm_eventfd_notifier_init(notifier, proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY, n, assign);

Regards,

Anthony Liguori




reply via email to

[Prev in Thread] Current Thread [Next in Thread]