diff options
| -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); |
