diff options
author | simokawa <simokawa@FreeBSD.org> | 2002-10-21 15:36:59 +0000 |
---|---|---|
committer | simokawa <simokawa@FreeBSD.org> | 2002-10-21 15:36:59 +0000 |
commit | ee934c85cbcd0b6f9e9c0dd6f6aa74ad30ba6439 (patch) | |
tree | 67a1b3ccf73c05965c02da5acf00b1264778143d /sys/dev | |
parent | 219e872ca77f094e890b79fb4a79153428390bad (diff) | |
download | FreeBSD-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.c | 19 |
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); } |