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