diff options
Diffstat (limited to 'include/linux/timer.h')
| -rw-r--r-- | include/linux/timer.h | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/include/linux/timer.h b/include/linux/timer.h index 20ac746f3eb3..4419506b564e 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
| @@ -19,7 +19,6 @@ struct timer_list { | |||
| 19 | void (*function)(unsigned long); | 19 | void (*function)(unsigned long); |
| 20 | unsigned long data; | 20 | unsigned long data; |
| 21 | u32 flags; | 21 | u32 flags; |
| 22 | int slack; | ||
| 23 | 22 | ||
| 24 | #ifdef CONFIG_TIMER_STATS | 23 | #ifdef CONFIG_TIMER_STATS |
| 25 | int start_pid; | 24 | int start_pid; |
| @@ -58,11 +57,14 @@ struct timer_list { | |||
| 58 | * workqueue locking issues. It's not meant for executing random crap | 57 | * workqueue locking issues. It's not meant for executing random crap |
| 59 | * with interrupts disabled. Abuse is monitored! | 58 | * with interrupts disabled. Abuse is monitored! |
| 60 | */ | 59 | */ |
| 61 | #define TIMER_CPUMASK 0x0007FFFF | 60 | #define TIMER_CPUMASK 0x0003FFFF |
| 62 | #define TIMER_MIGRATING 0x00080000 | 61 | #define TIMER_MIGRATING 0x00040000 |
| 63 | #define TIMER_BASEMASK (TIMER_CPUMASK | TIMER_MIGRATING) | 62 | #define TIMER_BASEMASK (TIMER_CPUMASK | TIMER_MIGRATING) |
| 64 | #define TIMER_DEFERRABLE 0x00100000 | 63 | #define TIMER_DEFERRABLE 0x00080000 |
| 64 | #define TIMER_PINNED 0x00100000 | ||
| 65 | #define TIMER_IRQSAFE 0x00200000 | 65 | #define TIMER_IRQSAFE 0x00200000 |
| 66 | #define TIMER_ARRAYSHIFT 22 | ||
| 67 | #define TIMER_ARRAYMASK 0xFFC00000 | ||
| 66 | 68 | ||
| 67 | #define __TIMER_INITIALIZER(_function, _expires, _data, _flags) { \ | 69 | #define __TIMER_INITIALIZER(_function, _expires, _data, _flags) { \ |
| 68 | .entry = { .next = TIMER_ENTRY_STATIC }, \ | 70 | .entry = { .next = TIMER_ENTRY_STATIC }, \ |
| @@ -70,7 +72,6 @@ struct timer_list { | |||
| 70 | .expires = (_expires), \ | 72 | .expires = (_expires), \ |
| 71 | .data = (_data), \ | 73 | .data = (_data), \ |
| 72 | .flags = (_flags), \ | 74 | .flags = (_flags), \ |
| 73 | .slack = -1, \ | ||
| 74 | __TIMER_LOCKDEP_MAP_INITIALIZER( \ | 75 | __TIMER_LOCKDEP_MAP_INITIALIZER( \ |
| 75 | __FILE__ ":" __stringify(__LINE__)) \ | 76 | __FILE__ ":" __stringify(__LINE__)) \ |
| 76 | } | 77 | } |
| @@ -78,9 +79,15 @@ struct timer_list { | |||
| 78 | #define TIMER_INITIALIZER(_function, _expires, _data) \ | 79 | #define TIMER_INITIALIZER(_function, _expires, _data) \ |
| 79 | __TIMER_INITIALIZER((_function), (_expires), (_data), 0) | 80 | __TIMER_INITIALIZER((_function), (_expires), (_data), 0) |
| 80 | 81 | ||
| 82 | #define TIMER_PINNED_INITIALIZER(_function, _expires, _data) \ | ||
| 83 | __TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_PINNED) | ||
| 84 | |||
| 81 | #define TIMER_DEFERRED_INITIALIZER(_function, _expires, _data) \ | 85 | #define TIMER_DEFERRED_INITIALIZER(_function, _expires, _data) \ |
| 82 | __TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_DEFERRABLE) | 86 | __TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_DEFERRABLE) |
| 83 | 87 | ||
| 88 | #define TIMER_PINNED_DEFERRED_INITIALIZER(_function, _expires, _data) \ | ||
| 89 | __TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_DEFERRABLE | TIMER_PINNED) | ||
| 90 | |||
| 84 | #define DEFINE_TIMER(_name, _function, _expires, _data) \ | 91 | #define DEFINE_TIMER(_name, _function, _expires, _data) \ |
| 85 | struct timer_list _name = \ | 92 | struct timer_list _name = \ |
| 86 | TIMER_INITIALIZER(_function, _expires, _data) | 93 | TIMER_INITIALIZER(_function, _expires, _data) |
| @@ -124,8 +131,12 @@ static inline void init_timer_on_stack_key(struct timer_list *timer, | |||
| 124 | 131 | ||
| 125 | #define init_timer(timer) \ | 132 | #define init_timer(timer) \ |
| 126 | __init_timer((timer), 0) | 133 | __init_timer((timer), 0) |
| 134 | #define init_timer_pinned(timer) \ | ||
| 135 | __init_timer((timer), TIMER_PINNED) | ||
| 127 | #define init_timer_deferrable(timer) \ | 136 | #define init_timer_deferrable(timer) \ |
| 128 | __init_timer((timer), TIMER_DEFERRABLE) | 137 | __init_timer((timer), TIMER_DEFERRABLE) |
| 138 | #define init_timer_pinned_deferrable(timer) \ | ||
| 139 | __init_timer((timer), TIMER_DEFERRABLE | TIMER_PINNED) | ||
| 129 | #define init_timer_on_stack(timer) \ | 140 | #define init_timer_on_stack(timer) \ |
| 130 | __init_timer_on_stack((timer), 0) | 141 | __init_timer_on_stack((timer), 0) |
| 131 | 142 | ||
| @@ -145,12 +156,20 @@ static inline void init_timer_on_stack_key(struct timer_list *timer, | |||
| 145 | 156 | ||
| 146 | #define setup_timer(timer, fn, data) \ | 157 | #define setup_timer(timer, fn, data) \ |
| 147 | __setup_timer((timer), (fn), (data), 0) | 158 | __setup_timer((timer), (fn), (data), 0) |
| 159 | #define setup_pinned_timer(timer, fn, data) \ | ||
| 160 | __setup_timer((timer), (fn), (data), TIMER_PINNED) | ||
| 148 | #define setup_deferrable_timer(timer, fn, data) \ | 161 | #define setup_deferrable_timer(timer, fn, data) \ |
| 149 | __setup_timer((timer), (fn), (data), TIMER_DEFERRABLE) | 162 | __setup_timer((timer), (fn), (data), TIMER_DEFERRABLE) |
| 163 | #define setup_pinned_deferrable_timer(timer, fn, data) \ | ||
| 164 | __setup_timer((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED) | ||
| 150 | #define setup_timer_on_stack(timer, fn, data) \ | 165 | #define setup_timer_on_stack(timer, fn, data) \ |
| 151 | __setup_timer_on_stack((timer), (fn), (data), 0) | 166 | __setup_timer_on_stack((timer), (fn), (data), 0) |
| 167 | #define setup_pinned_timer_on_stack(timer, fn, data) \ | ||
| 168 | __setup_timer_on_stack((timer), (fn), (data), TIMER_PINNED) | ||
| 152 | #define setup_deferrable_timer_on_stack(timer, fn, data) \ | 169 | #define setup_deferrable_timer_on_stack(timer, fn, data) \ |
| 153 | __setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE) | 170 | __setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE) |
| 171 | #define setup_pinned_deferrable_timer_on_stack(timer, fn, data) \ | ||
| 172 | __setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED) | ||
| 154 | 173 | ||
| 155 | /** | 174 | /** |
| 156 | * timer_pending - is a timer pending? | 175 | * timer_pending - is a timer pending? |
| @@ -171,12 +190,7 @@ extern void add_timer_on(struct timer_list *timer, int cpu); | |||
| 171 | extern int del_timer(struct timer_list * timer); | 190 | extern int del_timer(struct timer_list * timer); |
| 172 | extern int mod_timer(struct timer_list *timer, unsigned long expires); | 191 | extern int mod_timer(struct timer_list *timer, unsigned long expires); |
| 173 | extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); | 192 | extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); |
| 174 | extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires); | ||
| 175 | |||
| 176 | extern void set_timer_slack(struct timer_list *time, int slack_hz); | ||
| 177 | 193 | ||
| 178 | #define TIMER_NOT_PINNED 0 | ||
| 179 | #define TIMER_PINNED 1 | ||
| 180 | /* | 194 | /* |
| 181 | * The jiffies value which is added to now, when there is no timer | 195 | * The jiffies value which is added to now, when there is no timer |
| 182 | * in the timer wheel: | 196 | * in the timer wheel: |
