From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NUpM4-0003go-Vu for qemu-devel@nongnu.org; Tue, 12 Jan 2010 17:36:53 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NUpM0-0003ef-Eq for qemu-devel@nongnu.org; Tue, 12 Jan 2010 17:36:52 -0500 Received: from [199.232.76.173] (port=38485 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NUpM0-0003eX-6c for qemu-devel@nongnu.org; Tue, 12 Jan 2010 17:36:48 -0500 Received: from mail-qy0-f199.google.com ([209.85.221.199]:44263) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NUpLz-0004va-Oh for qemu-devel@nongnu.org; Tue, 12 Jan 2010 17:36:47 -0500 Received: by qyk37 with SMTP id 37so9666342qyk.18 for ; Tue, 12 Jan 2010 14:36:47 -0800 (PST) Message-ID: <4B4CF97D.6070706@codemonkey.ws> Date: Tue, 12 Jan 2010 16:36:45 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <20100111171709.GD11936@redhat.com> In-Reply-To: <20100111171709.GD11936@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH-RFC 03/13] virtio: add iofd/irqfd support List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: qemu-devel@nongnu.org On 01/11/2010 11:17 AM, Michael S. Tsirkin wrote: > Add binding API to set iofd/irqfd support. > Will be used by vhost. > > Signed-off-by: Michael S. Tsirkin > --- > hw/virtio.c | 13 ++++++++++--- > hw/virtio.h | 4 ++++ > 2 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/hw/virtio.c b/hw/virtio.c > index 8e3c9ad..b9ec863 100644 > --- a/hw/virtio.c > +++ b/hw/virtio.c > @@ -572,6 +572,12 @@ VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size, > return&vdev->vq[i]; > } > > +void virtio_irq(VirtIODevice *vdev, VirtQueue *vq) > +{ > + vdev->isr |= 0x01; > + virtio_notify_vector(vdev, vq->vector); > +} > + > void virtio_notify(VirtIODevice *vdev, VirtQueue *vq) > { > /* Make sure used ring is updated before we check NO_INTERRUPT. */ > @@ -582,8 +588,7 @@ void virtio_notify(VirtIODevice *vdev, VirtQueue *vq) > (vq->inuse || vring_avail_idx(vq) != vq->last_avail_idx))) > return; > > - vdev->isr |= 0x01; > - virtio_notify_vector(vdev, vq->vector); > + virtio_irq(vdev, vq); > } > > void virtio_notify_config(VirtIODevice *vdev) > @@ -696,8 +701,10 @@ VirtIODevice *virtio_common_init(const char *name, uint16_t device_id, > vdev->queue_sel = 0; > vdev->config_vector = VIRTIO_NO_VECTOR; > vdev->vq = qemu_mallocz(sizeof(VirtQueue) * VIRTIO_PCI_QUEUE_MAX); > - for(i = 0; i< VIRTIO_PCI_QUEUE_MAX; i++) > + for(i = 0; i< VIRTIO_PCI_QUEUE_MAX; i++) { > vdev->vq[i].vector = VIRTIO_NO_VECTOR; > + vdev->vq[i].vdev = vdev; > + } > > vdev->name = name; > vdev->config_len = config_size; > diff --git a/hw/virtio.h b/hw/virtio.h > index ca840e1..193b3f9 100644 > --- a/hw/virtio.h > +++ b/hw/virtio.h > @@ -88,6 +88,8 @@ typedef struct { > int (*load_config)(void * opaque, QEMUFile *f); > int (*load_queue)(void * opaque, int n, QEMUFile *f); > unsigned (*get_features)(void * opaque); > + int (*set_irqfd)(void * opaque, int n, int fd, bool assigned); > + int (*set_queuefd)(void * opaque, int n, int fd, bool assigned); > I'd like to see us abstract things like irqfd a bit more. It should be a first class object with an method to raise/lower. In fact, you can probably just use qemu_irq. Regards, Anthony Liguori