X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Ftimer.h;h=0a485beba9f511ddb935044bee1c7f6696c51214;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=90db1cc62ddd02875918840b129945aff45df56e;hpb=cee37fe97739d85991964371c1f3a745c00dd236;p=linux-2.6.git diff --git a/include/linux/timer.h b/include/linux/timer.h index 90db1cc62..0a485beba 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h @@ -12,38 +12,34 @@ struct timer_list { struct list_head entry; unsigned long expires; - spinlock_t lock; - unsigned long magic; - void (*function)(unsigned long); unsigned long data; struct tvec_t_base_s *base; }; -#define TIMER_MAGIC 0x4b87ad6e +extern struct tvec_t_base_s boot_tvec_bases; #define TIMER_INITIALIZER(_function, _expires, _data) { \ .function = (_function), \ .expires = (_expires), \ .data = (_data), \ - .base = NULL, \ - .magic = TIMER_MAGIC, \ - .lock = SPIN_LOCK_UNLOCKED, \ + .base = &boot_tvec_bases, \ } -/*** - * init_timer - initialize a timer. - * @timer: the timer to be initialized - * - * init_timer() must be done to a timer prior calling *any* of the - * other timer functions. - */ -static inline void init_timer(struct timer_list * timer) +#define DEFINE_TIMER(_name, _function, _expires, _data) \ + struct timer_list _name = \ + TIMER_INITIALIZER(_function, _expires, _data) + +void fastcall init_timer(struct timer_list * timer); + +static inline void setup_timer(struct timer_list * timer, + void (*function)(unsigned long), + unsigned long data) { - timer->base = NULL; - timer->magic = TIMER_MAGIC; - spin_lock_init(&timer->lock); + timer->function = function; + timer->data = data; + init_timer(timer); } /*** @@ -58,7 +54,7 @@ static inline void init_timer(struct timer_list * timer) */ static inline int timer_pending(const struct timer_list * timer) { - return timer->base != NULL; + return timer->entry.next != NULL; } extern void add_timer_on(struct timer_list *timer, int cpu); @@ -73,30 +69,34 @@ extern unsigned long next_timer_interrupt(void); * @timer: the timer to be added * * The kernel will do a ->function(->data) callback from the - * timer interrupt at the ->expired point in the future. The + * timer interrupt at the ->expires point in the future. The * current time is 'jiffies'. * - * The timer's ->expired, ->function (and if the handler uses it, ->data) + * The timer's ->expires, ->function (and if the handler uses it, ->data) * fields must be set prior calling this function. * - * Timers with an ->expired field in the past will be executed in the next + * Timers with an ->expires field in the past will be executed in the next * timer tick. */ -static inline void add_timer(struct timer_list * timer) +static inline void add_timer(struct timer_list *timer) { + BUG_ON(timer_pending(timer)); __mod_timer(timer, timer->expires); } #ifdef CONFIG_SMP + extern int try_to_del_timer_sync(struct timer_list *timer); extern int del_timer_sync(struct timer_list *timer); - extern int del_singleshot_timer_sync(struct timer_list *timer); #else -# define del_timer_sync(t) del_timer(t) -# define del_singleshot_timer_sync(t) del_timer(t) +# define try_to_del_timer_sync(t) del_timer(t) +# define del_timer_sync(t) del_timer(t) #endif +#define del_singleshot_timer_sync(t) del_timer_sync(t) + extern void init_timers(void); extern void run_local_timers(void); -extern void it_real_fn(unsigned long); +struct hrtimer; +extern int it_real_fn(struct hrtimer *); #endif