summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>2001-03-17 00:12:15 +0000
committergibbs <gibbs@FreeBSD.org>2001-03-17 00:12:15 +0000
commit29db911e9bf846311e7bd55cd9a4565563dd6692 (patch)
tree788463399bfc2bfc0b0f33189e46c7bb9aa100fd /sys
parente9585fec02b87ff5034626ead2ae4fc59730dcf3 (diff)
downloadFreeBSD-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.c4
-rw-r--r--sys/dev/aac/aac_debug.c2
-rw-r--r--sys/dev/aac/aacvar.h2
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
OpenPOWER on IntegriCloud