aboutsummaryrefslogtreecommitdiff
path: root/lib/time.c
diff options
context:
space:
mode:
authorStephen Warren2013-12-05 12:08:09 -0700
committerTom Rini2013-12-13 09:15:33 -0500
commit2cd1b57220697ac47e4a63fb6a0a79eda2217f9d (patch)
tree2991c29b493004fde9cc67c9ab5fc05d42675dea /lib/time.c
parent74c43bb3d3fa322af17322384324c63c947bb124 (diff)
time: fix usec_to_tick()
Commit 8dfafdde88eb ("Introduce common timer functions") created a common definition of usec_to_tick() which had a couple problems: static unsigned long long usec_to_tick(unsigned long usec) { uint64_t tick = usec * get_tbclk(); That likely overflows. usec *= get_tbclk(); That was an attempt to fix it by performing the multiply after the promotion of usec to 64-bit, but was applied to the wrong variable, which was never used. This patch fixes these issues. A user-visible symptom of the problem was the e.g. "dhcp zImage" using an ASIX USB Ethernet dongle would print: Waiting for Ethernet connection... unable to connect. ... with no delay before "unable to connect". There are likely other symptoms. Signed-off-by: Stephen Warren <swarren@nvidia.com> Acked-by: Rob Herring <rob.herring@calxeda.com>
Diffstat (limited to 'lib/time.c')
-rw-r--r--lib/time.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/time.c b/lib/time.c
index 09bb05a24d3..8085aa40d1c 100644
--- a/lib/time.c
+++ b/lib/time.c
@@ -71,8 +71,8 @@ unsigned long __weak notrace timer_get_us(void)
}
static unsigned long long usec_to_tick(unsigned long usec)
{
- uint64_t tick = usec * get_tbclk();
- usec *= get_tbclk();
+ uint64_t tick = usec;
+ tick *= get_tbclk();
do_div(tick, 1000000);
return tick;
}