From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NkjQ7-0000Ys-L1 for qemu-devel@nongnu.org; Thu, 25 Feb 2010 14:30:47 -0500 Received: from [199.232.76.173] (port=46548 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NkjQ7-0000YY-60 for qemu-devel@nongnu.org; Thu, 25 Feb 2010 14:30:47 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NkjQ5-0001i0-GS for qemu-devel@nongnu.org; Thu, 25 Feb 2010 14:30:46 -0500 Received: from mail-iw0-f177.google.com ([209.85.223.177]:51411) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NkjQ5-0001hs-79 for qemu-devel@nongnu.org; Thu, 25 Feb 2010 14:30:45 -0500 Received: by iwn7 with SMTP id 7so5476077iwn.4 for ; Thu, 25 Feb 2010 11:30:44 -0800 (PST) Message-ID: <4B86CFE0.1000901@codemonkey.ws> Date: Thu, 25 Feb 2010 13:30:40 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <70c29d6d75bc3ee2efc89f5c3f8be833d660a1be.1267122331.git.mst@redhat.com> In-Reply-To: <70c29d6d75bc3ee2efc89f5c3f8be833d660a1be.1267122331.git.mst@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCHv2 08/12] virtio-pci: fill in notifier support List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: amit.shah@redhat.com, quintela@redhat.com, qemu-devel@nongnu.org, kraxel@redhat.com 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 > --- > 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