lsi-scsi: reset in case of a serious problem

When the device reports a serious problem via SIST[01] registers, it
needs to be reset, otherwise the following requests will most likely
fail, too.

In particular, REPORT LUNS which fails (wrongly) with underflow in QEMU
makes all the following requests fail, too, rendering the device

Signed-off-by: Roman Kagan <>
diff --git a/src/hw/lsi-scsi.c b/src/hw/lsi-scsi.c
index b63430d..d264993 100644
--- a/src/hw/lsi-scsi.c
+++ b/src/hw/lsi-scsi.c
@@ -116,6 +116,8 @@
         u8 sist0 = inb(iobase + LSI_REG_SIST0);
         u8 sist1 = inb(iobase + LSI_REG_SIST1);
         if (sist0 || sist1) {
+            /* serious problem, can't continue w/o reset */
+            outb(LSI_ISTAT0_SRST, iobase + LSI_REG_ISTAT0);
             goto fail;
         if (dstat & 0x04) {