virtio: Clear interrupt status register in virtio-blk
[seabios.git] / src / virtio-blk.c
index 16d9ad868ad4dd415493e0f3b1044afce96135b4..74af488e7366de41f4195bb94872210dff659ef6 100644 (file)
@@ -62,6 +62,12 @@ virtio_blk_read(struct disk_op_s *op)
 
     /* Reclaim virtqueue element */
     vring_get_buf(vq, NULL);
+
+    /* Clear interrupt status register.  Avoid leaving interrupts stuck if
+     * VRING_AVAIL_F_NO_INTERRUPT was ignored and interrupts were raised.
+     */
+    vp_get_isr(GET_GLOBAL(vdrive_g->ioaddr));
+
     return status == VIRTIO_BLK_S_OK ? DISK_RET_SUCCESS : DISK_RET_EBADTRACK;
 }