Diff markup
1 #ifndef _LINUX_TIMER_H 1 #ifndef _LINUX_TIMER_H
2 #define _LINUX_TIMER_H 2 #define _LINUX_TIMER_H
3 3
4 #include <linux/list.h> 4 #include <linux/list.h>
5 #include <linux/ktime.h> 5 #include <linux/ktime.h>
6 #include <linux/stddef.h> 6 #include <linux/stddef.h>
7 7
8 struct tvec_base; 8 struct tvec_base;
9 9
10 struct timer_list { 10 struct timer_list {
11 struct list_head entry; 11 struct list_head entry;
12 unsigned long expires; 12 unsigned long expires;
13 13
14 void (*function)(unsigned long); 14 void (*function)(unsigned long);
15 unsigned long data; 15 unsigned long data;
16 16
17 struct tvec_base *base; 17 struct tvec_base *base;
18 #ifdef CONFIG_TIMER_STATS 18 #ifdef CONFIG_TIMER_STATS
19 void *start_site; 19 void *start_site;
20 char start_comm[16]; 20 char start_comm[16];
21 int start_pid; 21 int start_pid;
22 #endif 22 #endif
23 }; 23 };
24 24
25 extern struct tvec_base boot_tvec_bases; 25 extern struct tvec_base boot_tvec_bases;
26 26
27 #define TIMER_INITIALIZER(_function, _expires, 27 #define TIMER_INITIALIZER(_function, _expires, _data) { \
28 .function = (_function), 28 .function = (_function), \
29 .expires = (_expires), 29 .expires = (_expires), \
30 .data = (_data), 30 .data = (_data), \
31 .base = &boot_tvec_bases, 31 .base = &boot_tvec_bases, \
32 } 32 }
33 33
34 #define DEFINE_TIMER(_name, _function, _expire 34 #define DEFINE_TIMER(_name, _function, _expires, _data) \
35 struct timer_list _name = 35 struct timer_list _name = \
36 TIMER_INITIALIZER(_function, _ 36 TIMER_INITIALIZER(_function, _expires, _data)
37 37
38 void init_timer(struct timer_list *timer); 38 void init_timer(struct timer_list *timer);
39 void init_timer_deferrable(struct timer_list * 39 void init_timer_deferrable(struct timer_list *timer);
40 40
41 static inline void setup_timer(struct timer_li 41 static inline void setup_timer(struct timer_list * timer,
42 void (*functio 42 void (*function)(unsigned long),
43 unsigned long 43 unsigned long data)
44 { 44 {
45 timer->function = function; 45 timer->function = function;
46 timer->data = data; 46 timer->data = data;
47 init_timer(timer); 47 init_timer(timer);
48 } 48 }
49 49
50 /** 50 /**
51 * timer_pending - is a timer pending? 51 * timer_pending - is a timer pending?
52 * @timer: the timer in question 52 * @timer: the timer in question
53 * 53 *
54 * timer_pending will tell whether a given tim 54 * timer_pending will tell whether a given timer is currently pending,
55 * or not. Callers must ensure serialization w 55 * or not. Callers must ensure serialization wrt. other operations done
56 * to this timer, eg. interrupt contexts, or o 56 * to this timer, eg. interrupt contexts, or other CPUs on SMP.
57 * 57 *
58 * return value: 1 if the timer is pending, 0 58 * return value: 1 if the timer is pending, 0 if not.
59 */ 59 */
60 static inline int timer_pending(const struct t 60 static inline int timer_pending(const struct timer_list * timer)
61 { 61 {
62 return timer->entry.next != NULL; 62 return timer->entry.next != NULL;
63 } 63 }
64 64
65 extern void add_timer_on(struct timer_list *ti 65 extern void add_timer_on(struct timer_list *timer, int cpu);
66 extern int del_timer(struct timer_list * timer 66 extern int del_timer(struct timer_list * timer);
67 extern int __mod_timer(struct timer_list *time 67 extern int __mod_timer(struct timer_list *timer, unsigned long expires);
68 extern int mod_timer(struct timer_list *timer, 68 extern int mod_timer(struct timer_list *timer, unsigned long expires);
69 69
70 /* 70 /*
71 * The jiffies value which is added to now, wh 71 * The jiffies value which is added to now, when there is no timer
72 * in the timer wheel: 72 * in the timer wheel:
73 */ 73 */
74 #define NEXT_TIMER_MAX_DELTA ((1UL << 30) - 74 #define NEXT_TIMER_MAX_DELTA ((1UL << 30) - 1)
75 75
76 /* 76 /*
77 * Return when the next timer-wheel timeout oc 77 * Return when the next timer-wheel timeout occurs (in absolute jiffies),
78 * locks the timer base: 78 * locks the timer base:
79 */ 79 */
80 extern unsigned long next_timer_interrupt(void 80 extern unsigned long next_timer_interrupt(void);
81 /* 81 /*
82 * Return when the next timer-wheel timeout oc 82 * Return when the next timer-wheel timeout occurs (in absolute jiffies),
83 * locks the timer base and does the compariso 83 * locks the timer base and does the comparison against the given
84 * jiffie. 84 * jiffie.
85 */ 85 */
86 extern unsigned long get_next_timer_interrupt( 86 extern unsigned long get_next_timer_interrupt(unsigned long now);
87 87
88 /* 88 /*
89 * Timer-statistics info: 89 * Timer-statistics info:
90 */ 90 */
91 #ifdef CONFIG_TIMER_STATS 91 #ifdef CONFIG_TIMER_STATS
92 92
93 #define TIMER_STATS_FLAG_DEFERRABLE 0x1 93 #define TIMER_STATS_FLAG_DEFERRABLE 0x1
94 94
95 extern void init_timer_stats(void); 95 extern void init_timer_stats(void);
96 96
97 extern void timer_stats_update_stats(void *tim 97 extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
98 void *tim 98 void *timerf, char *comm,
99 unsigned 99 unsigned int timer_flag);
100 100
101 extern void __timer_stats_timer_set_start_info 101 extern void __timer_stats_timer_set_start_info(struct timer_list *timer,
102 102 void *addr);
103 103
104 static inline void timer_stats_timer_set_start 104 static inline void timer_stats_timer_set_start_info(struct timer_list *timer)
105 { 105 {
106 __timer_stats_timer_set_start_info(tim 106 __timer_stats_timer_set_start_info(timer, __builtin_return_address(0));
107 } 107 }
108 108
109 static inline void timer_stats_timer_clear_sta 109 static inline void timer_stats_timer_clear_start_info(struct timer_list *timer)
110 { 110 {
111 timer->start_site = NULL; 111 timer->start_site = NULL;
112 } 112 }
113 #else 113 #else
114 static inline void init_timer_stats(void) 114 static inline void init_timer_stats(void)
115 { 115 {
116 } 116 }
117 117
118 static inline void timer_stats_timer_set_start 118 static inline void timer_stats_timer_set_start_info(struct timer_list *timer)
119 { 119 {
120 } 120 }
121 121
122 static inline void timer_stats_timer_clear_sta 122 static inline void timer_stats_timer_clear_start_info(struct timer_list *timer)
123 { 123 {
124 } 124 }
125 #endif 125 #endif
126 126
127 /** 127 /**
128 * add_timer - start a timer 128 * add_timer - start a timer
129 * @timer: the timer to be added 129 * @timer: the timer to be added
130 * 130 *
131 * The kernel will do a ->function(->data) cal 131 * The kernel will do a ->function(->data) callback from the
132 * timer interrupt at the ->expires point in t 132 * timer interrupt at the ->expires point in the future. The
133 * current time is 'jiffies'. 133 * current time is 'jiffies'.
134 * 134 *
135 * The timer's ->expires, ->function (and if t 135 * The timer's ->expires, ->function (and if the handler uses it, ->data)
136 * fields must be set prior calling this funct 136 * fields must be set prior calling this function.
137 * 137 *
138 * Timers with an ->expires field in the past 138 * Timers with an ->expires field in the past will be executed in the next
139 * timer tick. 139 * timer tick.
140 */ 140 */
141 static inline void add_timer(struct timer_list 141 static inline void add_timer(struct timer_list *timer)
142 { 142 {
143 BUG_ON(timer_pending(timer)); 143 BUG_ON(timer_pending(timer));
144 __mod_timer(timer, timer->expires); 144 __mod_timer(timer, timer->expires);
145 } 145 }
146 146
147 #if defined(CONFIG_SMP) || defined(CONFIG_PREE !! 147 #ifdef CONFIG_SMP
148 extern int timer_pending_sync(struct timer_l <<
149 extern int try_to_del_timer_sync(struct time 148 extern int try_to_del_timer_sync(struct timer_list *timer);
150 extern int del_timer_sync(struct timer_list 149 extern int del_timer_sync(struct timer_list *timer);
151 #else 150 #else
152 # define timer_pending_sync(t) timer_ <<
153 # define try_to_del_timer_sync(t) del_ti 151 # define try_to_del_timer_sync(t) del_timer(t)
154 # define del_timer_sync(t) del_ti 152 # define del_timer_sync(t) del_timer(t)
155 #endif 153 #endif
156 154
157 #define del_singleshot_timer_sync(t) del_timer 155 #define del_singleshot_timer_sync(t) del_timer_sync(t)
158 156
159 extern void init_timers(void); 157 extern void init_timers(void);
160 extern void run_local_timers(void); 158 extern void run_local_timers(void);
161 struct hrtimer; 159 struct hrtimer;
162 extern enum hrtimer_restart it_real_fn(struct 160 extern enum hrtimer_restart it_real_fn(struct hrtimer *);
163 161
164 unsigned long __round_jiffies(unsigned long j, 162 unsigned long __round_jiffies(unsigned long j, int cpu);
165 unsigned long __round_jiffies_relative(unsigne 163 unsigned long __round_jiffies_relative(unsigned long j, int cpu);
166 unsigned long round_jiffies(unsigned long j); 164 unsigned long round_jiffies(unsigned long j);
167 unsigned long round_jiffies_relative(unsigned 165 unsigned long round_jiffies_relative(unsigned long j);
168 166
169 167
170 #endif 168 #endif
171 169
|
This page was automatically generated by the
LXR engine.
|