aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/virtio/virtio_ring.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 9849babd6b37..9859213aa658 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -255,6 +255,13 @@ irqreturn_t vring_interrupt(int irq, void *_vq)
255 if (unlikely(vq->broken)) 255 if (unlikely(vq->broken))
256 return IRQ_HANDLED; 256 return IRQ_HANDLED;
257 257
258 /* Other side may have missed us turning off the interrupt,
259 * but we should preserve disable semantic for virtio users. */
260 if (unlikely(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT)) {
261 pr_debug("virtqueue interrupt after disable for %p\n", vq);
262 return IRQ_HANDLED;
263 }
264
258 pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback); 265 pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback);
259 if (vq->vq.callback) 266 if (vq->vq.callback)
260 vq->vq.callback(&vq->vq); 267 vq->vq.callback(&vq->vq);