From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=45304 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OHHN8-0003KG-G4 for qemu-devel@nongnu.org; Wed, 26 May 2010 10:14:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OHHIx-00046v-QT for qemu-devel@nongnu.org; Wed, 26 May 2010 10:09:59 -0400 Received: from mail-wy0-f173.google.com ([74.125.82.173]:38260) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OHHIx-00046k-L8 for qemu-devel@nongnu.org; Wed, 26 May 2010 10:09:55 -0400 Received: by wyf28 with SMTP id 28so1007524wyf.4 for ; Wed, 26 May 2010 07:09:55 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Wed, 26 May 2010 16:09:34 +0200 Message-Id: <1274882978-9875-5-git-send-email-pbonzini@redhat.com> In-Reply-To: <1274882978-9875-1-git-send-email-pbonzini@redhat.com> References: <1274882978-9875-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 4/8] add and use virtqueue_from_guest_notifier List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This changes the opaque pointer passed to the handler, from being the virtqueue to being the eventnotifier. It is useful as soon as the eventnotifier will be able to set its own (type-safe) handler. Signed-off-by: Paolo Bonzini --- I don't have a vhost-enabled machine yet. So only compile-tested for now, but pretty trivial. hw/virtio-pci.c | 6 +++--- hw/virtio.c | 5 +++++ hw/virtio.h | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index 7ddf612..988c75c 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -421,8 +421,8 @@ static unsigned virtio_pci_get_features(void *opaque) static void virtio_pci_guest_notifier_read(void *opaque) { - VirtQueue *vq = opaque; - EventNotifier *n = virtio_queue_get_guest_notifier(vq); + EventNotifier *n = opaque; + VirtQueue *vq = virtqueue_from_guest_notifier(n); if (event_notifier_test_and_clear(n)) { virtio_irq(vq); } @@ -440,7 +440,7 @@ static int virtio_pci_set_guest_notifier(void *opaque, int n, bool assign) return r; } qemu_set_fd_handler(event_notifier_get_fd(notifier), - virtio_pci_guest_notifier_read, NULL, vq); + virtio_pci_guest_notifier_read, NULL, notifier); } else { qemu_set_fd_handler(event_notifier_get_fd(notifier), NULL, NULL, NULL); diff --git a/hw/virtio.c b/hw/virtio.c index 4475bb3..bfce44b 100644 --- a/hw/virtio.c +++ b/hw/virtio.c @@ -805,6 +805,11 @@ VirtQueue *virtio_get_queue(VirtIODevice *vdev, int n) return vdev->vq + n; } +VirtQueue *virtqueue_from_guest_notifier(EventNotifier *e) +{ + return container_of(e, VirtQueue, guest_notifier); +} + EventNotifier *virtio_queue_get_guest_notifier(VirtQueue *vq) { return &vq->guest_notifier; diff --git a/hw/virtio.h b/hw/virtio.h index e4306cd..d6a5b00 100644 --- a/hw/virtio.h +++ b/hw/virtio.h @@ -210,6 +210,7 @@ target_phys_addr_t virtio_queue_get_ring_size(VirtIODevice *vdev, int n); uint16_t virtio_queue_get_last_avail_idx(VirtIODevice *vdev, int n); void virtio_queue_set_last_avail_idx(VirtIODevice *vdev, int n, uint16_t idx); VirtQueue *virtio_get_queue(VirtIODevice *vdev, int n); +VirtQueue *virtqueue_from_guest_notifier(EventNotifier *vq); EventNotifier *virtio_queue_get_guest_notifier(VirtQueue *vq); EventNotifier *virtio_queue_get_host_notifier(VirtQueue *vq); void virtio_irq(VirtQueue *vq); -- 1.6.6.1