diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2014-03-13 23:04:15 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2014-03-13 23:04:15 +0000 |
commit | 8349da135853be9647d81736990e038efaa3f4ff (patch) | |
tree | 4fe4268141bfe42b89dfaf6bccff48966f542fb9 /sys/dev | |
parent | ffaca5d3c9f049843dd1c9b4e53574629ddcd863 (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.c | 6 |
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); |