aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/timer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/timer.h')
-rw-r--r--include/linux/timer.h34
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);
171extern int del_timer(struct timer_list * timer); 190extern int del_timer(struct timer_list * timer);
172extern int mod_timer(struct timer_list *timer, unsigned long expires); 191extern int mod_timer(struct timer_list *timer, unsigned long expires);
173extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); 192extern int mod_timer_pending(struct timer_list *timer, unsigned long expires);
174extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires);
175
176extern 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: