Re: [PATCH 9/13] Time: i386 Conversion - part 5: Enable Generic Timekeeping
From: Ingo Molnar
Date: Sat Nov 26 2005 - 09:57:19 EST
- clean up timeofday-arch-i386-part5.patch
Signed-off-by: Ingo Molnar <mingo@xxxxxxx>
arch/i386/lib/delay.c | 28 +++++++++++++++++-----------
1 files changed, 17 insertions(+), 11 deletions(-)
Index: linux/arch/i386/lib/delay.c
===================================================================
--- linux.orig/arch/i386/lib/delay.c
+++ linux/arch/i386/lib/delay.c
@@ -10,23 +10,25 @@
* we have to worry about.
*/
+#include <linux/timeofday.h>
+#include <linux/module.h>
#include <linux/config.h>
#include <linux/sched.h>
#include <linux/delay.h>
-#include <linux/timeofday.h>
-#include <linux/module.h>
+
#include <asm/processor.h>
#include <asm/delay.h>
#include <asm/timer.h>
#ifdef CONFIG_SMP
-#include <asm/smp.h>
+# include <asm/smp.h>
#endif
-/* simple loop based delay */
+/* simple loop based delay: */
static void delay_loop(unsigned long loops)
{
int d0;
+
__asm__ __volatile__(
"\tjmp 1f\n"
".align 16\n"
@@ -37,10 +39,11 @@ static void delay_loop(unsigned long loo
:"0" (loops));
}
-/* TSC based delay */
+/* TSC based delay: */
static void delay_tsc(unsigned long loops)
{
unsigned long bclock, now;
+
rdtscl(bclock);
do {
rep_nop();
@@ -48,7 +51,8 @@ static void delay_tsc(unsigned long loop
} while ((now-bclock) < loops);
}
-/* Since we calibrate only once at boot, this
+/*
+ * Since we calibrate only once at boot, this
* function should be set once at boot and not changed
*/
static void (*delay_fn)(unsigned long) = delay_loop;
@@ -67,7 +71,6 @@ int read_current_timer(unsigned long *ti
return -1;
}
-
void __delay(unsigned long loops)
{
delay_fn(loops);
@@ -76,21 +79,24 @@ void __delay(unsigned long loops)
inline void __const_udelay(unsigned long xloops)
{
int d0;
+
xloops *= 4;
__asm__("mull %0"
:"=d" (xloops), "=&a" (d0)
- :"1" (xloops),"0" (cpu_data[raw_smp_processor_id()].loops_per_jiffy * (HZ/4)));
- __delay(++xloops);
+ :"1" (xloops), "0"
+ (cpu_data[raw_smp_processor_id()].loops_per_jiffy * (HZ/4)));
+
+ __delay(++xloops);
}
void __udelay(unsigned long usecs)
{
- __const_udelay(usecs * 0x000010c7); /* 2**32 / 1000000 (rounded up) */
+ __const_udelay(usecs * 0x000010c7); /* 2**32 / 1000000 (rounded up) */
}
void __ndelay(unsigned long nsecs)
{
- __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */
+ __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */
}
EXPORT_SYMBOL(__delay);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/