diff options
Diffstat (limited to 'drivers/virtio/virtio_ring.c')
-rw-r--r-- | drivers/virtio/virtio_ring.c | 7 |
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); |