Date: Wed, 6 Apr 2005 00:50:07 GMT From: Phil Oleson <oz@nixil.net> To: freebsd-scsi@FreeBSD.org Subject: Re: kern/75603: 5.3 kernel crash Message-ID: <200504060050.j360o7Jx090879@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/75603; it has been noted by GNATS. From: Phil Oleson <oz@nixil.net> To: DJ Gregor <dgregor@interhack.com> Cc: freebsd-gnats-submit@FreeBSD.org Subject: Re: kern/75603: 5.3 kernel crash Date: Tue, 05 Apr 2005 18:40:20 -0600 I did try to debug this some, though I got distracted by work related tasks. In my opinion, scsi_calc_syncsrate() has a div by 0 possibility, where the old ifdef'd code explicitly avoided this prossibility. something about this code in bt.c which sets sync_period. The 4.x tree called scsi_calc_syncparam() which is safer in this regard, but it's ifdef'd out of the 5.x+ tree. and I dont think it's doing the right thing. But this is as far as I got. Phil. bt.c: <snip> #ifdef CAM_NEW_TRAN_CODE cts->protocol = PROTO_SCSI; cts->protocol_version = SCSI_REV_2; cts->transport = XPORT_SPI; cts->transport_version = 2; spi->sync_period = sync_period; spi->valid |= CTS_SPI_VALID_SYNC_RATE; spi->sync_offset = sync_offset; spi->valid |= CTS_SPI_VALID_SYNC_OFFSET; spi->valid |= CTS_SPI_VALID_BUS_WIDTH; spi->bus_width = bus_width; if (cts->ccb_h.target_lun != CAM_LUN_WILDCARD) { scsi->valid = CTS_SCSI_VALID_TQ; spi->valid |= CTS_SPI_VALID_DISC; } else scsi->valid = 0; #else /* Convert ns value to standard SCSI sync rate */ if (cts->sync_offset != 0) cts->sync_period = scsi_calc_syncparam(sync_period); else cts->sync_period = 0; cts->sync_offset = sync_offset; cts->bus_width = MSG_EXT_WDTR_BUS_8_BIT; cts->valid = CCB_TRANS_SYNC_RATE_VALID | CCB_TRANS_SYNC_OFFSET_VALID | CCB_TRANS_BUS_WIDTH_VALID; #endif </snip>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200504060050.j360o7Jx090879>