diff options
author | gibbs <gibbs@FreeBSD.org> | 2001-03-17 00:12:15 +0000 |
---|---|---|
committer | gibbs <gibbs@FreeBSD.org> | 2001-03-17 00:12:15 +0000 |
commit | 29db911e9bf846311e7bd55cd9a4565563dd6692 (patch) | |
tree | 788463399bfc2bfc0b0f33189e46c7bb9aa100fd /sys | |
parent | e9585fec02b87ff5034626ead2ae4fc59730dcf3 (diff) | |
download | FreeBSD-src-29db911e9bf846311e7bd55cd9a4565563dd6692.zip FreeBSD-src-29db911e9bf846311e7bd55cd9a4565563dd6692.tar.gz |
This is an MFC candidate.
Add the AAC_DEBUG option to enable debugging in the aac driver.
Correct a race condition in the interrupt handler where the
controller may queue a fib to a response queue after the driver
has serviced the queue but before the interrupt is cleared.
This could leave a completed fib stranded in the response queue
unless another I/O completed and generated another interrupt.
Reviewed by: msmith
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/aac/aac.c | 4 | ||||
-rw-r--r-- | sys/dev/aac/aac_debug.c | 2 | ||||
-rw-r--r-- | sys/dev/aac/aacvar.h | 2 |
3 files changed, 6 insertions, 2 deletions
diff --git a/sys/dev/aac/aac.c b/sys/dev/aac/aac.c index 8d25a71..ff564f1 100644 --- a/sys/dev/aac/aac.c +++ b/sys/dev/aac/aac.c @@ -483,14 +483,14 @@ aac_intr(void *arg) /* controller has a message for us? */ if (reason & AAC_DB_COMMAND_READY) { - aac_host_command(sc); AAC_CLEAR_ISTATUS(sc, AAC_DB_COMMAND_READY); + aac_host_command(sc); } /* controller has a response for us? */ if (reason & AAC_DB_RESPONSE_READY) { - aac_host_response(sc); AAC_CLEAR_ISTATUS(sc, AAC_DB_RESPONSE_READY); + aac_host_response(sc); } /* spurious interrupts that we don't use - reset the mask and clear the interrupts */ diff --git a/sys/dev/aac/aac_debug.c b/sys/dev/aac/aac_debug.c index 3298502..d4b7cb9 100644 --- a/sys/dev/aac/aac_debug.c +++ b/sys/dev/aac/aac_debug.c @@ -47,6 +47,7 @@ #include <dev/aac/aac_ioctl.h> #include <dev/aac/aacvar.h> +#ifdef AAC_DEBUG void aac_printstate0(void); void aac_intr0(void); @@ -434,3 +435,4 @@ aac_print_aif(struct aac_softc *sc, struct aac_aif_command *aif) break; } } +#endif diff --git a/sys/dev/aac/aacvar.h b/sys/dev/aac/aacvar.h index 0869ccb..2870531 100644 --- a/sys/dev/aac/aacvar.h +++ b/sys/dev/aac/aacvar.h @@ -95,6 +95,8 @@ ******************************************************************************** ********************************************************************************/ +#include "opt_aac.h" + #if __FreeBSD_version >= 500005 # include <sys/taskqueue.h> #endif |