aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Stern <[email protected]>2008-11-12 17:02:57 -0500
committerGreg Kroah-Hartman <[email protected]>2008-11-13 14:45:06 -0800
commit372dd6e8ed924e876f3beb598721e813ad7fa323 (patch)
tree840e634b3ff67c0a337de02947dc1b7e1b36817b
parent67b2e029743a52670d77864723b4d0d40f7733b5 (diff)
USB: EHCI: fix divide-by-zero bug
This patch (as1164) fixes a bug in the EHCI scheduler. The interval value it uses is already in linear format, not logarithmically coded. The existing code can sometimes crash the system by trying to divide by zero. Signed-off-by: Alan Stern <[email protected]> Cc: David Brownell <[email protected]> Cc: Stable <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
-rw-r--r--drivers/usb/host/ehci-sched.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
index 4a0c5a78b2ed..a081ee65bde6 100644
--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -918,7 +918,7 @@ iso_stream_init (
*/
stream->usecs = HS_USECS_ISO (maxp);
bandwidth = stream->usecs * 8;
- bandwidth /= 1 << (interval - 1);
+ bandwidth /= interval;
} else {
u32 addr;
@@ -951,7 +951,7 @@ iso_stream_init (
} else
stream->raw_mask = smask_out [hs_transfers - 1];
bandwidth = stream->usecs + stream->c_usecs;
- bandwidth /= 1 << (interval + 2);
+ bandwidth /= interval << 3;
/* stream->splits gets created from raw_mask later */
stream->address = cpu_to_hc32(ehci, addr);