summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorsimokawa <simokawa@FreeBSD.org>2002-10-21 15:36:59 +0000
committersimokawa <simokawa@FreeBSD.org>2002-10-21 15:36:59 +0000
commitee934c85cbcd0b6f9e9c0dd6f6aa74ad30ba6439 (patch)
tree67a1b3ccf73c05965c02da5acf00b1264778143d /sys/dev
parent219e872ca77f094e890b79fb4a79153428390bad (diff)
downloadFreeBSD-src-ee934c85cbcd0b6f9e9c0dd6f6aa74ad30ba6439.zip
FreeBSD-src-ee934c85cbcd0b6f9e9c0dd6f6aa74ad30ba6439.tar.gz
- Abort all OCBs for timeout.
- Improve warning message.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/firewire/sbp.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/sys/dev/firewire/sbp.c b/sys/dev/firewire/sbp.c
index 0f1f573..45cbce8 100644
--- a/sys/dev/firewire/sbp.c
+++ b/sys/dev/firewire/sbp.c
@@ -1664,7 +1664,11 @@ sbp_timeout(void *arg)
/* XXX need reset? */
s = splfw();
+#if 1
+ sbp_abort_all_ocbs(sdev, CAM_CMD_TIMEOUT);
+#else
sbp_abort_ocb(ocb, CAM_CMD_TIMEOUT);
+#endif
splx(s);
return;
}
@@ -1974,6 +1978,7 @@ sbp_execute_ocb(void *arg, bus_dma_segment_t *segments, int seg, int error)
struct sbp_ocb *ocb;
struct sbp_ocb *prev;
union ccb *ccb;
+ bus_dma_segment_t *s;
if (error)
printf("sbp_execute_ocb: error=%d\n", error);
@@ -1993,11 +1998,15 @@ SBP_DEBUG(1)
printf("\n");
END_DEBUG
for (i = 0; i < seg; i++) {
- if (segments[i].ds_len < 16)
- printf("sbp_execute_ocb: segment length is "
- "less than 16.\n");
- ocb->ind_ptr[i].hi = htonl(segments[i].ds_len << 16);
- ocb->ind_ptr[i].lo = htonl(segments[i].ds_addr);
+ s = &segments[i];
+#if 1 /* XXX LSI Logic "< 16 byte" bug might be hit */
+ if (s->ds_len < 16)
+ printf("sbp_execute_ocb: warning, "
+ "segment length(%d) is less than 16."
+ "(seg=%d/%d)\n", s->ds_len, i+1, seg);
+#endif
+ ocb->ind_ptr[i].hi = htonl(s->ds_len << 16);
+ ocb->ind_ptr[i].lo = htonl(s->ds_addr);
}
ocb->orb[4] |= htonl(ORB_CMD_PTBL | seg);
}
OpenPOWER on IntegriCloud