Skip to contentSkip to conversation

linux-2.4.31_timer-change_A1

RFC PATCH New john stultz 1 participant 1 message Aug 20, 2002

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/1 linux-2.4.31_timer-change_A1

Linus, all,
Ok, here is my next revision, hopefully to be met with something other
then silence :) I've caught the corner case I had earlier, and cleaned up how timers are selected and added. Let me know if you have any comments/flames.

thanks
-john

arch/i386/kernel/Makefile +2 -2
diff -Nru a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile
@@ -6,12 +6,12 @@
 
 O_TARGET := kernel.o
 
-export-objs     := mca.o msr.o i386_ksyms.o time.o
+export-objs     := mca.o msr.o i386_ksyms.o time.o timer_pit.o
 
 obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \
 		ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_i386.o \
 		pci-dma.o i386_ksyms.o i387.o bluesmoke.o dmi_scan.o \
-		bootflag.o
+		bootflag.o timer.o timer_pit.o timer_tsc.o
 
 obj-y				+= cpu/
 obj-$(CONFIG_MCA)		+= mca.o
arch/i386/kernel/time.c +8 -337

404 lines not on this page · raw message

arch/i386/kernel/timer.c new file +28 -0
diff -Nru a/arch/i386/kernel/timer.c b/arch/i386/kernel/timer.c
@@ -0,0 +1,28 @@
+#include <linux/kernel.h>
+
+#include <asm/timer.h>
+
+/*list of externed timers*/
+extern struct timer_opts timer_pit;
+extern struct timer_opts timer_tsc;
+
+/*list of timers, ordered by preference*/
+struct timer_opts* timers[] = {
+	&timer_tsc,
+	&timer_pit
+};
+
+#define NR_TIMERS (sizeof(timers)/sizeof(timers[0]))
+
+/* iterates through the list of timers, returning the first 
+ * one that initializes successfully.
+ */
+struct timer_opts* select_timer(void)
+{
+	int i;
+	for(i=0; i < NR_TIMERS; i++)
+		if(timers[i]->init())
+			return timers[i];
+	panic("select_timer: Cannot find a suitable timer\n");
+	return 0;
+}
arch/i386/kernel/timer_pit.c new file +180 -0

180 lines not on this page · raw message

arch/i386/kernel/timer_tsc.c new file +210 -0

210 lines not on this page · raw message

include/asm-i386/timer.h new file +13 -0
diff -Nru a/include/asm-i386/timer.h b/include/asm-i386/timer.h
@@ -0,0 +1,13 @@
+
+#ifndef _ASMi386_TIMER_H
+#define _ASMi386_TIMER_H
+
+struct timer_opts{
+	int (*init)(void);
+	void (*mark_offset)(void);
+	unsigned long (*get_offset)(void);
+};
+
+#define TICK_SIZE tick
+struct timer_opts* select_timer(void);
+#endif