diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2014-06-22 06:06:40 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2014-06-23 05:22:35 -0400 |
commit | 5cee964597260237dd2cabb3ec22bba0da24b25d (patch) | |
tree | f548efb4181a4cffb026adf43178e65330533e87 /kernel/time/hrtimer.c | |
parent | 58394271c610e9c65dd0165a1c1f6dec75dc5f3e (diff) |
time/timers: Move all time(r) related files into kernel/time
Except for Kconfig.HZ. That needs a separate treatment.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/time/hrtimer.c')
-rw-r--r-- | kernel/time/hrtimer.c | 1915 |
1 files changed, 1915 insertions, 0 deletions
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c new file mode 100644 index 000000000000..3ab28993f6e0 --- /dev/null +++ b/kernel/time/hrtimer.c | |||
@@ -0,0 +1,1915 @@ | |||
1 | /* | ||
2 | * linux/kernel/hrtimer.c | ||
3 | * | ||
4 | * Copyright(C) 2005-2006, Thomas Gleixner <tglx@linutronix.de> | ||
5 | * Copyright(C) 2005-2007, Red Hat, Inc., Ingo Molnar | ||
6 | * Copyright(C) 2006-2007 Timesys Corp., Thomas Gleixner | ||
7 | * | ||
8 | * High-resolution kernel timers | ||
9 | * | ||
10 | * In contrast to the low-resolution timeout API implemented in | ||
11 | * kernel/timer.c, hrtimers provide finer resolution and accuracy | ||
12 | * depending on system configuration and capabilities. | ||
13 | * | ||
14 | * These timers are currently used for: | ||
15 | * - itimers | ||
16 | * - POSIX timers | ||
17 | * - nanosleep | ||
18 | * - precise in-kernel timing | ||
19 | * | ||
20 | * Started by: Thomas Gleixner and Ingo Molnar | ||
21 | * | ||
22 | * Credits: | ||
23 | * based on kernel/timer.c | ||
24 | * | ||
25 | * Help, testing, suggestions, bugfixes, improvements were | ||
26 | * provided by: | ||
27 | * | ||
28 | * George Anzinger, Andrew Morton, Steven Rostedt, Roman Zippel | ||
29 | * et. al. | ||
30 | * | ||
31 | * For licencing details see kernel-base/COPYING | ||
32 | */ | ||
33 | |||
34 | #include <linux/cpu.h> | ||
35 | #include <linux/export.h> | ||
36 | #include <linux/percpu.h> | ||
37 | #include <linux/hrtimer.h> | ||
38 | #include <linux/notifier.h> | ||
39 | #include <linux/syscalls.h> | ||
40 | #include <linux/kallsyms.h> | ||
41 | #include <linux/interrupt.h> | ||
42 | #include <linux/tick.h> | ||
43 | #include <linux/seq_file.h> | ||
44 | #include <linux/err.h> | ||
45 | #include <linux/debugobjects.h> | ||
46 | #include <linux/sched.h> | ||
47 | #include <linux/sched/sysctl.h> | ||
48 | #include <linux/sched/rt.h> | ||
49 | #include <linux/sched/deadline.h> | ||
50 | #include <linux/timer.h> | ||
51 | #include <linux/freezer.h> | ||
52 | |||
53 | #include <asm/uaccess.h> | ||
54 | |||
55 | #include <trace/events/timer.h> | ||
56 | |||
57 | /* | ||
58 | * The timer bases: | ||
59 | * | ||
60 | * There are more clockids then hrtimer bases. Thus, we index | ||
61 | * into the timer bases by the hrtimer_base_type enum. When trying | ||
62 | * to reach a base using a clockid, hrtimer_clockid_to_base() | ||
63 | * is used to convert from clockid to the proper hrtimer_base_type. | ||
64 | */ | ||
65 | DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) = | ||
66 | { | ||
67 | |||
68 | .lock = __RAW_SPIN_LOCK_UNLOCKED(hrtimer_bases.lock), | ||
69 | .clock_base = | ||
70 | { | ||
71 | { | ||
72 | .index = HRTIMER_BASE_MONOTONIC, | ||
73 | .clockid = CLOCK_MONOTONIC, | ||
74 | .get_time = &ktime_get, | ||
75 | .resolution = KTIME_LOW_RES, | ||
76 | }, | ||
77 | { | ||
78 | .index = HRTIMER_BASE_REALTIME, | ||
79 | .clockid = CLOCK_REALTIME, | ||
80 | .get_time = &ktime_get_real, | ||
81 | .resolution = KTIME_LOW_RES, | ||
82 | }, | ||
83 | { | ||
84 | .index = HRTIMER_BASE_BOOTTIME, | ||
85 | .clockid = CLOCK_BOOTTIME, | ||
86 | .get_time = &ktime_get_boottime, | ||
87 | .resolution = KTIME_LOW_RES, | ||
88 | }, | ||
89 | { | ||
90 | .index = HRTIMER_BASE_TAI, | ||
91 | .clockid = CLOCK_TAI, | ||
92 | .get_time = &ktime_get_clocktai, | ||
93 | .resolution = KTIME_LOW_RES, | ||
94 | }, | ||
95 | } | ||
96 | }; | ||
97 | |||
98 | static const int hrtimer_clock_to_base_table[MAX_CLOCKS] = { | ||
99 | [CLOCK_REALTIME] = HRTIMER_BASE_REALTIME, | ||
100 | [CLOCK_MONOTONIC] = HRTIMER_BASE_MONOTONIC, | ||
101 | [CLOCK_BOOTTIME] = HRTIMER_BASE_BOOTTIME, | ||
102 | [CLOCK_TAI] = HRTIMER_BASE_TAI, | ||
103 | }; | ||
104 | |||
105 | static inline int hrtimer_clockid_to_base(clockid_t clock_id) | ||
106 | { | ||
107 | return hrtimer_clock_to_base_table[clock_id]; | ||
108 | } | ||
109 | |||
110 | |||
111 | /* | ||
112 | * Get the coarse grained time at the softirq based on xtime and | ||
113 | * wall_to_monotonic. | ||
114 | */ | ||
115 | static void hrtimer_get_softirq_time(struct hrtimer_cpu_base *base) | ||
116 | { | ||
117 | ktime_t xtim, mono, boot; | ||
118 | struct timespec xts, tom, slp; | ||
119 | s32 tai_offset; | ||
120 | |||
121 | get_xtime_and_monotonic_and_sleep_offset(&xts, &tom, &slp); | ||
122 | tai_offset = timekeeping_get_tai_offset(); | ||
123 | |||
124 | xtim = timespec_to_ktime(xts); | ||
125 | mono = ktime_add(xtim, timespec_to_ktime(tom)); | ||
126 | boot = ktime_add(mono, timespec_to_ktime(slp)); | ||
127 | base->clock_base[HRTIMER_BASE_REALTIME].softirq_time = xtim; | ||
128 | base->clock_base[HRTIMER_BASE_MONOTONIC].softirq_time = mono; | ||
129 | base->clock_base[HRTIMER_BASE_BOOTTIME].softirq_time = boot; | ||
130 | base->clock_base[HRTIMER_BASE_TAI].softirq_time = | ||
131 | ktime_add(xtim, ktime_set(tai_offset, 0)); | ||
132 | } | ||
133 | |||
134 | /* | ||
135 | * Functions and macros which are different for UP/SMP systems are kept in a | ||
136 | * single place | ||
137 | */ | ||
138 | #ifdef CONFIG_SMP | ||
139 | |||
140 | /* | ||
141 | * We are using hashed locking: holding per_cpu(hrtimer_bases)[n].lock | ||
142 | * means that all timers which are tied to this base via timer->base are | ||
143 | * locked, and the base itself is locked too. | ||
144 | * | ||
145 | * So __run_timers/migrate_timers can safely modify all timers which could | ||
146 | * be found on the lists/queues. | ||
147 | * | ||
148 | * When the timer's base is locked, and the timer removed from list, it is | ||
149 | * possible to set timer->base = NULL and drop the lock: the timer remains | ||
150 | * locked. | ||
151 | */ | ||
152 | static | ||
153 | struct hrtimer_clock_base *lock_hrtimer_base(const struct hrtimer *timer, | ||
154 | unsigned long *flags) | ||
155 | { | ||
156 | struct hrtimer_clock_base *base; | ||
157 | |||
158 | for (;;) { | ||
159 | base = timer->base; | ||
160 | if (likely(base != NULL)) { | ||
161 | raw_spin_lock_irqsave(&base->cpu_base->lock, *flags); | ||
162 | if (likely(base == timer->base)) | ||
163 | return base; | ||
164 | /* The timer has migrated to another CPU: */ | ||
165 | raw_spin_unlock_irqrestore(&base->cpu_base->lock, *flags); | ||
166 | } | ||
167 | cpu_relax(); | ||
168 | } | ||
169 | } | ||
170 | |||
171 | /* | ||
172 | * With HIGHRES=y we do not migrate the timer when it is expiring | ||
173 | * before the next event on the target cpu because we cannot reprogram | ||
174 | * the target cpu hardware and we would cause it to fire late. | ||
175 | * | ||
176 | * Called with cpu_base->lock of target cpu held. | ||
177 | */ | ||
178 | static int | ||
179 | hrtimer_check_target(struct hrtimer *timer, struct hrtimer_clock_base *new_base) | ||
180 | { | ||
181 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
182 | ktime_t expires; | ||
183 | |||
184 | if (!new_base->cpu_base->hres_active) | ||
185 | return 0; | ||
186 | |||
187 | expires = ktime_sub(hrtimer_get_expires(timer), new_base->offset); | ||
188 | return expires.tv64 <= new_base->cpu_base->expires_next.tv64; | ||
189 | #else | ||
190 | return 0; | ||
191 | #endif | ||
192 | } | ||
193 | |||
194 | /* | ||
195 | * Switch the timer base to the current CPU when possible. | ||
196 | */ | ||
197 | static inline struct hrtimer_clock_base * | ||
198 | switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_clock_base *base, | ||
199 | int pinned) | ||
200 | { | ||
201 | struct hrtimer_clock_base *new_base; | ||
202 | struct hrtimer_cpu_base *new_cpu_base; | ||
203 | int this_cpu = smp_processor_id(); | ||
204 | int cpu = get_nohz_timer_target(pinned); | ||
205 | int basenum = base->index; | ||
206 | |||
207 | again: | ||
208 | new_cpu_base = &per_cpu(hrtimer_bases, cpu); | ||
209 | new_base = &new_cpu_base->clock_base[basenum]; | ||
210 | |||
211 | if (base != new_base) { | ||
212 | /* | ||
213 | * We are trying to move timer to new_base. | ||
214 | * However we can't change timer's base while it is running, | ||
215 | * so we keep it on the same CPU. No hassle vs. reprogramming | ||
216 | * the event source in the high resolution case. The softirq | ||
217 | * code will take care of this when the timer function has | ||
218 | * completed. There is no conflict as we hold the lock until | ||
219 | * the timer is enqueued. | ||
220 | */ | ||
221 | if (unlikely(hrtimer_callback_running(timer))) | ||
222 | return base; | ||
223 | |||
224 | /* See the comment in lock_timer_base() */ | ||
225 | timer->base = NULL; | ||
226 | raw_spin_unlock(&base->cpu_base->lock); | ||
227 | raw_spin_lock(&new_base->cpu_base->lock); | ||
228 | |||
229 | if (cpu != this_cpu && hrtimer_check_target(timer, new_base)) { | ||
230 | cpu = this_cpu; | ||
231 | raw_spin_unlock(&new_base->cpu_base->lock); | ||
232 | raw_spin_lock(&base->cpu_base->lock); | ||
233 | timer->base = base; | ||
234 | goto again; | ||
235 | } | ||
236 | timer->base = new_base; | ||
237 | } else { | ||
238 | if (cpu != this_cpu && hrtimer_check_target(timer, new_base)) { | ||
239 | cpu = this_cpu; | ||
240 | goto again; | ||
241 | } | ||
242 | } | ||
243 | return new_base; | ||
244 | } | ||
245 | |||
246 | #else /* CONFIG_SMP */ | ||
247 | |||
248 | static inline struct hrtimer_clock_base * | ||
249 | lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags) | ||
250 | { | ||
251 | struct hrtimer_clock_base *base = timer->base; | ||
252 | |||
253 | raw_spin_lock_irqsave(&base->cpu_base->lock, *flags); | ||
254 | |||
255 | return base; | ||
256 | } | ||
257 | |||
258 | # define switch_hrtimer_base(t, b, p) (b) | ||
259 | |||
260 | #endif /* !CONFIG_SMP */ | ||
261 | |||
262 | /* | ||
263 | * Functions for the union type storage format of ktime_t which are | ||
264 | * too large for inlining: | ||
265 | */ | ||
266 | #if BITS_PER_LONG < 64 | ||
267 | # ifndef CONFIG_KTIME_SCALAR | ||
268 | /** | ||
269 | * ktime_add_ns - Add a scalar nanoseconds value to a ktime_t variable | ||
270 | * @kt: addend | ||
271 | * @nsec: the scalar nsec value to add | ||
272 | * | ||
273 | * Returns the sum of kt and nsec in ktime_t format | ||
274 | */ | ||
275 | ktime_t ktime_add_ns(const ktime_t kt, u64 nsec) | ||
276 | { | ||
277 | ktime_t tmp; | ||
278 | |||
279 | if (likely(nsec < NSEC_PER_SEC)) { | ||
280 | tmp.tv64 = nsec; | ||
281 | } else { | ||
282 | unsigned long rem = do_div(nsec, NSEC_PER_SEC); | ||
283 | |||
284 | /* Make sure nsec fits into long */ | ||
285 | if (unlikely(nsec > KTIME_SEC_MAX)) | ||
286 | return (ktime_t){ .tv64 = KTIME_MAX }; | ||
287 | |||
288 | tmp = ktime_set((long)nsec, rem); | ||
289 | } | ||
290 | |||
291 | return ktime_add(kt, tmp); | ||
292 | } | ||
293 | |||
294 | EXPORT_SYMBOL_GPL(ktime_add_ns); | ||
295 | |||
296 | /** | ||
297 | * ktime_sub_ns - Subtract a scalar nanoseconds value from a ktime_t variable | ||
298 | * @kt: minuend | ||
299 | * @nsec: the scalar nsec value to subtract | ||
300 | * | ||
301 | * Returns the subtraction of @nsec from @kt in ktime_t format | ||
302 | */ | ||
303 | ktime_t ktime_sub_ns(const ktime_t kt, u64 nsec) | ||
304 | { | ||
305 | ktime_t tmp; | ||
306 | |||
307 | if (likely(nsec < NSEC_PER_SEC)) { | ||
308 | tmp.tv64 = nsec; | ||
309 | } else { | ||
310 | unsigned long rem = do_div(nsec, NSEC_PER_SEC); | ||
311 | |||
312 | tmp = ktime_set((long)nsec, rem); | ||
313 | } | ||
314 | |||
315 | return ktime_sub(kt, tmp); | ||
316 | } | ||
317 | |||
318 | EXPORT_SYMBOL_GPL(ktime_sub_ns); | ||
319 | # endif /* !CONFIG_KTIME_SCALAR */ | ||
320 | |||
321 | /* | ||
322 | * Divide a ktime value by a nanosecond value | ||
323 | */ | ||
324 | u64 ktime_divns(const ktime_t kt, s64 div) | ||
325 | { | ||
326 | u64 dclc; | ||
327 | int sft = 0; | ||
328 | |||
329 | dclc = ktime_to_ns(kt); | ||
330 | /* Make sure the divisor is less than 2^32: */ | ||
331 | while (div >> 32) { | ||
332 | sft++; | ||
333 | div >>= 1; | ||
334 | } | ||
335 | dclc >>= sft; | ||
336 | do_div(dclc, (unsigned long) div); | ||
337 | |||
338 | return dclc; | ||
339 | } | ||
340 | #endif /* BITS_PER_LONG >= 64 */ | ||
341 | |||
342 | /* | ||
343 | * Add two ktime values and do a safety check for overflow: | ||
344 | */ | ||
345 | ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs) | ||
346 | { | ||
347 | ktime_t res = ktime_add(lhs, rhs); | ||
348 | |||
349 | /* | ||
350 | * We use KTIME_SEC_MAX here, the maximum timeout which we can | ||
351 | * return to user space in a timespec: | ||
352 | */ | ||
353 | if (res.tv64 < 0 || res.tv64 < lhs.tv64 || res.tv64 < rhs.tv64) | ||
354 | res = ktime_set(KTIME_SEC_MAX, 0); | ||
355 | |||
356 | return res; | ||
357 | } | ||
358 | |||
359 | EXPORT_SYMBOL_GPL(ktime_add_safe); | ||
360 | |||
361 | #ifdef CONFIG_DEBUG_OBJECTS_TIMERS | ||
362 | |||
363 | static struct debug_obj_descr hrtimer_debug_descr; | ||
364 | |||
365 | static void *hrtimer_debug_hint(void *addr) | ||
366 | { | ||
367 | return ((struct hrtimer *) addr)->function; | ||
368 | } | ||
369 | |||
370 | /* | ||
371 | * fixup_init is called when: | ||
372 | * - an active object is initialized | ||
373 | */ | ||
374 | static int hrtimer_fixup_init(void *addr, enum debug_obj_state state) | ||
375 | { | ||
376 | struct hrtimer *timer = addr; | ||
377 | |||
378 | switch (state) { | ||
379 | case ODEBUG_STATE_ACTIVE: | ||
380 | hrtimer_cancel(timer); | ||
381 | debug_object_init(timer, &hrtimer_debug_descr); | ||
382 | return 1; | ||
383 | default: | ||
384 | return 0; | ||
385 | } | ||
386 | } | ||
387 | |||
388 | /* | ||
389 | * fixup_activate is called when: | ||
390 | * - an active object is activated | ||
391 | * - an unknown object is activated (might be a statically initialized object) | ||
392 | */ | ||
393 | static int hrtimer_fixup_activate(void *addr, enum debug_obj_state state) | ||
394 | { | ||
395 | switch (state) { | ||
396 | |||
397 | case ODEBUG_STATE_NOTAVAILABLE: | ||
398 | WARN_ON_ONCE(1); | ||
399 | return 0; | ||
400 | |||
401 | case ODEBUG_STATE_ACTIVE: | ||
402 | WARN_ON(1); | ||
403 | |||
404 | default: | ||
405 | return 0; | ||
406 | } | ||
407 | } | ||
408 | |||
409 | /* | ||
410 | * fixup_free is called when: | ||
411 | * - an active object is freed | ||
412 | */ | ||
413 | static int hrtimer_fixup_free(void *addr, enum debug_obj_state state) | ||
414 | { | ||
415 | struct hrtimer *timer = addr; | ||
416 | |||
417 | switch (state) { | ||
418 | case ODEBUG_STATE_ACTIVE: | ||
419 | hrtimer_cancel(timer); | ||
420 | debug_object_free(timer, &hrtimer_debug_descr); | ||
421 | return 1; | ||
422 | default: | ||
423 | return 0; | ||
424 | } | ||
425 | } | ||
426 | |||
427 | static struct debug_obj_descr hrtimer_debug_descr = { | ||
428 | .name = "hrtimer", | ||
429 | .debug_hint = hrtimer_debug_hint, | ||
430 | .fixup_init = hrtimer_fixup_init, | ||
431 | .fixup_activate = hrtimer_fixup_activate, | ||
432 | .fixup_free = hrtimer_fixup_free, | ||
433 | }; | ||
434 | |||
435 | static inline void debug_hrtimer_init(struct hrtimer *timer) | ||
436 | { | ||
437 | debug_object_init(timer, &hrtimer_debug_descr); | ||
438 | } | ||
439 | |||
440 | static inline void debug_hrtimer_activate(struct hrtimer *timer) | ||
441 | { | ||
442 | debug_object_activate(timer, &hrtimer_debug_descr); | ||
443 | } | ||
444 | |||
445 | static inline void debug_hrtimer_deactivate(struct hrtimer *timer) | ||
446 | { | ||
447 | debug_object_deactivate(timer, &hrtimer_debug_descr); | ||
448 | } | ||
449 | |||
450 | static inline void debug_hrtimer_free(struct hrtimer *timer) | ||
451 | { | ||
452 | debug_object_free(timer, &hrtimer_debug_descr); | ||
453 | } | ||
454 | |||
455 | static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id, | ||
456 | enum hrtimer_mode mode); | ||
457 | |||
458 | void hrtimer_init_on_stack(struct hrtimer *timer, clockid_t clock_id, | ||
459 | enum hrtimer_mode mode) | ||
460 | { | ||
461 | debug_object_init_on_stack(timer, &hrtimer_debug_descr); | ||
462 | __hrtimer_init(timer, clock_id, mode); | ||
463 | } | ||
464 | EXPORT_SYMBOL_GPL(hrtimer_init_on_stack); | ||
465 | |||
466 | void destroy_hrtimer_on_stack(struct hrtimer *timer) | ||
467 | { | ||
468 | debug_object_free(timer, &hrtimer_debug_descr); | ||
469 | } | ||
470 | |||
471 | #else | ||
472 | static inline void debug_hrtimer_init(struct hrtimer *timer) { } | ||
473 | static inline void debug_hrtimer_activate(struct hrtimer *timer) { } | ||
474 | static inline void debug_hrtimer_deactivate(struct hrtimer *timer) { } | ||
475 | #endif | ||
476 | |||
477 | static inline void | ||
478 | debug_init(struct hrtimer *timer, clockid_t clockid, | ||
479 | enum hrtimer_mode mode) | ||
480 | { | ||
481 | debug_hrtimer_init(timer); | ||
482 | trace_hrtimer_init(timer, clockid, mode); | ||
483 | } | ||
484 | |||
485 | static inline void debug_activate(struct hrtimer *timer) | ||
486 | { | ||
487 | debug_hrtimer_activate(timer); | ||
488 | trace_hrtimer_start(timer); | ||
489 | } | ||
490 | |||
491 | static inline void debug_deactivate(struct hrtimer *timer) | ||
492 | { | ||
493 | debug_hrtimer_deactivate(timer); | ||
494 | trace_hrtimer_cancel(timer); | ||
495 | } | ||
496 | |||
497 | /* High resolution timer related functions */ | ||
498 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
499 | |||
500 | /* | ||
501 | * High resolution timer enabled ? | ||
502 | */ | ||
503 | static int hrtimer_hres_enabled __read_mostly = 1; | ||
504 | |||
505 | /* | ||
506 | * Enable / Disable high resolution mode | ||
507 | */ | ||
508 | static int __init setup_hrtimer_hres(char *str) | ||
509 | { | ||
510 | if (!strcmp(str, "off")) | ||
511 | hrtimer_hres_enabled = 0; | ||
512 | else if (!strcmp(str, "on")) | ||
513 | hrtimer_hres_enabled = 1; | ||
514 | else | ||
515 | return 0; | ||
516 | return 1; | ||
517 | } | ||
518 | |||
519 | __setup("highres=", setup_hrtimer_hres); | ||
520 | |||
521 | /* | ||
522 | * hrtimer_high_res_enabled - query, if the highres mode is enabled | ||
523 | */ | ||
524 | static inline int hrtimer_is_hres_enabled(void) | ||
525 | { | ||
526 | return hrtimer_hres_enabled; | ||
527 | } | ||
528 | |||
529 | /* | ||
530 | * Is the high resolution mode active ? | ||
531 | */ | ||
532 | static inline int hrtimer_hres_active(void) | ||
533 | { | ||
534 | return __this_cpu_read(hrtimer_bases.hres_active); | ||
535 | } | ||
536 | |||
537 | /* | ||
538 | * Reprogram the event source with checking both queues for the | ||
539 | * next event | ||
540 | * Called with interrupts disabled and base->lock held | ||
541 | */ | ||
542 | static void | ||
543 | hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base, int skip_equal) | ||
544 | { | ||
545 | int i; | ||
546 | struct hrtimer_clock_base *base = cpu_base->clock_base; | ||
547 | ktime_t expires, expires_next; | ||
548 | |||
549 | expires_next.tv64 = KTIME_MAX; | ||
550 | |||
551 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++, base++) { | ||
552 | struct hrtimer *timer; | ||
553 | struct timerqueue_node *next; | ||
554 | |||
555 | next = timerqueue_getnext(&base->active); | ||
556 | if (!next) | ||
557 | continue; | ||
558 | timer = container_of(next, struct hrtimer, node); | ||
559 | |||
560 | expires = ktime_sub(hrtimer_get_expires(timer), base->offset); | ||
561 | /* | ||
562 | * clock_was_set() has changed base->offset so the | ||
563 | * result might be negative. Fix it up to prevent a | ||
564 | * false positive in clockevents_program_event() | ||
565 | */ | ||
566 | if (expires.tv64 < 0) | ||
567 | expires.tv64 = 0; | ||
568 | if (expires.tv64 < expires_next.tv64) | ||
569 | expires_next = expires; | ||
570 | } | ||
571 | |||
572 | if (skip_equal && expires_next.tv64 == cpu_base->expires_next.tv64) | ||
573 | return; | ||
574 | |||
575 | cpu_base->expires_next.tv64 = expires_next.tv64; | ||
576 | |||
577 | /* | ||
578 | * If a hang was detected in the last timer interrupt then we | ||
579 | * leave the hang delay active in the hardware. We want the | ||
580 | * system to make progress. That also prevents the following | ||
581 | * scenario: | ||
582 | * T1 expires 50ms from now | ||
583 | * T2 expires 5s from now | ||
584 | * | ||
585 | * T1 is removed, so this code is called and would reprogram | ||
586 | * the hardware to 5s from now. Any hrtimer_start after that | ||
587 | * will not reprogram the hardware due to hang_detected being | ||
588 | * set. So we'd effectivly block all timers until the T2 event | ||
589 | * fires. | ||
590 | */ | ||
591 | if (cpu_base->hang_detected) | ||
592 | return; | ||
593 | |||
594 | if (cpu_base->expires_next.tv64 != KTIME_MAX) | ||
595 | tick_program_event(cpu_base->expires_next, 1); | ||
596 | } | ||
597 | |||
598 | /* | ||
599 | * Shared reprogramming for clock_realtime and clock_monotonic | ||
600 | * | ||
601 | * When a timer is enqueued and expires earlier than the already enqueued | ||
602 | * timers, we have to check, whether it expires earlier than the timer for | ||
603 | * which the clock event device was armed. | ||
604 | * | ||
605 | * Called with interrupts disabled and base->cpu_base.lock held | ||
606 | */ | ||
607 | static int hrtimer_reprogram(struct hrtimer *timer, | ||
608 | struct hrtimer_clock_base *base) | ||
609 | { | ||
610 | struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); | ||
611 | ktime_t expires = ktime_sub(hrtimer_get_expires(timer), base->offset); | ||
612 | int res; | ||
613 | |||
614 | WARN_ON_ONCE(hrtimer_get_expires_tv64(timer) < 0); | ||
615 | |||
616 | /* | ||
617 | * When the callback is running, we do not reprogram the clock event | ||
618 | * device. The timer callback is either running on a different CPU or | ||
619 | * the callback is executed in the hrtimer_interrupt context. The | ||
620 | * reprogramming is handled either by the softirq, which called the | ||
621 | * callback or at the end of the hrtimer_interrupt. | ||
622 | */ | ||
623 | if (hrtimer_callback_running(timer)) | ||
624 | return 0; | ||
625 | |||
626 | /* | ||
627 | * CLOCK_REALTIME timer might be requested with an absolute | ||
628 | * expiry time which is less than base->offset. Nothing wrong | ||
629 | * about that, just avoid to call into the tick code, which | ||
630 | * has now objections against negative expiry values. | ||
631 | */ | ||
632 | if (expires.tv64 < 0) | ||
633 | return -ETIME; | ||
634 | |||
635 | if (expires.tv64 >= cpu_base->expires_next.tv64) | ||
636 | return 0; | ||
637 | |||
638 | /* | ||
639 | * If a hang was detected in the last timer interrupt then we | ||
640 | * do not schedule a timer which is earlier than the expiry | ||
641 | * which we enforced in the hang detection. We want the system | ||
642 | * to make progress. | ||
643 | */ | ||
644 | if (cpu_base->hang_detected) | ||
645 | return 0; | ||
646 | |||
647 | /* | ||
648 | * Clockevents returns -ETIME, when the event was in the past. | ||
649 | */ | ||
650 | res = tick_program_event(expires, 0); | ||
651 | if (!IS_ERR_VALUE(res)) | ||
652 | cpu_base->expires_next = expires; | ||
653 | return res; | ||
654 | } | ||
655 | |||
656 | /* | ||
657 | * Initialize the high resolution related parts of cpu_base | ||
658 | */ | ||
659 | static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) | ||
660 | { | ||
661 | base->expires_next.tv64 = KTIME_MAX; | ||
662 | base->hres_active = 0; | ||
663 | } | ||
664 | |||
665 | /* | ||
666 | * When High resolution timers are active, try to reprogram. Note, that in case | ||
667 | * the state has HRTIMER_STATE_CALLBACK set, no reprogramming and no expiry | ||
668 | * check happens. The timer gets enqueued into the rbtree. The reprogramming | ||
669 | * and expiry check is done in the hrtimer_interrupt or in the softirq. | ||
670 | */ | ||
671 | static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, | ||
672 | struct hrtimer_clock_base *base) | ||
673 | { | ||
674 | return base->cpu_base->hres_active && hrtimer_reprogram(timer, base); | ||
675 | } | ||
676 | |||
677 | static inline ktime_t hrtimer_update_base(struct hrtimer_cpu_base *base) | ||
678 | { | ||
679 | ktime_t *offs_real = &base->clock_base[HRTIMER_BASE_REALTIME].offset; | ||
680 | ktime_t *offs_boot = &base->clock_base[HRTIMER_BASE_BOOTTIME].offset; | ||
681 | ktime_t *offs_tai = &base->clock_base[HRTIMER_BASE_TAI].offset; | ||
682 | |||
683 | return ktime_get_update_offsets(offs_real, offs_boot, offs_tai); | ||
684 | } | ||
685 | |||
686 | /* | ||
687 | * Retrigger next event is called after clock was set | ||
688 | * | ||
689 | * Called with interrupts disabled via on_each_cpu() | ||
690 | */ | ||
691 | static void retrigger_next_event(void *arg) | ||
692 | { | ||
693 | struct hrtimer_cpu_base *base = &__get_cpu_var(hrtimer_bases); | ||
694 | |||
695 | if (!hrtimer_hres_active()) | ||
696 | return; | ||
697 | |||
698 | raw_spin_lock(&base->lock); | ||
699 | hrtimer_update_base(base); | ||
700 | hrtimer_force_reprogram(base, 0); | ||
701 | raw_spin_unlock(&base->lock); | ||
702 | } | ||
703 | |||
704 | /* | ||
705 | * Switch to high resolution mode | ||
706 | */ | ||
707 | static int hrtimer_switch_to_hres(void) | ||
708 | { | ||
709 | int i, cpu = smp_processor_id(); | ||
710 | struct hrtimer_cpu_base *base = &per_cpu(hrtimer_bases, cpu); | ||
711 | unsigned long flags; | ||
712 | |||
713 | if (base->hres_active) | ||
714 | return 1; | ||
715 | |||
716 | local_irq_save(flags); | ||
717 | |||
718 | if (tick_init_highres()) { | ||
719 | local_irq_restore(flags); | ||
720 | printk(KERN_WARNING "Could not switch to high resolution " | ||
721 | "mode on CPU %d\n", cpu); | ||
722 | return 0; | ||
723 | } | ||
724 | base->hres_active = 1; | ||
725 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) | ||
726 | base->clock_base[i].resolution = KTIME_HIGH_RES; | ||
727 | |||
728 | tick_setup_sched_timer(); | ||
729 | /* "Retrigger" the interrupt to get things going */ | ||
730 | retrigger_next_event(NULL); | ||
731 | local_irq_restore(flags); | ||
732 | return 1; | ||
733 | } | ||
734 | |||
735 | static void clock_was_set_work(struct work_struct *work) | ||
736 | { | ||
737 | clock_was_set(); | ||
738 | } | ||
739 | |||
740 | static DECLARE_WORK(hrtimer_work, clock_was_set_work); | ||
741 | |||
742 | /* | ||
743 | * Called from timekeeping and resume code to reprogramm the hrtimer | ||
744 | * interrupt device on all cpus. | ||
745 | */ | ||
746 | void clock_was_set_delayed(void) | ||
747 | { | ||
748 | schedule_work(&hrtimer_work); | ||
749 | } | ||
750 | |||
751 | #else | ||
752 | |||
753 | static inline int hrtimer_hres_active(void) { return 0; } | ||
754 | static inline int hrtimer_is_hres_enabled(void) { return 0; } | ||
755 | static inline int hrtimer_switch_to_hres(void) { return 0; } | ||
756 | static inline void | ||
757 | hrtimer_force_reprogram(struct hrtimer_cpu_base *base, int skip_equal) { } | ||
758 | static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, | ||
759 | struct hrtimer_clock_base *base) | ||
760 | { | ||
761 | return 0; | ||
762 | } | ||
763 | static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) { } | ||
764 | static inline void retrigger_next_event(void *arg) { } | ||
765 | |||
766 | #endif /* CONFIG_HIGH_RES_TIMERS */ | ||
767 | |||
768 | /* | ||
769 | * Clock realtime was set | ||
770 | * | ||
771 | * Change the offset of the realtime clock vs. the monotonic | ||
772 | * clock. | ||
773 | * | ||
774 | * We might have to reprogram the high resolution timer interrupt. On | ||
775 | * SMP we call the architecture specific code to retrigger _all_ high | ||
776 | * resolution timer interrupts. On UP we just disable interrupts and | ||
777 | * call the high resolution interrupt code. | ||
778 | */ | ||
779 | void clock_was_set(void) | ||
780 | { | ||
781 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
782 | /* Retrigger the CPU local events everywhere */ | ||
783 | on_each_cpu(retrigger_next_event, NULL, 1); | ||
784 | #endif | ||
785 | timerfd_clock_was_set(); | ||
786 | } | ||
787 | |||
788 | /* | ||
789 | * During resume we might have to reprogram the high resolution timer | ||
790 | * interrupt on all online CPUs. However, all other CPUs will be | ||
791 | * stopped with IRQs interrupts disabled so the clock_was_set() call | ||
792 | * must be deferred. | ||
793 | */ | ||
794 | void hrtimers_resume(void) | ||
795 | { | ||
796 | WARN_ONCE(!irqs_disabled(), | ||
797 | KERN_INFO "hrtimers_resume() called with IRQs enabled!"); | ||
798 | |||
799 | /* Retrigger on the local CPU */ | ||
800 | retrigger_next_event(NULL); | ||
801 | /* And schedule a retrigger for all others */ | ||
802 | clock_was_set_delayed(); | ||
803 | } | ||
804 | |||
805 | static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer) | ||
806 | { | ||
807 | #ifdef CONFIG_TIMER_STATS | ||
808 | if (timer->start_site) | ||
809 | return; | ||
810 | timer->start_site = __builtin_return_address(0); | ||
811 | memcpy(timer->start_comm, current->comm, TASK_COMM_LEN); | ||
812 | timer->start_pid = current->pid; | ||
813 | #endif | ||
814 | } | ||
815 | |||
816 | static inline void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer) | ||
817 | { | ||
818 | #ifdef CONFIG_TIMER_STATS | ||
819 | timer->start_site = NULL; | ||
820 | #endif | ||
821 | } | ||
822 | |||
823 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) | ||
824 | { | ||
825 | #ifdef CONFIG_TIMER_STATS | ||
826 | if (likely(!timer_stats_active)) | ||
827 | return; | ||
828 | timer_stats_update_stats(timer, timer->start_pid, timer->start_site, | ||
829 | timer->function, timer->start_comm, 0); | ||
830 | #endif | ||
831 | } | ||
832 | |||
833 | /* | ||
834 | * Counterpart to lock_hrtimer_base above: | ||
835 | */ | ||
836 | static inline | ||
837 | void unlock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags) | ||
838 | { | ||
839 | raw_spin_unlock_irqrestore(&timer->base->cpu_base->lock, *flags); | ||
840 | } | ||
841 | |||
842 | /** | ||
843 | * hrtimer_forward - forward the timer expiry | ||
844 | * @timer: hrtimer to forward | ||
845 | * @now: forward past this time | ||
846 | * @interval: the interval to forward | ||
847 | * | ||
848 | * Forward the timer expiry so it will expire in the future. | ||
849 | * Returns the number of overruns. | ||
850 | */ | ||
851 | u64 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval) | ||
852 | { | ||
853 | u64 orun = 1; | ||
854 | ktime_t delta; | ||
855 | |||
856 | delta = ktime_sub(now, hrtimer_get_expires(timer)); | ||
857 | |||
858 | if (delta.tv64 < 0) | ||
859 | return 0; | ||
860 | |||
861 | if (interval.tv64 < timer->base->resolution.tv64) | ||
862 | interval.tv64 = timer->base->resolution.tv64; | ||
863 | |||
864 | if (unlikely(delta.tv64 >= interval.tv64)) { | ||
865 | s64 incr = ktime_to_ns(interval); | ||
866 | |||
867 | orun = ktime_divns(delta, incr); | ||
868 | hrtimer_add_expires_ns(timer, incr * orun); | ||
869 | if (hrtimer_get_expires_tv64(timer) > now.tv64) | ||
870 | return orun; | ||
871 | /* | ||
872 | * This (and the ktime_add() below) is the | ||
873 | * correction for exact: | ||
874 | */ | ||
875 | orun++; | ||
876 | } | ||
877 | hrtimer_add_expires(timer, interval); | ||
878 | |||
879 | return orun; | ||
880 | } | ||
881 | EXPORT_SYMBOL_GPL(hrtimer_forward); | ||
882 | |||
883 | /* | ||
884 | * enqueue_hrtimer - internal function to (re)start a timer | ||
885 | * | ||
886 | * The timer is inserted in expiry order. Insertion into the | ||
887 | * red black tree is O(log(n)). Must hold the base lock. | ||
888 | * | ||
889 | * Returns 1 when the new timer is the leftmost timer in the tree. | ||
890 | */ | ||
891 | static int enqueue_hrtimer(struct hrtimer *timer, | ||
892 | struct hrtimer_clock_base *base) | ||
893 | { | ||
894 | debug_activate(timer); | ||
895 | |||
896 | timerqueue_add(&base->active, &timer->node); | ||
897 | base->cpu_base->active_bases |= 1 << base->index; | ||
898 | |||
899 | /* | ||
900 | * HRTIMER_STATE_ENQUEUED is or'ed to the current state to preserve the | ||
901 | * state of a possibly running callback. | ||
902 | */ | ||
903 | timer->state |= HRTIMER_STATE_ENQUEUED; | ||
904 | |||
905 | return (&timer->node == base->active.next); | ||
906 | } | ||
907 | |||
908 | /* | ||
909 | * __remove_hrtimer - internal function to remove a timer | ||
910 | * | ||
911 | * Caller must hold the base lock. | ||
912 | * | ||
913 | * High resolution timer mode reprograms the clock event device when the | ||
914 | * timer is the one which expires next. The caller can disable this by setting | ||
915 | * reprogram to zero. This is useful, when the context does a reprogramming | ||
916 | * anyway (e.g. timer interrupt) | ||
917 | */ | ||
918 | static void __remove_hrtimer(struct hrtimer *timer, | ||
919 | struct hrtimer_clock_base *base, | ||
920 | unsigned long newstate, int reprogram) | ||
921 | { | ||
922 | struct timerqueue_node *next_timer; | ||
923 | if (!(timer->state & HRTIMER_STATE_ENQUEUED)) | ||
924 | goto out; | ||
925 | |||
926 | next_timer = timerqueue_getnext(&base->active); | ||
927 | timerqueue_del(&base->active, &timer->node); | ||
928 | if (&timer->node == next_timer) { | ||
929 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
930 | /* Reprogram the clock event device. if enabled */ | ||
931 | if (reprogram && hrtimer_hres_active()) { | ||
932 | ktime_t expires; | ||
933 | |||
934 | expires = ktime_sub(hrtimer_get_expires(timer), | ||
935 | base->offset); | ||
936 | if (base->cpu_base->expires_next.tv64 == expires.tv64) | ||
937 | hrtimer_force_reprogram(base->cpu_base, 1); | ||
938 | } | ||
939 | #endif | ||
940 | } | ||
941 | if (!timerqueue_getnext(&base->active)) | ||
942 | base->cpu_base->active_bases &= ~(1 << base->index); | ||
943 | out: | ||
944 | timer->state = newstate; | ||
945 | } | ||
946 | |||
947 | /* | ||
948 | * remove hrtimer, called with base lock held | ||
949 | */ | ||
950 | static inline int | ||
951 | remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base) | ||
952 | { | ||
953 | if (hrtimer_is_queued(timer)) { | ||
954 | unsigned long state; | ||
955 | int reprogram; | ||
956 | |||
957 | /* | ||
958 | * Remove the timer and force reprogramming when high | ||
959 | * resolution mode is active and the timer is on the current | ||
960 | * CPU. If we remove a timer on another CPU, reprogramming is | ||
961 | * skipped. The interrupt event on this CPU is fired and | ||
962 | * reprogramming happens in the interrupt handler. This is a | ||
963 | * rare case and less expensive than a smp call. | ||
964 | */ | ||
965 | debug_deactivate(timer); | ||
966 | timer_stats_hrtimer_clear_start_info(timer); | ||
967 | reprogram = base->cpu_base == &__get_cpu_var(hrtimer_bases); | ||
968 | /* | ||
969 | * We must preserve the CALLBACK state flag here, | ||
970 | * otherwise we could move the timer base in | ||
971 | * switch_hrtimer_base. | ||
972 | */ | ||
973 | state = timer->state & HRTIMER_STATE_CALLBACK; | ||
974 | __remove_hrtimer(timer, base, state, reprogram); | ||
975 | return 1; | ||
976 | } | ||
977 | return 0; | ||
978 | } | ||
979 | |||
980 | int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, | ||
981 | unsigned long delta_ns, const enum hrtimer_mode mode, | ||
982 | int wakeup) | ||
983 | { | ||
984 | struct hrtimer_clock_base *base, *new_base; | ||
985 | unsigned long flags; | ||
986 | int ret, leftmost; | ||
987 | |||
988 | base = lock_hrtimer_base(timer, &flags); | ||
989 | |||
990 | /* Remove an active timer from the queue: */ | ||
991 | ret = remove_hrtimer(timer, base); | ||
992 | |||
993 | if (mode & HRTIMER_MODE_REL) { | ||
994 | tim = ktime_add_safe(tim, base->get_time()); | ||
995 | /* | ||
996 | * CONFIG_TIME_LOW_RES is a temporary way for architectures | ||
997 | * to signal that they simply return xtime in | ||
998 | * do_gettimeoffset(). In this case we want to round up by | ||
999 | * resolution when starting a relative timer, to avoid short | ||
1000 | * timeouts. This will go away with the GTOD framework. | ||
1001 | */ | ||
1002 | #ifdef CONFIG_TIME_LOW_RES | ||
1003 | tim = ktime_add_safe(tim, base->resolution); | ||
1004 | #endif | ||
1005 | } | ||
1006 | |||
1007 | hrtimer_set_expires_range_ns(timer, tim, delta_ns); | ||
1008 | |||
1009 | /* Switch the timer base, if necessary: */ | ||
1010 | new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED); | ||
1011 | |||
1012 | timer_stats_hrtimer_set_start_info(timer); | ||
1013 | |||
1014 | leftmost = enqueue_hrtimer(timer, new_base); | ||
1015 | |||
1016 | /* | ||
1017 | * Only allow reprogramming if the new base is on this CPU. | ||
1018 | * (it might still be on another CPU if the timer was pending) | ||
1019 | * | ||
1020 | * XXX send_remote_softirq() ? | ||
1021 | */ | ||
1022 | if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases) | ||
1023 | && hrtimer_enqueue_reprogram(timer, new_base)) { | ||
1024 | if (wakeup) { | ||
1025 | /* | ||
1026 | * We need to drop cpu_base->lock to avoid a | ||
1027 | * lock ordering issue vs. rq->lock. | ||
1028 | */ | ||
1029 | raw_spin_unlock(&new_base->cpu_base->lock); | ||
1030 | raise_softirq_irqoff(HRTIMER_SOFTIRQ); | ||
1031 | local_irq_restore(flags); | ||
1032 | return ret; | ||
1033 | } else { | ||
1034 | __raise_softirq_irqoff(HRTIMER_SOFTIRQ); | ||
1035 | } | ||
1036 | } | ||
1037 | |||
1038 | unlock_hrtimer_base(timer, &flags); | ||
1039 | |||
1040 | return ret; | ||
1041 | } | ||
1042 | EXPORT_SYMBOL_GPL(__hrtimer_start_range_ns); | ||
1043 | |||
1044 | /** | ||
1045 | * hrtimer_start_range_ns - (re)start an hrtimer on the current CPU | ||
1046 | * @timer: the timer to be added | ||
1047 | * @tim: expiry time | ||
1048 | * @delta_ns: "slack" range for the timer | ||
1049 | * @mode: expiry mode: absolute (HRTIMER_MODE_ABS) or | ||
1050 | * relative (HRTIMER_MODE_REL) | ||
1051 | * | ||
1052 | * Returns: | ||
1053 | * 0 on success | ||
1054 | * 1 when the timer was active | ||
1055 | */ | ||
1056 | int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, | ||
1057 | unsigned long delta_ns, const enum hrtimer_mode mode) | ||
1058 | { | ||
1059 | return __hrtimer_start_range_ns(timer, tim, delta_ns, mode, 1); | ||
1060 | } | ||
1061 | EXPORT_SYMBOL_GPL(hrtimer_start_range_ns); | ||
1062 | |||
1063 | /** | ||
1064 | * hrtimer_start - (re)start an hrtimer on the current CPU | ||
1065 | * @timer: the timer to be added | ||
1066 | * @tim: expiry time | ||
1067 | * @mode: expiry mode: absolute (HRTIMER_MODE_ABS) or | ||
1068 | * relative (HRTIMER_MODE_REL) | ||
1069 | * | ||
1070 | * Returns: | ||
1071 | * 0 on success | ||
1072 | * 1 when the timer was active | ||
1073 | */ | ||
1074 | int | ||
1075 | hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) | ||
1076 | { | ||
1077 | return __hrtimer_start_range_ns(timer, tim, 0, mode, 1); | ||
1078 | } | ||
1079 | EXPORT_SYMBOL_GPL(hrtimer_start); | ||
1080 | |||
1081 | |||
1082 | /** | ||
1083 | * hrtimer_try_to_cancel - try to deactivate a timer | ||
1084 | * @timer: hrtimer to stop | ||
1085 | * | ||
1086 | * Returns: | ||
1087 | * 0 when the timer was not active | ||
1088 | * 1 when the timer was active | ||
1089 | * -1 when the timer is currently excuting the callback function and | ||
1090 | * cannot be stopped | ||
1091 | */ | ||
1092 | int hrtimer_try_to_cancel(struct hrtimer *timer) | ||
1093 | { | ||
1094 | struct hrtimer_clock_base *base; | ||
1095 | unsigned long flags; | ||
1096 | int ret = -1; | ||
1097 | |||
1098 | base = lock_hrtimer_base(timer, &flags); | ||
1099 | |||
1100 | if (!hrtimer_callback_running(timer)) | ||
1101 | ret = remove_hrtimer(timer, base); | ||
1102 | |||
1103 | unlock_hrtimer_base(timer, &flags); | ||
1104 | |||
1105 | return ret; | ||
1106 | |||
1107 | } | ||
1108 | EXPORT_SYMBOL_GPL(hrtimer_try_to_cancel); | ||
1109 | |||
1110 | /** | ||
1111 | * hrtimer_cancel - cancel a timer and wait for the handler to finish. | ||
1112 | * @timer: the timer to be cancelled | ||
1113 | * | ||
1114 | * Returns: | ||
1115 | * 0 when the timer was not active | ||
1116 | * 1 when the timer was active | ||
1117 | */ | ||
1118 | int hrtimer_cancel(struct hrtimer *timer) | ||
1119 | { | ||
1120 | for (;;) { | ||
1121 | int ret = hrtimer_try_to_cancel(timer); | ||
1122 | |||
1123 | if (ret >= 0) | ||
1124 | return ret; | ||
1125 | cpu_relax(); | ||
1126 | } | ||
1127 | } | ||
1128 | EXPORT_SYMBOL_GPL(hrtimer_cancel); | ||
1129 | |||
1130 | /** | ||
1131 | * hrtimer_get_remaining - get remaining time for the timer | ||
1132 | * @timer: the timer to read | ||
1133 | */ | ||
1134 | ktime_t hrtimer_get_remaining(const struct hrtimer *timer) | ||
1135 | { | ||
1136 | unsigned long flags; | ||
1137 | ktime_t rem; | ||
1138 | |||
1139 | lock_hrtimer_base(timer, &flags); | ||
1140 | rem = hrtimer_expires_remaining(timer); | ||
1141 | unlock_hrtimer_base(timer, &flags); | ||
1142 | |||
1143 | return rem; | ||
1144 | } | ||
1145 | EXPORT_SYMBOL_GPL(hrtimer_get_remaining); | ||
1146 | |||
1147 | #ifdef CONFIG_NO_HZ_COMMON | ||
1148 | /** | ||
1149 | * hrtimer_get_next_event - get the time until next expiry event | ||
1150 | * | ||
1151 | * Returns the delta to the next expiry event or KTIME_MAX if no timer | ||
1152 | * is pending. | ||
1153 | */ | ||
1154 | ktime_t hrtimer_get_next_event(void) | ||
1155 | { | ||
1156 | struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); | ||
1157 | struct hrtimer_clock_base *base = cpu_base->clock_base; | ||
1158 | ktime_t delta, mindelta = { .tv64 = KTIME_MAX }; | ||
1159 | unsigned long flags; | ||
1160 | int i; | ||
1161 | |||
1162 | raw_spin_lock_irqsave(&cpu_base->lock, flags); | ||
1163 | |||
1164 | if (!hrtimer_hres_active()) { | ||
1165 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++, base++) { | ||
1166 | struct hrtimer *timer; | ||
1167 | struct timerqueue_node *next; | ||
1168 | |||
1169 | next = timerqueue_getnext(&base->active); | ||
1170 | if (!next) | ||
1171 | continue; | ||
1172 | |||
1173 | timer = container_of(next, struct hrtimer, node); | ||
1174 | delta.tv64 = hrtimer_get_expires_tv64(timer); | ||
1175 | delta = ktime_sub(delta, base->get_time()); | ||
1176 | if (delta.tv64 < mindelta.tv64) | ||
1177 | mindelta.tv64 = delta.tv64; | ||
1178 | } | ||
1179 | } | ||
1180 | |||
1181 | raw_spin_unlock_irqrestore(&cpu_base->lock, flags); | ||
1182 | |||
1183 | if (mindelta.tv64 < 0) | ||
1184 | mindelta.tv64 = 0; | ||
1185 | return mindelta; | ||
1186 | } | ||
1187 | #endif | ||
1188 | |||
1189 | static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id, | ||
1190 | enum hrtimer_mode mode) | ||
1191 | { | ||
1192 | struct hrtimer_cpu_base *cpu_base; | ||
1193 | int base; | ||
1194 | |||
1195 | memset(timer, 0, sizeof(struct hrtimer)); | ||
1196 | |||
1197 | cpu_base = &__raw_get_cpu_var(hrtimer_bases); | ||
1198 | |||
1199 | if (clock_id == CLOCK_REALTIME && mode != HRTIMER_MODE_ABS) | ||
1200 | clock_id = CLOCK_MONOTONIC; | ||
1201 | |||
1202 | base = hrtimer_clockid_to_base(clock_id); | ||
1203 | timer->base = &cpu_base->clock_base[base]; | ||
1204 | timerqueue_init(&timer->node); | ||
1205 | |||
1206 | #ifdef CONFIG_TIMER_STATS | ||
1207 | timer->start_site = NULL; | ||
1208 | timer->start_pid = -1; | ||
1209 | memset(timer->start_comm, 0, TASK_COMM_LEN); | ||
1210 | #endif | ||
1211 | } | ||
1212 | |||
1213 | /** | ||
1214 | * hrtimer_init - initialize a timer to the given clock | ||
1215 | * @timer: the timer to be initialized | ||
1216 | * @clock_id: the clock to be used | ||
1217 | * @mode: timer mode abs/rel | ||
1218 | */ | ||
1219 | void hrtimer_init(struct hrtimer *timer, clockid_t clock_id, | ||
1220 | enum hrtimer_mode mode) | ||
1221 | { | ||
1222 | debug_init(timer, clock_id, mode); | ||
1223 | __hrtimer_init(timer, clock_id, mode); | ||
1224 | } | ||
1225 | EXPORT_SYMBOL_GPL(hrtimer_init); | ||
1226 | |||
1227 | /** | ||
1228 | * hrtimer_get_res - get the timer resolution for a clock | ||
1229 | * @which_clock: which clock to query | ||
1230 | * @tp: pointer to timespec variable to store the resolution | ||
1231 | * | ||
1232 | * Store the resolution of the clock selected by @which_clock in the | ||
1233 | * variable pointed to by @tp. | ||
1234 | */ | ||
1235 | int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp) | ||
1236 | { | ||
1237 | struct hrtimer_cpu_base *cpu_base; | ||
1238 | int base = hrtimer_clockid_to_base(which_clock); | ||
1239 | |||
1240 | cpu_base = &__raw_get_cpu_var(hrtimer_bases); | ||
1241 | *tp = ktime_to_timespec(cpu_base->clock_base[base].resolution); | ||
1242 | |||
1243 | return 0; | ||
1244 | } | ||
1245 | EXPORT_SYMBOL_GPL(hrtimer_get_res); | ||
1246 | |||
1247 | static void __run_hrtimer(struct hrtimer *timer, ktime_t *now) | ||
1248 | { | ||
1249 | struct hrtimer_clock_base *base = timer->base; | ||
1250 | struct hrtimer_cpu_base *cpu_base = base->cpu_base; | ||
1251 | enum hrtimer_restart (*fn)(struct hrtimer *); | ||
1252 | int restart; | ||
1253 | |||
1254 | WARN_ON(!irqs_disabled()); | ||
1255 | |||
1256 | debug_deactivate(timer); | ||
1257 | __remove_hrtimer(timer, base, HRTIMER_STATE_CALLBACK, 0); | ||
1258 | timer_stats_account_hrtimer(timer); | ||
1259 | fn = timer->function; | ||
1260 | |||
1261 | /* | ||
1262 | * Because we run timers from hardirq context, there is no chance | ||
1263 | * they get migrated to another cpu, therefore its safe to unlock | ||
1264 | * the timer base. | ||
1265 | */ | ||
1266 | raw_spin_unlock(&cpu_base->lock); | ||
1267 | trace_hrtimer_expire_entry(timer, now); | ||
1268 | restart = fn(timer); | ||
1269 | trace_hrtimer_expire_exit(timer); | ||
1270 | raw_spin_lock(&cpu_base->lock); | ||
1271 | |||
1272 | /* | ||
1273 | * Note: We clear the CALLBACK bit after enqueue_hrtimer and | ||
1274 | * we do not reprogramm the event hardware. Happens either in | ||
1275 | * hrtimer_start_range_ns() or in hrtimer_interrupt() | ||
1276 | */ | ||
1277 | if (restart != HRTIMER_NORESTART) { | ||
1278 | BUG_ON(timer->state != HRTIMER_STATE_CALLBACK); | ||
1279 | enqueue_hrtimer(timer, base); | ||
1280 | } | ||
1281 | |||
1282 | WARN_ON_ONCE(!(timer->state & HRTIMER_STATE_CALLBACK)); | ||
1283 | |||
1284 | timer->state &= ~HRTIMER_STATE_CALLBACK; | ||
1285 | } | ||
1286 | |||
1287 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
1288 | |||
1289 | /* | ||
1290 | * High resolution timer interrupt | ||
1291 | * Called with interrupts disabled | ||
1292 | */ | ||
1293 | void hrtimer_interrupt(struct clock_event_device *dev) | ||
1294 | { | ||
1295 | struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); | ||
1296 | ktime_t expires_next, now, entry_time, delta; | ||
1297 | int i, retries = 0; | ||
1298 | |||
1299 | BUG_ON(!cpu_base->hres_active); | ||
1300 | cpu_base->nr_events++; | ||
1301 | dev->next_event.tv64 = KTIME_MAX; | ||
1302 | |||
1303 | raw_spin_lock(&cpu_base->lock); | ||
1304 | entry_time = now = hrtimer_update_base(cpu_base); | ||
1305 | retry: | ||
1306 | expires_next.tv64 = KTIME_MAX; | ||
1307 | /* | ||
1308 | * We set expires_next to KTIME_MAX here with cpu_base->lock | ||
1309 | * held to prevent that a timer is enqueued in our queue via | ||
1310 | * the migration code. This does not affect enqueueing of | ||
1311 | * timers which run their callback and need to be requeued on | ||
1312 | * this CPU. | ||
1313 | */ | ||
1314 | cpu_base->expires_next.tv64 = KTIME_MAX; | ||
1315 | |||
1316 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { | ||
1317 | struct hrtimer_clock_base *base; | ||
1318 | struct timerqueue_node *node; | ||
1319 | ktime_t basenow; | ||
1320 | |||
1321 | if (!(cpu_base->active_bases & (1 << i))) | ||
1322 | continue; | ||
1323 | |||
1324 | base = cpu_base->clock_base + i; | ||
1325 | basenow = ktime_add(now, base->offset); | ||
1326 | |||
1327 | while ((node = timerqueue_getnext(&base->active))) { | ||
1328 | struct hrtimer *timer; | ||
1329 | |||
1330 | timer = container_of(node, struct hrtimer, node); | ||
1331 | |||
1332 | /* | ||
1333 | * The immediate goal for using the softexpires is | ||
1334 | * minimizing wakeups, not running timers at the | ||
1335 | * earliest interrupt after their soft expiration. | ||
1336 | * This allows us to avoid using a Priority Search | ||
1337 | * Tree, which can answer a stabbing querry for | ||
1338 | * overlapping intervals and instead use the simple | ||
1339 | * BST we already have. | ||
1340 | * We don't add extra wakeups by delaying timers that | ||
1341 | * are right-of a not yet expired timer, because that | ||
1342 | * timer will have to trigger a wakeup anyway. | ||
1343 | */ | ||
1344 | |||
1345 | if (basenow.tv64 < hrtimer_get_softexpires_tv64(timer)) { | ||
1346 | ktime_t expires; | ||
1347 | |||
1348 | expires = ktime_sub(hrtimer_get_expires(timer), | ||
1349 | base->offset); | ||
1350 | if (expires.tv64 < 0) | ||
1351 | expires.tv64 = KTIME_MAX; | ||
1352 | if (expires.tv64 < expires_next.tv64) | ||
1353 | expires_next = expires; | ||
1354 | break; | ||
1355 | } | ||
1356 | |||
1357 | __run_hrtimer(timer, &basenow); | ||
1358 | } | ||
1359 | } | ||
1360 | |||
1361 | /* | ||
1362 | * Store the new expiry value so the migration code can verify | ||
1363 | * against it. | ||
1364 | */ | ||
1365 | cpu_base->expires_next = expires_next; | ||
1366 | raw_spin_unlock(&cpu_base->lock); | ||
1367 | |||
1368 | /* Reprogramming necessary ? */ | ||
1369 | if (expires_next.tv64 == KTIME_MAX || | ||
1370 | !tick_program_event(expires_next, 0)) { | ||
1371 | cpu_base->hang_detected = 0; | ||
1372 | return; | ||
1373 | } | ||
1374 | |||
1375 | /* | ||
1376 | * The next timer was already expired due to: | ||
1377 | * - tracing | ||
1378 | * - long lasting callbacks | ||
1379 | * - being scheduled away when running in a VM | ||
1380 | * | ||
1381 | * We need to prevent that we loop forever in the hrtimer | ||
1382 | * interrupt routine. We give it 3 attempts to avoid | ||
1383 | * overreacting on some spurious event. | ||
1384 | * | ||
1385 | * Acquire base lock for updating the offsets and retrieving | ||
1386 | * the current time. | ||
1387 | */ | ||
1388 | raw_spin_lock(&cpu_base->lock); | ||
1389 | now = hrtimer_update_base(cpu_base); | ||
1390 | cpu_base->nr_retries++; | ||
1391 | if (++retries < 3) | ||
1392 | goto retry; | ||
1393 | /* | ||
1394 | * Give the system a chance to do something else than looping | ||
1395 | * here. We stored the entry time, so we know exactly how long | ||
1396 | * we spent here. We schedule the next event this amount of | ||
1397 | * time away. | ||
1398 | */ | ||
1399 | cpu_base->nr_hangs++; | ||
1400 | cpu_base->hang_detected = 1; | ||
1401 | raw_spin_unlock(&cpu_base->lock); | ||
1402 | delta = ktime_sub(now, entry_time); | ||
1403 | if (delta.tv64 > cpu_base->max_hang_time.tv64) | ||
1404 | cpu_base->max_hang_time = delta; | ||
1405 | /* | ||
1406 | * Limit it to a sensible value as we enforce a longer | ||
1407 | * delay. Give the CPU at least 100ms to catch up. | ||
1408 | */ | ||
1409 | if (delta.tv64 > 100 * NSEC_PER_MSEC) | ||
1410 | expires_next = ktime_add_ns(now, 100 * NSEC_PER_MSEC); | ||
1411 | else | ||
1412 | expires_next = ktime_add(now, delta); | ||
1413 | tick_program_event(expires_next, 1); | ||
1414 | printk_once(KERN_WARNING "hrtimer: interrupt took %llu ns\n", | ||
1415 | ktime_to_ns(delta)); | ||
1416 | } | ||
1417 | |||
1418 | /* | ||
1419 | * local version of hrtimer_peek_ahead_timers() called with interrupts | ||
1420 | * disabled. | ||
1421 | */ | ||
1422 | static void __hrtimer_peek_ahead_timers(void) | ||
1423 | { | ||
1424 | struct tick_device *td; | ||
1425 | |||
1426 | if (!hrtimer_hres_active()) | ||
1427 | return; | ||
1428 | |||
1429 | td = &__get_cpu_var(tick_cpu_device); | ||
1430 | if (td && td->evtdev) | ||
1431 | hrtimer_interrupt(td->evtdev); | ||
1432 | } | ||
1433 | |||
1434 | /** | ||
1435 | * hrtimer_peek_ahead_timers -- run soft-expired timers now | ||
1436 | * | ||
1437 | * hrtimer_peek_ahead_timers will peek at the timer queue of | ||
1438 | * the current cpu and check if there are any timers for which | ||
1439 | * the soft expires time has passed. If any such timers exist, | ||
1440 | * they are run immediately and then removed from the timer queue. | ||
1441 | * | ||
1442 | */ | ||
1443 | void hrtimer_peek_ahead_timers(void) | ||
1444 | { | ||
1445 | unsigned long flags; | ||
1446 | |||
1447 | local_irq_save(flags); | ||
1448 | __hrtimer_peek_ahead_timers(); | ||
1449 | local_irq_restore(flags); | ||
1450 | } | ||
1451 | |||
1452 | static void run_hrtimer_softirq(struct softirq_action *h) | ||
1453 | { | ||
1454 | hrtimer_peek_ahead_timers(); | ||
1455 | } | ||
1456 | |||
1457 | #else /* CONFIG_HIGH_RES_TIMERS */ | ||
1458 | |||
1459 | static inline void __hrtimer_peek_ahead_timers(void) { } | ||
1460 | |||
1461 | #endif /* !CONFIG_HIGH_RES_TIMERS */ | ||
1462 | |||
1463 | /* | ||
1464 | * Called from timer softirq every jiffy, expire hrtimers: | ||
1465 | * | ||
1466 | * For HRT its the fall back code to run the softirq in the timer | ||
1467 | * softirq context in case the hrtimer initialization failed or has | ||
1468 | * not been done yet. | ||
1469 | */ | ||
1470 | void hrtimer_run_pending(void) | ||
1471 | { | ||
1472 | if (hrtimer_hres_active()) | ||
1473 | return; | ||
1474 | |||
1475 | /* | ||
1476 | * This _is_ ugly: We have to check in the softirq context, | ||
1477 | * whether we can switch to highres and / or nohz mode. The | ||
1478 | * clocksource switch happens in the timer interrupt with | ||
1479 | * xtime_lock held. Notification from there only sets the | ||
1480 | * check bit in the tick_oneshot code, otherwise we might | ||
1481 | * deadlock vs. xtime_lock. | ||
1482 | */ | ||
1483 | if (tick_check_oneshot_change(!hrtimer_is_hres_enabled())) | ||
1484 | hrtimer_switch_to_hres(); | ||
1485 | } | ||
1486 | |||
1487 | /* | ||
1488 | * Called from hardirq context every jiffy | ||
1489 | */ | ||
1490 | void hrtimer_run_queues(void) | ||
1491 | { | ||
1492 | struct timerqueue_node *node; | ||
1493 | struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); | ||
1494 | struct hrtimer_clock_base *base; | ||
1495 | int index, gettime = 1; | ||
1496 | |||
1497 | if (hrtimer_hres_active()) | ||
1498 | return; | ||
1499 | |||
1500 | for (index = 0; index < HRTIMER_MAX_CLOCK_BASES; index++) { | ||
1501 | base = &cpu_base->clock_base[index]; | ||
1502 | if (!timerqueue_getnext(&base->active)) | ||
1503 | continue; | ||
1504 | |||
1505 | if (gettime) { | ||
1506 | hrtimer_get_softirq_time(cpu_base); | ||
1507 | gettime = 0; | ||
1508 | } | ||
1509 | |||
1510 | raw_spin_lock(&cpu_base->lock); | ||
1511 | |||
1512 | while ((node = timerqueue_getnext(&base->active))) { | ||
1513 | struct hrtimer *timer; | ||
1514 | |||
1515 | timer = container_of(node, struct hrtimer, node); | ||
1516 | if (base->softirq_time.tv64 <= | ||
1517 | hrtimer_get_expires_tv64(timer)) | ||
1518 | break; | ||
1519 | |||
1520 | __run_hrtimer(timer, &base->softirq_time); | ||
1521 | } | ||
1522 | raw_spin_unlock(&cpu_base->lock); | ||
1523 | } | ||
1524 | } | ||
1525 | |||
1526 | /* | ||
1527 | * Sleep related functions: | ||
1528 | */ | ||
1529 | static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer) | ||
1530 | { | ||
1531 | struct hrtimer_sleeper *t = | ||
1532 | container_of(timer, struct hrtimer_sleeper, timer); | ||
1533 | struct task_struct *task = t->task; | ||
1534 | |||
1535 | t->task = NULL; | ||
1536 | if (task) | ||
1537 | wake_up_process(task); | ||
1538 | |||
1539 | return HRTIMER_NORESTART; | ||
1540 | } | ||
1541 | |||
1542 | void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task) | ||
1543 | { | ||
1544 | sl->timer.function = hrtimer_wakeup; | ||
1545 | sl->task = task; | ||
1546 | } | ||
1547 | EXPORT_SYMBOL_GPL(hrtimer_init_sleeper); | ||
1548 | |||
1549 | static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode) | ||
1550 | { | ||
1551 | hrtimer_init_sleeper(t, current); | ||
1552 | |||
1553 | do { | ||
1554 | set_current_state(TASK_INTERRUPTIBLE); | ||
1555 | hrtimer_start_expires(&t->timer, mode); | ||
1556 | if (!hrtimer_active(&t->timer)) | ||
1557 | t->task = NULL; | ||
1558 | |||
1559 | if (likely(t->task)) | ||
1560 | freezable_schedule(); | ||
1561 | |||
1562 | hrtimer_cancel(&t->timer); | ||
1563 | mode = HRTIMER_MODE_ABS; | ||
1564 | |||
1565 | } while (t->task && !signal_pending(current)); | ||
1566 | |||
1567 | __set_current_state(TASK_RUNNING); | ||
1568 | |||
1569 | return t->task == NULL; | ||
1570 | } | ||
1571 | |||
1572 | static int update_rmtp(struct hrtimer *timer, struct timespec __user *rmtp) | ||
1573 | { | ||
1574 | struct timespec rmt; | ||
1575 | ktime_t rem; | ||
1576 | |||
1577 | rem = hrtimer_expires_remaining(timer); | ||
1578 | if (rem.tv64 <= 0) | ||
1579 | return 0; | ||
1580 | rmt = ktime_to_timespec(rem); | ||
1581 | |||
1582 | if (copy_to_user(rmtp, &rmt, sizeof(*rmtp))) | ||
1583 | return -EFAULT; | ||
1584 | |||
1585 | return 1; | ||
1586 | } | ||
1587 | |||
1588 | long __sched hrtimer_nanosleep_restart(struct restart_block *restart) | ||
1589 | { | ||
1590 | struct hrtimer_sleeper t; | ||
1591 | struct timespec __user *rmtp; | ||
1592 | int ret = 0; | ||
1593 | |||
1594 | hrtimer_init_on_stack(&t.timer, restart->nanosleep.clockid, | ||
1595 | HRTIMER_MODE_ABS); | ||
1596 | hrtimer_set_expires_tv64(&t.timer, restart->nanosleep.expires); | ||
1597 | |||
1598 | if (do_nanosleep(&t, HRTIMER_MODE_ABS)) | ||
1599 | goto out; | ||
1600 | |||
1601 | rmtp = restart->nanosleep.rmtp; | ||
1602 | if (rmtp) { | ||
1603 | ret = update_rmtp(&t.timer, rmtp); | ||
1604 | if (ret <= 0) | ||
1605 | goto out; | ||
1606 | } | ||
1607 | |||
1608 | /* The other values in restart are already filled in */ | ||
1609 | ret = -ERESTART_RESTARTBLOCK; | ||
1610 | out: | ||
1611 | destroy_hrtimer_on_stack(&t.timer); | ||
1612 | return ret; | ||
1613 | } | ||
1614 | |||
1615 | long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, | ||
1616 | const enum hrtimer_mode mode, const clockid_t clockid) | ||
1617 | { | ||
1618 | struct restart_block *restart; | ||
1619 | struct hrtimer_sleeper t; | ||
1620 | int ret = 0; | ||
1621 | unsigned long slack; | ||
1622 | |||
1623 | slack = current->timer_slack_ns; | ||
1624 | if (dl_task(current) || rt_task(current)) | ||
1625 | slack = 0; | ||
1626 | |||
1627 | hrtimer_init_on_stack(&t.timer, clockid, mode); | ||
1628 | hrtimer_set_expires_range_ns(&t.timer, timespec_to_ktime(*rqtp), slack); | ||
1629 | if (do_nanosleep(&t, mode)) | ||
1630 | goto out; | ||
1631 | |||
1632 | /* Absolute timers do not update the rmtp value and restart: */ | ||
1633 | if (mode == HRTIMER_MODE_ABS) { | ||
1634 | ret = -ERESTARTNOHAND; | ||
1635 | goto out; | ||
1636 | } | ||
1637 | |||
1638 | if (rmtp) { | ||
1639 | ret = update_rmtp(&t.timer, rmtp); | ||
1640 | if (ret <= 0) | ||
1641 | goto out; | ||
1642 | } | ||
1643 | |||
1644 | restart = ¤t_thread_info()->restart_block; | ||
1645 | restart->fn = hrtimer_nanosleep_restart; | ||
1646 | restart->nanosleep.clockid = t.timer.base->clockid; | ||
1647 | restart->nanosleep.rmtp = rmtp; | ||
1648 | restart->nanosleep.expires = hrtimer_get_expires_tv64(&t.timer); | ||
1649 | |||
1650 | ret = -ERESTART_RESTARTBLOCK; | ||
1651 | out: | ||
1652 | destroy_hrtimer_on_stack(&t.timer); | ||
1653 | return ret; | ||
1654 | } | ||
1655 | |||
1656 | SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp, | ||
1657 | struct timespec __user *, rmtp) | ||
1658 | { | ||
1659 | struct timespec tu; | ||
1660 | |||
1661 | if (copy_from_user(&tu, rqtp, sizeof(tu))) | ||
1662 | return -EFAULT; | ||
1663 | |||
1664 | if (!timespec_valid(&tu)) | ||
1665 | return -EINVAL; | ||
1666 | |||
1667 | return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_REL, CLOCK_MONOTONIC); | ||
1668 | } | ||
1669 | |||
1670 | /* | ||
1671 | * Functions related to boot-time initialization: | ||
1672 | */ | ||
1673 | static void init_hrtimers_cpu(int cpu) | ||
1674 | { | ||
1675 | struct hrtimer_cpu_base *cpu_base = &per_cpu(hrtimer_bases, cpu); | ||
1676 | int i; | ||
1677 | |||
1678 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { | ||
1679 | cpu_base->clock_base[i].cpu_base = cpu_base; | ||
1680 | timerqueue_init_head(&cpu_base->clock_base[i].active); | ||
1681 | } | ||
1682 | |||
1683 | hrtimer_init_hres(cpu_base); | ||
1684 | } | ||
1685 | |||
1686 | #ifdef CONFIG_HOTPLUG_CPU | ||
1687 | |||
1688 | static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base, | ||
1689 | struct hrtimer_clock_base *new_base) | ||
1690 | { | ||
1691 | struct hrtimer *timer; | ||
1692 | struct timerqueue_node *node; | ||
1693 | |||
1694 | while ((node = timerqueue_getnext(&old_base->active))) { | ||
1695 | timer = container_of(node, struct hrtimer, node); | ||
1696 | BUG_ON(hrtimer_callback_running(timer)); | ||
1697 | debug_deactivate(timer); | ||
1698 | |||
1699 | /* | ||
1700 | * Mark it as STATE_MIGRATE not INACTIVE otherwise the | ||
1701 | * timer could be seen as !active and just vanish away | ||
1702 | * under us on another CPU | ||
1703 | */ | ||
1704 | __remove_hrtimer(timer, old_base, HRTIMER_STATE_MIGRATE, 0); | ||
1705 | timer->base = new_base; | ||
1706 | /* | ||
1707 | * Enqueue the timers on the new cpu. This does not | ||
1708 | * reprogram the event device in case the timer | ||
1709 | * expires before the earliest on this CPU, but we run | ||
1710 | * hrtimer_interrupt after we migrated everything to | ||
1711 | * sort out already expired timers and reprogram the | ||
1712 | * event device. | ||
1713 | */ | ||
1714 | enqueue_hrtimer(timer, new_base); | ||
1715 | |||
1716 | /* Clear the migration state bit */ | ||
1717 | timer->state &= ~HRTIMER_STATE_MIGRATE; | ||
1718 | } | ||
1719 | } | ||
1720 | |||
1721 | static void migrate_hrtimers(int scpu) | ||
1722 | { | ||
1723 | struct hrtimer_cpu_base *old_base, *new_base; | ||
1724 | int i; | ||
1725 | |||
1726 | BUG_ON(cpu_online(scpu)); | ||
1727 | tick_cancel_sched_timer(scpu); | ||
1728 | |||
1729 | local_irq_disable(); | ||
1730 | old_base = &per_cpu(hrtimer_bases, scpu); | ||
1731 | new_base = &__get_cpu_var(hrtimer_bases); | ||
1732 | /* | ||
1733 | * The caller is globally serialized and nobody else | ||
1734 | * takes two locks at once, deadlock is not possible. | ||
1735 | */ | ||
1736 | raw_spin_lock(&new_base->lock); | ||
1737 | raw_spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING); | ||
1738 | |||
1739 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { | ||
1740 | migrate_hrtimer_list(&old_base->clock_base[i], | ||
1741 | &new_base->clock_base[i]); | ||
1742 | } | ||
1743 | |||
1744 | raw_spin_unlock(&old_base->lock); | ||
1745 | raw_spin_unlock(&new_base->lock); | ||
1746 | |||
1747 | /* Check, if we got expired work to do */ | ||
1748 | __hrtimer_peek_ahead_timers(); | ||
1749 | local_irq_enable(); | ||
1750 | } | ||
1751 | |||
1752 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
1753 | |||
1754 | static int hrtimer_cpu_notify(struct notifier_block *self, | ||
1755 | unsigned long action, void *hcpu) | ||
1756 | { | ||
1757 | int scpu = (long)hcpu; | ||
1758 | |||
1759 | switch (action) { | ||
1760 | |||
1761 | case CPU_UP_PREPARE: | ||
1762 | case CPU_UP_PREPARE_FROZEN: | ||
1763 | init_hrtimers_cpu(scpu); | ||
1764 | break; | ||
1765 | |||
1766 | #ifdef CONFIG_HOTPLUG_CPU | ||
1767 | case CPU_DYING: | ||
1768 | case CPU_DYING_FROZEN: | ||
1769 | clockevents_notify(CLOCK_EVT_NOTIFY_CPU_DYING, &scpu); | ||
1770 | break; | ||
1771 | case CPU_DEAD: | ||
1772 | case CPU_DEAD_FROZEN: | ||
1773 | { | ||
1774 | clockevents_notify(CLOCK_EVT_NOTIFY_CPU_DEAD, &scpu); | ||
1775 | migrate_hrtimers(scpu); | ||
1776 | break; | ||
1777 | } | ||
1778 | #endif | ||
1779 | |||
1780 | default: | ||
1781 | break; | ||
1782 | } | ||
1783 | |||
1784 | return NOTIFY_OK; | ||
1785 | } | ||
1786 | |||
1787 | static struct notifier_block hrtimers_nb = { | ||
1788 | .notifier_call = hrtimer_cpu_notify, | ||
1789 | }; | ||
1790 | |||
1791 | void __init hrtimers_init(void) | ||
1792 | { | ||
1793 | hrtimer_cpu_notify(&hrtimers_nb, (unsigned long)CPU_UP_PREPARE, | ||
1794 | (void *)(long)smp_processor_id()); | ||
1795 | register_cpu_notifier(&hrtimers_nb); | ||
1796 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
1797 | open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq); | ||
1798 | #endif | ||
1799 | } | ||
1800 | |||
1801 | /** | ||
1802 | * schedule_hrtimeout_range_clock - sleep until timeout | ||
1803 | * @expires: timeout value (ktime_t) | ||
1804 | * @delta: slack in expires timeout (ktime_t) | ||
1805 | * @mode: timer mode, HRTIMER_MODE_ABS or HRTIMER_MODE_REL | ||
1806 | * @clock: timer clock, CLOCK_MONOTONIC or CLOCK_REALTIME | ||
1807 | */ | ||
1808 | int __sched | ||
1809 | schedule_hrtimeout_range_clock(ktime_t *expires, unsigned long delta, | ||
1810 | const enum hrtimer_mode mode, int clock) | ||
1811 | { | ||
1812 | struct hrtimer_sleeper t; | ||
1813 | |||
1814 | /* | ||
1815 | * Optimize when a zero timeout value is given. It does not | ||
1816 | * matter whether this is an absolute or a relative time. | ||
1817 | */ | ||
1818 | if (expires && !expires->tv64) { | ||
1819 | __set_current_state(TASK_RUNNING); | ||
1820 | return 0; | ||
1821 | } | ||
1822 | |||
1823 | /* | ||
1824 | * A NULL parameter means "infinite" | ||
1825 | */ | ||
1826 | if (!expires) { | ||
1827 | schedule(); | ||
1828 | __set_current_state(TASK_RUNNING); | ||
1829 | return -EINTR; | ||
1830 | } | ||
1831 | |||
1832 | hrtimer_init_on_stack(&t.timer, clock, mode); | ||
1833 | hrtimer_set_expires_range_ns(&t.timer, *expires, delta); | ||
1834 | |||
1835 | hrtimer_init_sleeper(&t, current); | ||
1836 | |||
1837 | hrtimer_start_expires(&t.timer, mode); | ||
1838 | if (!hrtimer_active(&t.timer)) | ||
1839 | t.task = NULL; | ||
1840 | |||
1841 | if (likely(t.task)) | ||
1842 | schedule(); | ||
1843 | |||
1844 | hrtimer_cancel(&t.timer); | ||
1845 | destroy_hrtimer_on_stack(&t.timer); | ||
1846 | |||
1847 | __set_current_state(TASK_RUNNING); | ||
1848 | |||
1849 | return !t.task ? 0 : -EINTR; | ||
1850 | } | ||
1851 | |||
1852 | /** | ||
1853 | * schedule_hrtimeout_range - sleep until timeout | ||
1854 | * @expires: timeout value (ktime_t) | ||
1855 | * @delta: slack in expires timeout (ktime_t) | ||
1856 | * @mode: timer mode, HRTIMER_MODE_ABS or HRTIMER_MODE_REL | ||
1857 | * | ||
1858 | * Make the current task sleep until the given expiry time has | ||
1859 | * elapsed. The routine will return immediately unless | ||
1860 | * the current task state has been set (see set_current_state()). | ||
1861 | * | ||
1862 | * The @delta argument gives the kernel the freedom to schedule the | ||
1863 | * actual wakeup to a time that is both power and performance friendly. | ||
1864 | * The kernel give the normal best effort behavior for "@expires+@delta", | ||
1865 | * but may decide to fire the timer earlier, but no earlier than @expires. | ||
1866 | * | ||
1867 | * You can set the task state as follows - | ||
1868 | * | ||
1869 | * %TASK_UNINTERRUPTIBLE - at least @timeout time is guaranteed to | ||
1870 | * pass before the routine returns. | ||
1871 | * | ||
1872 | * %TASK_INTERRUPTIBLE - the routine may return early if a signal is | ||
1873 | * delivered to the current task. | ||
1874 | * | ||
1875 | * The current task state is guaranteed to be TASK_RUNNING when this | ||
1876 | * routine returns. | ||
1877 | * | ||
1878 | * Returns 0 when the timer has expired otherwise -EINTR | ||
1879 | */ | ||
1880 | int __sched schedule_hrtimeout_range(ktime_t *expires, unsigned long delta, | ||
1881 | const enum hrtimer_mode mode) | ||
1882 | { | ||
1883 | return schedule_hrtimeout_range_clock(expires, delta, mode, | ||
1884 | CLOCK_MONOTONIC); | ||
1885 | } | ||
1886 | EXPORT_SYMBOL_GPL(schedule_hrtimeout_range); | ||
1887 | |||
1888 | /** | ||
1889 | * schedule_hrtimeout - sleep until timeout | ||
1890 | * @expires: timeout value (ktime_t) | ||
1891 | * @mode: timer mode, HRTIMER_MODE_ABS or HRTIMER_MODE_REL | ||
1892 | * | ||
1893 | * Make the current task sleep until the given expiry time has | ||
1894 | * elapsed. The routine will return immediately unless | ||
1895 | * the current task state has been set (see set_current_state()). | ||
1896 | * | ||
1897 | * You can set the task state as follows - | ||
1898 | * | ||
1899 | * %TASK_UNINTERRUPTIBLE - at least @timeout time is guaranteed to | ||
1900 | * pass before the routine returns. | ||
1901 | * | ||
1902 | * %TASK_INTERRUPTIBLE - the routine may return early if a signal is | ||
1903 | * delivered to the current task. | ||
1904 | * | ||
1905 | * The current task state is guaranteed to be TASK_RUNNING when this | ||
1906 | * routine returns. | ||
1907 | * | ||
1908 | * Returns 0 when the timer has expired otherwise -EINTR | ||
1909 | */ | ||
1910 | int __sched schedule_hrtimeout(ktime_t *expires, | ||
1911 | const enum hrtimer_mode mode) | ||
1912 | { | ||
1913 | return schedule_hrtimeout_range(expires, 0, mode); | ||
1914 | } | ||
1915 | EXPORT_SYMBOL_GPL(schedule_hrtimeout); | ||