Blame view
include/linux/timer.h
8.77 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 |
#ifndef _LINUX_TIMER_H #define _LINUX_TIMER_H |
1da177e4c Linux-2.6.12-rc2 |
3 |
#include <linux/list.h> |
82f67cd9f [PATCH] Add debug... |
4 |
#include <linux/ktime.h> |
1da177e4c Linux-2.6.12-rc2 |
5 |
#include <linux/stddef.h> |
c6f3a97f8 debugobjects: add... |
6 |
#include <linux/debugobjects.h> |
6f2b9b9a9 timer: implement ... |
7 |
#include <linux/stringify.h> |
1da177e4c Linux-2.6.12-rc2 |
8 |
|
a6fa8e5a6 time: clean hunga... |
9 |
struct tvec_base; |
1da177e4c Linux-2.6.12-rc2 |
10 11 |
struct timer_list { |
3bbb9ec94 timers: Introduce... |
12 13 14 15 |
/* * All fields that change during normal runtime grouped to the * same cacheline */ |
0eeda71bc timer: Replace ti... |
16 17 18 19 20 |
struct hlist_node entry; unsigned long expires; void (*function)(unsigned long); unsigned long data; u32 flags; |
3bbb9ec94 timers: Introduce... |
21 |
|
82f67cd9f [PATCH] Add debug... |
22 |
#ifdef CONFIG_TIMER_STATS |
0eeda71bc timer: Replace ti... |
23 24 25 |
int start_pid; void *start_site; char start_comm[16]; |
82f67cd9f [PATCH] Add debug... |
26 |
#endif |
6f2b9b9a9 timer: implement ... |
27 |
#ifdef CONFIG_LOCKDEP |
0eeda71bc timer: Replace ti... |
28 |
struct lockdep_map lockdep_map; |
6f2b9b9a9 timer: implement ... |
29 |
#endif |
1da177e4c Linux-2.6.12-rc2 |
30 |
}; |
6f2b9b9a9 timer: implement ... |
31 32 33 34 35 36 37 38 39 40 41 42 |
#ifdef CONFIG_LOCKDEP /* * NB: because we have to copy the lockdep_map, setting the lockdep_map key * (second argument) here is required, otherwise it could be initialised to * the copy of the lockdep_map later! We use the pointer to and the string * "<file>:<line>" as the key resp. the name of the lockdep_map. */ #define __TIMER_LOCKDEP_MAP_INITIALIZER(_kn) \ .lockdep_map = STATIC_LOCKDEP_MAP_INIT(_kn, &_kn), #else #define __TIMER_LOCKDEP_MAP_INITIALIZER(_kn) #endif |
dd6414b50 timer: Permit sta... |
43 |
/* |
dd6414b50 timer: Permit sta... |
44 45 46 47 |
* A deferrable timer will work normally when the system is busy, but * will not cause a CPU to come out of idle just to service it; instead, * the timer will be serviced when the CPU eventually wakes up with a * subsequent non-deferrable timer. |
c5f66e99b timer: Implement ... |
48 49 50 51 52 53 54 55 |
* * An irqsafe timer is executed with IRQ disabled and it's safe to wait for * the completion of the running instance from IRQ handlers, for example, * by calling del_timer_sync(). * * Note: The irq disabled callback execution is a special case for * workqueue locking issues. It's not meant for executing random crap * with interrupts disabled. Abuse is monitored! |
dd6414b50 timer: Permit sta... |
56 |
*/ |
b0d6e2dcb timers: Reduce th... |
57 58 |
#define TIMER_CPUMASK 0x0003FFFF #define TIMER_MIGRATING 0x00040000 |
0eeda71bc timer: Replace ti... |
59 |
#define TIMER_BASEMASK (TIMER_CPUMASK | TIMER_MIGRATING) |
b0d6e2dcb timers: Reduce th... |
60 61 62 |
#define TIMER_DEFERRABLE 0x00080000 #define TIMER_PINNED 0x00100000 #define TIMER_IRQSAFE 0x00200000 |
500462a9d timers: Switch to... |
63 64 |
#define TIMER_ARRAYSHIFT 22 #define TIMER_ARRAYMASK 0xFFC00000 |
dd6414b50 timer: Permit sta... |
65 |
|
fc683995a timer: Clean up t... |
66 |
#define __TIMER_INITIALIZER(_function, _expires, _data, _flags) { \ |
1dabbcec2 timer: Use hlist ... |
67 |
.entry = { .next = TIMER_ENTRY_STATIC }, \ |
1da177e4c Linux-2.6.12-rc2 |
68 69 70 |
.function = (_function), \ .expires = (_expires), \ .data = (_data), \ |
0eeda71bc timer: Replace ti... |
71 |
.flags = (_flags), \ |
6f2b9b9a9 timer: implement ... |
72 73 |
__TIMER_LOCKDEP_MAP_INITIALIZER( \ __FILE__ ":" __stringify(__LINE__)) \ |
1da177e4c Linux-2.6.12-rc2 |
74 |
} |
fc683995a timer: Clean up t... |
75 76 |
#define TIMER_INITIALIZER(_function, _expires, _data) \ __TIMER_INITIALIZER((_function), (_expires), (_data), 0) |
dd6414b50 timer: Permit sta... |
77 |
|
e675447bd timers: Make 'pin... |
78 79 |
#define TIMER_PINNED_INITIALIZER(_function, _expires, _data) \ __TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_PINNED) |
fc683995a timer: Clean up t... |
80 81 |
#define TIMER_DEFERRED_INITIALIZER(_function, _expires, _data) \ __TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_DEFERRABLE) |
dd6414b50 timer: Permit sta... |
82 |
|
e675447bd timers: Make 'pin... |
83 84 |
#define TIMER_PINNED_DEFERRED_INITIALIZER(_function, _expires, _data) \ __TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_DEFERRABLE | TIMER_PINNED) |
8d06afab7 [PATCH] timer ini... |
85 86 87 |
#define DEFINE_TIMER(_name, _function, _expires, _data) \ struct timer_list _name = \ TIMER_INITIALIZER(_function, _expires, _data) |
fc683995a timer: Clean up t... |
88 89 |
void init_timer_key(struct timer_list *timer, unsigned int flags, const char *name, struct lock_class_key *key); |
6f2b9b9a9 timer: implement ... |
90 |
|
5a9af38d0 timer: Relocate d... |
91 92 |
#ifdef CONFIG_DEBUG_OBJECTS_TIMERS extern void init_timer_on_stack_key(struct timer_list *timer, |
fc683995a timer: Clean up t... |
93 |
unsigned int flags, const char *name, |
5a9af38d0 timer: Relocate d... |
94 95 96 97 98 |
struct lock_class_key *key); extern void destroy_timer_on_stack(struct timer_list *timer); #else static inline void destroy_timer_on_stack(struct timer_list *timer) { } static inline void init_timer_on_stack_key(struct timer_list *timer, |
fc683995a timer: Clean up t... |
99 |
unsigned int flags, const char *name, |
5a9af38d0 timer: Relocate d... |
100 101 |
struct lock_class_key *key) { |
fc683995a timer: Clean up t... |
102 |
init_timer_key(timer, flags, name, key); |
5a9af38d0 timer: Relocate d... |
103 104 |
} #endif |
6f2b9b9a9 timer: implement ... |
105 |
#ifdef CONFIG_LOCKDEP |
fc683995a timer: Clean up t... |
106 |
#define __init_timer(_timer, _flags) \ |
6f2b9b9a9 timer: implement ... |
107 108 |
do { \ static struct lock_class_key __key; \ |
fc683995a timer: Clean up t... |
109 |
init_timer_key((_timer), (_flags), #_timer, &__key); \ |
6f2b9b9a9 timer: implement ... |
110 |
} while (0) |
fc683995a timer: Clean up t... |
111 |
#define __init_timer_on_stack(_timer, _flags) \ |
6f2b9b9a9 timer: implement ... |
112 113 |
do { \ static struct lock_class_key __key; \ |
fc683995a timer: Clean up t... |
114 |
init_timer_on_stack_key((_timer), (_flags), #_timer, &__key); \ |
6f2b9b9a9 timer: implement ... |
115 |
} while (0) |
fc683995a timer: Clean up t... |
116 117 118 119 120 121 |
#else #define __init_timer(_timer, _flags) \ init_timer_key((_timer), (_flags), NULL, NULL) #define __init_timer_on_stack(_timer, _flags) \ init_timer_on_stack_key((_timer), (_flags), NULL, NULL) #endif |
6f2b9b9a9 timer: implement ... |
122 |
|
fc683995a timer: Clean up t... |
123 124 |
#define init_timer(timer) \ __init_timer((timer), 0) |
e675447bd timers: Make 'pin... |
125 126 |
#define init_timer_pinned(timer) \ __init_timer((timer), TIMER_PINNED) |
fc683995a timer: Clean up t... |
127 128 |
#define init_timer_deferrable(timer) \ __init_timer((timer), TIMER_DEFERRABLE) |
e675447bd timers: Make 'pin... |
129 130 |
#define init_timer_pinned_deferrable(timer) \ __init_timer((timer), TIMER_DEFERRABLE | TIMER_PINNED) |
6f2b9b9a9 timer: implement ... |
131 |
#define init_timer_on_stack(timer) \ |
fc683995a timer: Clean up t... |
132 133 134 |
__init_timer_on_stack((timer), 0) #define __setup_timer(_timer, _fn, _data, _flags) \ |
6f2b9b9a9 timer: implement ... |
135 |
do { \ |
fc683995a timer: Clean up t... |
136 137 138 |
__init_timer((_timer), (_flags)); \ (_timer)->function = (_fn); \ (_timer)->data = (_data); \ |
6f2b9b9a9 timer: implement ... |
139 |
} while (0) |
fc683995a timer: Clean up t... |
140 |
#define __setup_timer_on_stack(_timer, _fn, _data, _flags) \ |
6f2b9b9a9 timer: implement ... |
141 |
do { \ |
fc683995a timer: Clean up t... |
142 143 144 |
__init_timer_on_stack((_timer), (_flags)); \ (_timer)->function = (_fn); \ (_timer)->data = (_data); \ |
6f2b9b9a9 timer: implement ... |
145 |
} while (0) |
fc683995a timer: Clean up t... |
146 147 |
#define setup_timer(timer, fn, data) \ __setup_timer((timer), (fn), (data), 0) |
e675447bd timers: Make 'pin... |
148 149 |
#define setup_pinned_timer(timer, fn, data) \ __setup_timer((timer), (fn), (data), TIMER_PINNED) |
6f3ffc191 timer: add setup_... |
150 151 |
#define setup_deferrable_timer(timer, fn, data) \ __setup_timer((timer), (fn), (data), TIMER_DEFERRABLE) |
e675447bd timers: Make 'pin... |
152 153 |
#define setup_pinned_deferrable_timer(timer, fn, data) \ __setup_timer((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED) |
6f2b9b9a9 timer: implement ... |
154 |
#define setup_timer_on_stack(timer, fn, data) \ |
fc683995a timer: Clean up t... |
155 |
__setup_timer_on_stack((timer), (fn), (data), 0) |
e675447bd timers: Make 'pin... |
156 157 |
#define setup_pinned_timer_on_stack(timer, fn, data) \ __setup_timer_on_stack((timer), (fn), (data), TIMER_PINNED) |
8cadd2831 timer: add on-sta... |
158 |
#define setup_deferrable_timer_on_stack(timer, fn, data) \ |
fc683995a timer: Clean up t... |
159 |
__setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE) |
e675447bd timers: Make 'pin... |
160 161 |
#define setup_pinned_deferrable_timer_on_stack(timer, fn, data) \ __setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED) |
8cadd2831 timer: add on-sta... |
162 |
|
45f8bde0d [PATCH] fix vario... |
163 |
/** |
1da177e4c Linux-2.6.12-rc2 |
164 165 166 167 168 169 170 171 172 173 174 |
* 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) { |
1dabbcec2 timer: Use hlist ... |
175 |
return timer->entry.pprev != NULL; |
1da177e4c Linux-2.6.12-rc2 |
176 177 178 179 |
} extern void add_timer_on(struct timer_list *timer, int cpu); extern int del_timer(struct timer_list * timer); |
1da177e4c Linux-2.6.12-rc2 |
180 |
extern int mod_timer(struct timer_list *timer, unsigned long expires); |
74019224a timers: add mod_t... |
181 |
extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); |
1da177e4c Linux-2.6.12-rc2 |
182 |
|
fd064b9b7 [PATCH] Extend ne... |
183 |
/* |
eaad084bb NOHZ: prevent mul... |
184 185 186 187 188 189 |
* The jiffies value which is added to now, when there is no timer * in the timer wheel: */ #define NEXT_TIMER_MAX_DELTA ((1UL << 30) - 1) /* |
82f67cd9f [PATCH] Add debug... |
190 191 192 |
* Timer-statistics info: */ #ifdef CONFIG_TIMER_STATS |
507e12315 timer stats: Opti... |
193 |
extern int timer_stats_active; |
82f67cd9f [PATCH] Add debug... |
194 195 196 |
extern void init_timer_stats(void); extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf, |
c74441a17 timer: Stats: Sim... |
197 |
void *timerf, char *comm, u32 flags); |
82f67cd9f [PATCH] Add debug... |
198 199 200 201 202 203 |
extern void __timer_stats_timer_set_start_info(struct timer_list *timer, void *addr); static inline void timer_stats_timer_set_start_info(struct timer_list *timer) { |
507e12315 timer stats: Opti... |
204 205 |
if (likely(!timer_stats_active)) return; |
82f67cd9f [PATCH] Add debug... |
206 207 208 209 210 211 212 213 214 215 216 |
__timer_stats_timer_set_start_info(timer, __builtin_return_address(0)); } static inline void timer_stats_timer_clear_start_info(struct timer_list *timer) { timer->start_site = NULL; } #else static inline void init_timer_stats(void) { } |
82f67cd9f [PATCH] Add debug... |
217 218 219 220 221 222 223 224 |
static inline void timer_stats_timer_set_start_info(struct timer_list *timer) { } static inline void timer_stats_timer_clear_start_info(struct timer_list *timer) { } #endif |
74019224a timers: add mod_t... |
225 |
extern void add_timer(struct timer_list *timer); |
1da177e4c Linux-2.6.12-rc2 |
226 |
|
6f1bc451e timer: Make try_t... |
227 |
extern int try_to_del_timer_sync(struct timer_list *timer); |
1da177e4c Linux-2.6.12-rc2 |
228 229 |
#ifdef CONFIG_SMP extern int del_timer_sync(struct timer_list *timer); |
1da177e4c Linux-2.6.12-rc2 |
230 |
#else |
fd450b731 [PATCH] timers: i... |
231 |
# define del_timer_sync(t) del_timer(t) |
1da177e4c Linux-2.6.12-rc2 |
232 |
#endif |
55c888d6d [PATCH] timers fi... |
233 |
#define del_singleshot_timer_sync(t) del_timer_sync(t) |
1da177e4c Linux-2.6.12-rc2 |
234 235 |
extern void init_timers(void); extern void run_local_timers(void); |
05cfb614d [PATCH] hrtimers:... |
236 |
struct hrtimer; |
c9cb2e3d7 [PATCH] hrtimers:... |
237 |
extern enum hrtimer_restart it_real_fn(struct hrtimer *); |
1da177e4c Linux-2.6.12-rc2 |
238 |
|
bc7a34b8b timer: Reduce tim... |
239 240 241 242 243 244 245 246 |
#if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON) #include <linux/sysctl.h> extern unsigned int sysctl_timer_migration; int timer_migration_handler(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos); #endif |
4c36a5dec [PATCH] round_jif... |
247 248 249 250 |
unsigned long __round_jiffies(unsigned long j, int cpu); unsigned long __round_jiffies_relative(unsigned long j, int cpu); unsigned long round_jiffies(unsigned long j); unsigned long round_jiffies_relative(unsigned long j); |
9c133c469 Add round_jiffies... |
251 252 253 254 |
unsigned long __round_jiffies_up(unsigned long j, int cpu); unsigned long __round_jiffies_up_relative(unsigned long j, int cpu); unsigned long round_jiffies_up(unsigned long j); unsigned long round_jiffies_up_relative(unsigned long j); |
24f73b997 timers/core: Conv... |
255 256 257 258 259 |
#ifdef CONFIG_HOTPLUG_CPU int timers_dead_cpu(unsigned int cpu); #else #define timers_dead_cpu NULL #endif |
1da177e4c Linux-2.6.12-rc2 |
260 |
#endif |