diff options
author | vkashyap <vkashyap@FreeBSD.org> | 2005-04-29 20:03:20 +0000 |
---|---|---|
committer | vkashyap <vkashyap@FreeBSD.org> | 2005-04-29 20:03:20 +0000 |
commit | a8688612688a696439137cf2f259bb664452af9f (patch) | |
tree | 03f4e160314a098c13db0b37d9520f6fe4e0cfac /sys/dev/twa | |
parent | 5acac5def141d4709680819f06b1a8c4fb8c641a (diff) | |
download | FreeBSD-src-a8688612688a696439137cf2f259bb664452af9f.zip FreeBSD-src-a8688612688a696439137cf2f259bb664452af9f.tar.gz |
Make call to tw_cl_deferred_interrupt in twa_poll, not dependent on the
return value from tw_cl_interrupt.
Diffstat (limited to 'sys/dev/twa')
-rw-r--r-- | sys/dev/twa/tw_osl_cam.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/dev/twa/tw_osl_cam.c b/sys/dev/twa/tw_osl_cam.c index 39277bd..1480cd0 100644 --- a/sys/dev/twa/tw_osl_cam.c +++ b/sys/dev/twa/tw_osl_cam.c @@ -482,8 +482,18 @@ twa_poll(struct cam_sim *sim) struct twa_softc *sc = (struct twa_softc *)(cam_sim_softc(sim)); tw_osli_dbg_dprintf(3, sc, "entering; sc = %p", sc); - if (tw_cl_interrupt(&(sc->ctlr_handle))) - tw_cl_deferred_interrupt(&(sc->ctlr_handle)); + /* + * It's been observed that twa_poll can get called (from + * dashutdown --> xpt_polled_action) even when interrupts are + * active, in which case, the ISR might clear the interrupt, + * leaving the call to tw_cl_interrupt below, no way of determining + * that the response from firmware is ready, resulting in + * tw_cl_deferred_interrupt never getting called. To cover this case, + * we will make the call to tw_cl_deferred_interrupt not dependent + * on the return value from tw_cl_interrupt. + */ + tw_cl_interrupt(&(sc->ctlr_handle)); + tw_cl_deferred_interrupt(&(sc->ctlr_handle)); tw_osli_dbg_dprintf(3, sc, "exiting; sc = %p", sc); } |