summaryrefslogtreecommitdiffstats
path: root/sys/dev/firewire/firewire.c
diff options
context:
space:
mode:
authorsimokawa <simokawa@FreeBSD.org>2003-02-17 14:24:06 +0000
committersimokawa <simokawa@FreeBSD.org>2003-02-17 14:24:06 +0000
commit4461b7347a5ac842d81acb7d173b529b01f08cfc (patch)
treeeaa6fe6446b45079f313865ba5ea4cec9d860edc /sys/dev/firewire/firewire.c
parent9feeb8da9afd631cc085b959d4018b50564eb781 (diff)
downloadFreeBSD-src-4461b7347a5ac842d81acb7d173b529b01f08cfc.zip
FreeBSD-src-4461b7347a5ac842d81acb7d173b529b01f08cfc.tar.gz
* firewire.c
- Don't initiate bus reset even if probe failed for some nodes to prevent infinite bus reset loop. Problem Reported by: Pierre Beyssac <pb@fasterix.frmug.org> - Protect timeout routine with splfw() for 4-stable. * sbp.c - Make sure to release devq when start request.
Diffstat (limited to 'sys/dev/firewire/firewire.c')
-rw-r--r--sys/dev/firewire/firewire.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c
index 79e0e3a..a7af161 100644
--- a/sys/dev/firewire/firewire.c
+++ b/sys/dev/firewire/firewire.c
@@ -335,7 +335,7 @@ firewire_xfer_timeout(struct firewire_comm *fc)
struct tlabel *tl;
struct timeval tv;
struct timeval split_timeout;
- int i;
+ int i, s;
split_timeout.tv_sec = 6;
split_timeout.tv_usec = 0;
@@ -343,6 +343,7 @@ firewire_xfer_timeout(struct firewire_comm *fc)
microtime(&tv);
timevalsub(&tv, &split_timeout);
+ s = splfw();
for (i = 0; i < 0x40; i ++) {
while ((tl = STAILQ_FIRST(&fc->tlabels[i])) != NULL) {
xfer = tl->xfer;
@@ -365,6 +366,7 @@ firewire_xfer_timeout(struct firewire_comm *fc)
}
}
}
+ splx(s);
}
static void
@@ -1641,9 +1643,11 @@ fw_attach_dev(struct firewire_comm *fc)
if (i > 0)
printf("fw_attach_dev: %d pending handlers called\n", i);
if (fc->retry_count > 0) {
- printf("retry_count = %d\n", fc->retry_count);
+ printf("probe failed for %d node\n", fc->retry_count);
+#if 0
callout_reset(&fc->retry_probe_callout, hz*2,
(void *)fc->ibr, (void *)fc);
+#endif
}
return;
}
OpenPOWER on IntegriCloud