Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

kern/10575: siop driver can't handle large timeouts

1 view
Skip to first unread message

Manuel Bouyer

unread,
Jul 18, 2000, 3:00:00 AM7/18/00
to
On Wed, Jul 12, 2000 at 10:22:48PM -0500, Dave Huang wrote:
> The timeout calculation in the siop driver overflows a 32-bit int
> if the requested timeout is sufficiently large... for example, scsictl's
> low level format option asks for 21600000ms (6 hours); if hz=100 (i386),
> 21600000 * hz = 2160000000 (0x80BEFC00), slightly too big for a signed
> int.

The problem is more critical on alpha, where hz is > 1000
> [...]
> >Fix:
> This seems to work, although it increases the granularity to 1 second...

This can be a problem, some commands requires much less than 1s.
What about using 64bit integers instead ?

>
> --- /usr/src/sys/dev/ic/siop.c Tue Jun 27 05:27:17 2000
> +++ siop.c Wed Jul 12 21:43:25 2000
> @@ -1355,8 +1355,8 @@
> XS_CTL_POLL) == 0) {
> /* start exire timer */
> timeout =
> - siop_cmd->xs->timeout *
> - hz / 1000;
> + siop_cmd->xs->timeout /
> + 1000 * hz;
> if (timeout == 0)
> timeout = 1;
> callout_reset(

--
Manuel Bouyer <bou...@antioche.eu.org>
--

0 new messages