diff -urN -I FBSDID /tmp/mfi/mfi.c mfi/mfi.c --- /tmp/mfi/mfi.c 2013-06-06 20:36:22.000000000 -0400 +++ mfi/mfi.c 2013-06-05 10:02:51.000000000 -0400 @@ -3765,9 +3765,9 @@ * Fail the command instead of leaving it on * the queue where it could remain stuck forever */ - mfi_remove_busy(cm); + /* mfi_remove_busy(cm); cm->cm_error = ETIMEDOUT; - mfi_complete(sc, cm); + mfi_complete(sc, cm); */ timedout++; } } diff -urN -I FBSDID /tmp/mfi/mfi_tbolt.c mfi/mfi_tbolt.c --- /tmp/mfi/mfi_tbolt.c 2013-06-06 20:36:23.000000000 -0400 +++ mfi/mfi_tbolt.c 2013-06-06 18:19:18.000000000 -0400 @@ -582,6 +582,10 @@ } if (sc->mfi_detaching) return; + + /* Do a dummy read to flush the interrupt ACK that we just performed */ + (void)sc->mfi_read_fw_status(sc); + mtx_lock(&sc->mfi_io_lock); mfi_tbolt_complete_cmd(sc); sc->mfi_flags &= ~MFI_FLAGS_QFRZN; @@ -727,7 +731,7 @@ next: sc->last_reply_idx++; if (sc->last_reply_idx >= sc->mfi_max_fw_cmds) { - MFI_WRITE4(sc, MFI_RPI, sc->last_reply_idx); + //MFI_WRITE4(sc, MFI_RPI, sc->last_reply_idx); sc->last_reply_idx = 0; } @@ -753,7 +757,7 @@ return; /* update replyIndex to FW */ - if (sc->last_reply_idx) + //if (sc->last_reply_idx) MFI_WRITE4(sc, MFI_RPI, sc->last_reply_idx); return;