summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@cvs.openbsd.org>2014-03-13 23:04:15 +0000
committerMark Kettenis <kettenis@cvs.openbsd.org>2014-03-13 23:04:15 +0000
commit8349da135853be9647d81736990e038efaa3f4ff (patch)
tree4fe4268141bfe42b89dfaf6bccff48966f542fb9 /sys/dev
parentffaca5d3c9f049843dd1c9b4e53574629ddcd863 (diff)
When polling for command completion, clear the interrupt before reading the
response queue in pointer register. Interrupts seem to be edge-triggered so if we don't do this we might miss command completions. Seems to fix the remaining issues on the 1040B as found on the Origin 200.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/qlw.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/dev/ic/qlw.c b/sys/dev/ic/qlw.c
index 159c7e02da0..d0217f39c61 100644
--- a/sys/dev/ic/qlw.c
+++ b/sys/dev/ic/qlw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: qlw.c,v 1.11 2014/03/13 10:31:53 kettenis Exp $ */
+/* $OpenBSD: qlw.c,v 1.12 2014/03/13 23:04:14 kettenis Exp $ */
/*
* Copyright (c) 2011 David Gwynne <dlg@openbsd.org>
@@ -901,6 +901,8 @@ qlw_scsi_cmd_poll(struct qlw_softc *sc)
continue;
}
+ qlw_clear_isr(sc, isr);
+
rspin = qlw_queue_read(sc, QLW_RESP_IN);
if (rspin != sc->sc_last_resp_id) {
ccb = qlw_handle_resp(sc, sc->sc_last_resp_id);
@@ -911,8 +913,6 @@ qlw_scsi_cmd_poll(struct qlw_softc *sc)
qlw_queue_write(sc, QLW_RESP_OUT, sc->sc_last_resp_id);
}
-
- qlw_clear_isr(sc, isr);
}
return (ccb);