From: Sjur Brændeland <sjur.brandel...@stericsson.com> Add an inline function for vring_interrupt that can handle host side virtio queues.
Signed-off-by: Sjur Brændeland <sjur.brandel...@stericsson.com> --- drivers/virtio/virtio_ring.c | 4 ++-- include/linux/virtio_ring.h | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index ead47d7..67f7bcd 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -571,7 +571,7 @@ void *virtqueue_detach_unused_buf(struct virtqueue *_vq) } EXPORT_SYMBOL_GPL(virtqueue_detach_unused_buf); -irqreturn_t vring_interrupt(int irq, void *_vq) +irqreturn_t __vring_interrupt(int irq, void *_vq) { struct vring_virtqueue *vq = to_vvq(_vq); @@ -589,7 +589,7 @@ irqreturn_t vring_interrupt(int irq, void *_vq) return IRQ_HANDLED; } -EXPORT_SYMBOL_GPL(vring_interrupt); +EXPORT_SYMBOL_GPL(__vring_interrupt); struct virtqueue *vring_new_virtqueue(unsigned int index, unsigned int num, diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h index 01c0f59..d0aa046 100644 --- a/include/linux/virtio_ring.h +++ b/include/linux/virtio_ring.h @@ -33,7 +33,18 @@ void vring_del_virtqueue(struct virtqueue *vq); /* Filter out transport-specific feature bits. */ void vring_transport_features(struct virtio_device *vdev); -irqreturn_t vring_interrupt(int irq, void *_vq); +irqreturn_t __vring_interrupt(int irq, void *_vq); +static inline irqreturn_t vring_interrupt(int irq, void *_vq) +{ + struct virtqueue *vq = _vq; + if (!vq->callback) + return IRQ_HANDLED; + if (vq->reversed) { + vq->callback(vq); + return IRQ_HANDLED; + } + return __vring_interrupt(irq, vq); +} unsigned vring_next_desc(struct vring_desc *desc); -- 1.7.5.4 _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization