From d361308f1862a9c662a21ffe50aed08fb4c4fdb7 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Thu, 25 Mar 2010 18:53:20 +0000 Subject: prevent timer overflows in libpayload Signed-off-by: Stefan Reinauer Acked-by: Patrick Georgi git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5292 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- payloads/libpayload/arch/i386/timer.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'payloads/libpayload/arch') diff --git a/payloads/libpayload/arch/i386/timer.c b/payloads/libpayload/arch/i386/timer.c index 3d8607b3cb..ae288eb94e 100644 --- a/payloads/libpayload/arch/i386/timer.c +++ b/payloads/libpayload/arch/i386/timer.c @@ -88,7 +88,7 @@ static inline void _delay(unsigned long long delta) */ void ndelay(unsigned int n) { - _delay(n * cpu_khz / 1000000); + _delay((unsigned long long)n * cpu_khz / 1000000); } /** @@ -98,7 +98,7 @@ void ndelay(unsigned int n) */ void udelay(unsigned int n) { - _delay(n * cpu_khz / 1000); + _delay((unsigned long long)n * cpu_khz / 1000); } /** @@ -108,7 +108,7 @@ void udelay(unsigned int n) */ void mdelay(unsigned int m) { - _delay(m * cpu_khz); + _delay((unsigned long long)m * cpu_khz); } /** @@ -118,5 +118,7 @@ void mdelay(unsigned int m) */ void delay(unsigned int s) { - _delay(s * cpu_khz * 1000); + int i; + for (i=0; i<1000; i++) + _delay((unsigned long long)s * cpu_khz); } -- cgit v1.2.3