linux-2.4.31_timer-change_A1
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
@@ -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
@@ -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
@@ -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