From 4dc32af0f999f17ab5501713828249a5d9013b58 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 4 Feb 2008 23:50:04 -0500 Subject: [PATCH] --- yaml --- r: 82822 b: refs/heads/master c: 81a8deab1ce3816c6a89e3429e234e7d3686da94 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/virtio/virtio_ring.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 7c77b61de4f1..736354f1a9d4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6e5aa7efb27aec7e55b6463fa2c8db594c4226fa +refs/heads/master: 81a8deab1ce3816c6a89e3429e234e7d3686da94 diff --git a/trunk/drivers/virtio/virtio_ring.c b/trunk/drivers/virtio/virtio_ring.c index 9849babd6b37..9859213aa658 100644 --- a/trunk/drivers/virtio/virtio_ring.c +++ b/trunk/drivers/virtio/virtio_ring.c @@ -255,6 +255,13 @@ irqreturn_t vring_interrupt(int irq, void *_vq) if (unlikely(vq->broken)) return IRQ_HANDLED; + /* Other side may have missed us turning off the interrupt, + * but we should preserve disable semantic for virtio users. */ + if (unlikely(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT)) { + pr_debug("virtqueue interrupt after disable for %p\n", vq); + return IRQ_HANDLED; + } + pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback); if (vq->vq.callback) vq->vq.callback(&vq->vq);