diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/timer.h | 89 | ||||
| -rw-r--r-- | include/linux/workqueue.h | 2 |
2 files changed, 40 insertions, 51 deletions
diff --git a/include/linux/timer.h b/include/linux/timer.h index f890f4f3d668..cfedb5e8bb07 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h @@ -2,70 +2,59 @@ #define _LINUX_TIMER_H #include <linux/config.h> -#include <linux/smp.h> -#include <linux/stddef.h> #include <linux/list.h> -#include <linux/spinlock.h> -#include <linux/cache.h> struct tvec_t_base_s; -/* - * Timers may be dynamically created and destroyed, and should be initialized - * by a call to init_timer() upon creation. - * - * The "data" field enables use of a common timeout function for several - * timeouts. You can use this field to distinguish between the different - * invocations. - */ -typedef struct timer_list { - struct list_head list; +struct timer_list { + struct list_head entry; unsigned long expires; - unsigned long data; + void (*function)(unsigned long); + unsigned long data; + struct tvec_t_base_s *base; -} timer_t; +}; -extern void add_timer(timer_t * timer); -extern int del_timer(timer_t * timer); - -#ifdef CONFIG_SMP -extern int del_timer_sync(timer_t * timer); -extern void sync_timers(void); -#define timer_enter(base, t) do { base->running_timer = t; mb(); } while (0) -#define timer_exit(base) do { base->running_timer = NULL; } while (0) -#define timer_is_running(base,t) (base->running_timer == t) -#define timer_synchronize(base,t) while (timer_is_running(base,t)) barrier() -#else -#define del_timer_sync(t) del_timer(t) -#define sync_timers() do { } while (0) -#define timer_enter(base,t) do { } while (0) -#define timer_exit(base) do { } while (0) -#endif - -/* - * mod_timer is a more efficient way to update the expire field of an - * active timer (if the timer is inactive it will be activated) - * mod_timer(a,b) is equivalent to del_timer(a); a->expires = b; add_timer(a). - * If the timer is known to be not pending (ie, in the handler), mod_timer - * is less efficient than a->expires = b; add_timer(a). +/*** + * 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. */ -int mod_timer(timer_t *timer, unsigned long expires); - -extern void it_real_fn(unsigned long); - -extern void init_timers(void); -extern void run_local_timers(void); - -static inline void init_timer(timer_t * timer) +static inline void init_timer(struct timer_list * timer) { - timer->list.next = timer->list.prev = NULL; timer->base = NULL; } -static inline int timer_pending(const timer_t * timer) +/*** + * timer_pending - is a timer pending? + * @timer: the timer in question + * + * timer_pending will tell whether a given timer is currently pending, + * or not. Callers must ensure serialization wrt. other operations done + * to this timer, eg. interrupt contexts, or other CPUs on SMP. + * + * return value: 1 if the timer is pending, 0 if not. + */ +static inline int timer_pending(const struct timer_list * timer) { - return timer->list.next != NULL; + return timer->base != NULL; } +extern void add_timer(struct timer_list * timer); +extern int del_timer(struct timer_list * timer); +extern int mod_timer(struct timer_list *timer, unsigned long expires); + +#if CONFIG_SMP + extern int del_timer_sync(struct timer_list * timer); +#else +# define del_timer_sync(t) del_timer(t) +#endif + +extern void init_timers(void); +extern void run_local_timers(void); +extern void it_real_fn(unsigned long); + #endif diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 7828c7bef55f..3e466894179f 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h @@ -15,7 +15,7 @@ struct work_struct { void (*func)(void *); void *data; void *wq_data; - timer_t timer; + struct timer_list timer; }; #define __WORK_INITIALIZER(n, f, d) { \ |
