1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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/signal.h>
47#include <linux/sched/sysctl.h>
48#include <linux/sched/rt.h>
49#include <linux/sched/deadline.h>
50#include <linux/sched/nohz.h>
51#include <linux/sched/debug.h>
52#include <linux/timer.h>
53#include <linux/freezer.h>
54#include <linux/compat.h>
55
56#include <linux/uaccess.h>
57
58#include <trace/events/timer.h>
59
60#include "tick-internal.h"
61
62
63
64
65
66
67
68
69
70DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) =
71{
72 .lock = __RAW_SPIN_LOCK_UNLOCKED(hrtimer_bases.lock),
73 .seq = SEQCNT_ZERO(hrtimer_bases.seq),
74 .clock_base =
75 {
76 {
77 .index = HRTIMER_BASE_MONOTONIC,
78 .clockid = CLOCK_MONOTONIC,
79 .get_time = &ktime_get,
80 },
81 {
82 .index = HRTIMER_BASE_REALTIME,
83 .clockid = CLOCK_REALTIME,
84 .get_time = &ktime_get_real,
85 },
86 {
87 .index = HRTIMER_BASE_BOOTTIME,
88 .clockid = CLOCK_BOOTTIME,
89 .get_time = &ktime_get_boottime,
90 },
91 {
92 .index = HRTIMER_BASE_TAI,
93 .clockid = CLOCK_TAI,
94 .get_time = &ktime_get_clocktai,
95 },
96 }
97};
98
99static const int hrtimer_clock_to_base_table[MAX_CLOCKS] = {
100
101 [0 ... MAX_CLOCKS - 1] = HRTIMER_MAX_CLOCK_BASES,
102
103 [CLOCK_REALTIME] = HRTIMER_BASE_REALTIME,
104 [CLOCK_MONOTONIC] = HRTIMER_BASE_MONOTONIC,
105 [CLOCK_BOOTTIME] = HRTIMER_BASE_BOOTTIME,
106 [CLOCK_TAI] = HRTIMER_BASE_TAI,
107};
108
109
110
111
112
113#ifdef CONFIG_SMP
114
115
116
117
118
119
120static struct hrtimer_cpu_base migration_cpu_base = {
121 .seq = SEQCNT_ZERO(migration_cpu_base),
122 .clock_base = { { .cpu_base = &migration_cpu_base, }, },
123};
124
125#define migration_base migration_cpu_base.clock_base[0]
126
127
128
129
130
131
132
133
134
135
136
137
138
139static
140struct hrtimer_clock_base *lock_hrtimer_base(const struct hrtimer *timer,
141 unsigned long *flags)
142{
143 struct hrtimer_clock_base *base;
144
145 for (;;) {
146 base = timer->base;
147 if (likely(base != &migration_base)) {
148 raw_spin_lock_irqsave(&base->cpu_base->lock, *flags);
149 if (likely(base == timer->base))
150 return base;
151
152 raw_spin_unlock_irqrestore(&base->cpu_base->lock, *flags);
153 }
154 cpu_relax();
155 }
156}
157
158
159
160
161
162
163
164
165static int
166hrtimer_check_target(struct hrtimer *timer, struct hrtimer_clock_base *new_base)
167{
168#ifdef CONFIG_HIGH_RES_TIMERS
169 ktime_t expires;
170
171 if (!new_base->cpu_base->hres_active)
172 return 0;
173
174 expires = ktime_sub(hrtimer_get_expires(timer), new_base->offset);
175 return expires <= new_base->cpu_base->expires_next;
176#else
177 return 0;
178#endif
179}
180
181#ifdef CONFIG_NO_HZ_COMMON
182static inline
183struct hrtimer_cpu_base *get_target_base(struct hrtimer_cpu_base *base,
184 int pinned)
185{
186 if (pinned || !base->migration_enabled)
187 return base;
188 return &per_cpu(hrtimer_bases, get_nohz_timer_target());
189}
190#else
191static inline
192struct hrtimer_cpu_base *get_target_base(struct hrtimer_cpu_base *base,
193 int pinned)
194{
195 return base;
196}
197#endif
198
199
200
201
202
203
204
205
206
207
208
209
210
211static inline struct hrtimer_clock_base *
212switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_clock_base *base,
213 int pinned)
214{
215 struct hrtimer_cpu_base *new_cpu_base, *this_cpu_base;
216 struct hrtimer_clock_base *new_base;
217 int basenum = base->index;
218
219 this_cpu_base = this_cpu_ptr(&hrtimer_bases);
220 new_cpu_base = get_target_base(this_cpu_base, pinned);
221again:
222 new_base = &new_cpu_base->clock_base[basenum];
223
224 if (base != new_base) {
225
226
227
228
229
230
231
232
233
234 if (unlikely(hrtimer_callback_running(timer)))
235 return base;
236
237
238 timer->base = &migration_base;
239 raw_spin_unlock(&base->cpu_base->lock);
240 raw_spin_lock(&new_base->cpu_base->lock);
241
242 if (new_cpu_base != this_cpu_base &&
243 hrtimer_check_target(timer, new_base)) {
244 raw_spin_unlock(&new_base->cpu_base->lock);
245 raw_spin_lock(&base->cpu_base->lock);
246 new_cpu_base = this_cpu_base;
247 timer->base = base;
248 goto again;
249 }
250 timer->base = new_base;
251 } else {
252 if (new_cpu_base != this_cpu_base &&
253 hrtimer_check_target(timer, new_base)) {
254 new_cpu_base = this_cpu_base;
255 goto again;
256 }
257 }
258 return new_base;
259}
260
261#else
262
263static inline struct hrtimer_clock_base *
264lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
265{
266 struct hrtimer_clock_base *base = timer->base;
267
268 raw_spin_lock_irqsave(&base->cpu_base->lock, *flags);
269
270 return base;
271}
272
273# define switch_hrtimer_base(t, b, p) (b)
274
275#endif
276
277
278
279
280
281#if BITS_PER_LONG < 64
282
283
284
285s64 __ktime_divns(const ktime_t kt, s64 div)
286{
287 int sft = 0;
288 s64 dclc;
289 u64 tmp;
290
291 dclc = ktime_to_ns(kt);
292 tmp = dclc < 0 ? -dclc : dclc;
293
294
295 while (div >> 32) {
296 sft++;
297 div >>= 1;
298 }
299 tmp >>= sft;
300 do_div(tmp, (unsigned long) div);
301 return dclc < 0 ? -tmp : tmp;
302}
303EXPORT_SYMBOL_GPL(__ktime_divns);
304#endif
305
306
307
308
309ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs)
310{
311 ktime_t res = ktime_add_unsafe(lhs, rhs);
312
313
314
315
316
317 if (res < 0 || res < lhs || res < rhs)
318 res = ktime_set(KTIME_SEC_MAX, 0);
319
320 return res;
321}
322
323EXPORT_SYMBOL_GPL(ktime_add_safe);
324
325#ifdef CONFIG_DEBUG_OBJECTS_TIMERS
326
327static struct debug_obj_descr hrtimer_debug_descr;
328
329static void *hrtimer_debug_hint(void *addr)
330{
331 return ((struct hrtimer *) addr)->function;
332}
333
334
335
336
337
338static bool hrtimer_fixup_init(void *addr, enum debug_obj_state state)
339{
340 struct hrtimer *timer = addr;
341
342 switch (state) {
343 case ODEBUG_STATE_ACTIVE:
344 hrtimer_cancel(timer);
345 debug_object_init(timer, &hrtimer_debug_descr);
346 return true;
347 default:
348 return false;
349 }
350}
351
352
353
354
355
356
357static bool hrtimer_fixup_activate(void *addr, enum debug_obj_state state)
358{
359 switch (state) {
360 case ODEBUG_STATE_ACTIVE:
361 WARN_ON(1);
362
363 default:
364 return false;
365 }
366}
367
368
369
370
371
372static bool hrtimer_fixup_free(void *addr, enum debug_obj_state state)
373{
374 struct hrtimer *timer = addr;
375
376 switch (state) {
377 case ODEBUG_STATE_ACTIVE:
378 hrtimer_cancel(timer);
379 debug_object_free(timer, &hrtimer_debug_descr);
380 return true;
381 default:
382 return false;
383 }
384}
385
386static struct debug_obj_descr hrtimer_debug_descr = {
387 .name = "hrtimer",
388 .debug_hint = hrtimer_debug_hint,
389 .fixup_init = hrtimer_fixup_init,
390 .fixup_activate = hrtimer_fixup_activate,
391 .fixup_free = hrtimer_fixup_free,
392};
393
394static inline void debug_hrtimer_init(struct hrtimer *timer)
395{
396 debug_object_init(timer, &hrtimer_debug_descr);
397}
398
399static inline void debug_hrtimer_activate(struct hrtimer *timer)
400{
401 debug_object_activate(timer, &hrtimer_debug_descr);
402}
403
404static inline void debug_hrtimer_deactivate(struct hrtimer *timer)
405{
406 debug_object_deactivate(timer, &hrtimer_debug_descr);
407}
408
409static inline void debug_hrtimer_free(struct hrtimer *timer)
410{
411 debug_object_free(timer, &hrtimer_debug_descr);
412}
413
414static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
415 enum hrtimer_mode mode);
416
417void hrtimer_init_on_stack(struct hrtimer *timer, clockid_t clock_id,
418 enum hrtimer_mode mode)
419{
420 debug_object_init_on_stack(timer, &hrtimer_debug_descr);
421 __hrtimer_init(timer, clock_id, mode);
422}
423EXPORT_SYMBOL_GPL(hrtimer_init_on_stack);
424
425void destroy_hrtimer_on_stack(struct hrtimer *timer)
426{
427 debug_object_free(timer, &hrtimer_debug_descr);
428}
429EXPORT_SYMBOL_GPL(destroy_hrtimer_on_stack);
430
431#else
432static inline void debug_hrtimer_init(struct hrtimer *timer) { }
433static inline void debug_hrtimer_activate(struct hrtimer *timer) { }
434static inline void debug_hrtimer_deactivate(struct hrtimer *timer) { }
435#endif
436
437static inline void
438debug_init(struct hrtimer *timer, clockid_t clockid,
439 enum hrtimer_mode mode)
440{
441 debug_hrtimer_init(timer);
442 trace_hrtimer_init(timer, clockid, mode);
443}
444
445static inline void debug_activate(struct hrtimer *timer)
446{
447 debug_hrtimer_activate(timer);
448 trace_hrtimer_start(timer);
449}
450
451static inline void debug_deactivate(struct hrtimer *timer)
452{
453 debug_hrtimer_deactivate(timer);
454 trace_hrtimer_cancel(timer);
455}
456
457#if defined(CONFIG_NO_HZ_COMMON) || defined(CONFIG_HIGH_RES_TIMERS)
458static inline void hrtimer_update_next_timer(struct hrtimer_cpu_base *cpu_base,
459 struct hrtimer *timer)
460{
461#ifdef CONFIG_HIGH_RES_TIMERS
462 cpu_base->next_timer = timer;
463#endif
464}
465
466static ktime_t __hrtimer_get_next_event(struct hrtimer_cpu_base *cpu_base)
467{
468 struct hrtimer_clock_base *base = cpu_base->clock_base;
469 unsigned int active = cpu_base->active_bases;
470 ktime_t expires, expires_next = KTIME_MAX;
471
472 hrtimer_update_next_timer(cpu_base, NULL);
473 for (; active; base++, active >>= 1) {
474 struct timerqueue_node *next;
475 struct hrtimer *timer;
476
477 if (!(active & 0x01))
478 continue;
479
480 next = timerqueue_getnext(&base->active);
481 timer = container_of(next, struct hrtimer, node);
482 expires = ktime_sub(hrtimer_get_expires(timer), base->offset);
483 if (expires < expires_next) {
484 expires_next = expires;
485 hrtimer_update_next_timer(cpu_base, timer);
486 }
487 }
488
489
490
491
492
493 if (expires_next < 0)
494 expires_next = 0;
495 return expires_next;
496}
497#endif
498
499static inline ktime_t hrtimer_update_base(struct hrtimer_cpu_base *base)
500{
501 ktime_t *offs_real = &base->clock_base[HRTIMER_BASE_REALTIME].offset;
502 ktime_t *offs_boot = &base->clock_base[HRTIMER_BASE_BOOTTIME].offset;
503 ktime_t *offs_tai = &base->clock_base[HRTIMER_BASE_TAI].offset;
504
505 return ktime_get_update_offsets_now(&base->clock_was_set_seq,
506 offs_real, offs_boot, offs_tai);
507}
508
509
510#ifdef CONFIG_HIGH_RES_TIMERS
511
512
513
514
515static bool hrtimer_hres_enabled __read_mostly = true;
516unsigned int hrtimer_resolution __read_mostly = LOW_RES_NSEC;
517EXPORT_SYMBOL_GPL(hrtimer_resolution);
518
519
520
521
522static int __init setup_hrtimer_hres(char *str)
523{
524 return (kstrtobool(str, &hrtimer_hres_enabled) == 0);
525}
526
527__setup("highres=", setup_hrtimer_hres);
528
529
530
531
532static inline int hrtimer_is_hres_enabled(void)
533{
534 return hrtimer_hres_enabled;
535}
536
537
538
539
540static inline int __hrtimer_hres_active(struct hrtimer_cpu_base *cpu_base)
541{
542 return cpu_base->hres_active;
543}
544
545static inline int hrtimer_hres_active(void)
546{
547 return __hrtimer_hres_active(this_cpu_ptr(&hrtimer_bases));
548}
549
550
551
552
553
554
555static void
556hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base, int skip_equal)
557{
558 ktime_t expires_next;
559
560 if (!cpu_base->hres_active)
561 return;
562
563 expires_next = __hrtimer_get_next_event(cpu_base);
564
565 if (skip_equal && expires_next == cpu_base->expires_next)
566 return;
567
568 cpu_base->expires_next = expires_next;
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584 if (cpu_base->hang_detected)
585 return;
586
587 tick_program_event(cpu_base->expires_next, 1);
588}
589
590
591
592
593
594
595
596
597static void hrtimer_reprogram(struct hrtimer *timer,
598 struct hrtimer_clock_base *base)
599{
600 struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
601 ktime_t expires = ktime_sub(hrtimer_get_expires(timer), base->offset);
602
603 WARN_ON_ONCE(hrtimer_get_expires_tv64(timer) < 0);
604
605
606
607
608
609 if (base->cpu_base != cpu_base)
610 return;
611
612
613
614
615
616
617
618
619 if (cpu_base->in_hrtirq)
620 return;
621
622
623
624
625
626 if (expires < 0)
627 expires = 0;
628
629 if (expires >= cpu_base->expires_next)
630 return;
631
632
633 cpu_base->next_timer = timer;
634
635
636
637
638
639
640
641 if (cpu_base->hang_detected)
642 return;
643
644
645
646
647
648 cpu_base->expires_next = expires;
649 tick_program_event(expires, 1);
650}
651
652
653
654
655static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base)
656{
657 base->expires_next = KTIME_MAX;
658 base->hang_detected = 0;
659 base->hres_active = 0;
660 base->next_timer = NULL;
661}
662
663
664
665
666
667
668static void retrigger_next_event(void *arg)
669{
670 struct hrtimer_cpu_base *base = this_cpu_ptr(&hrtimer_bases);
671
672 if (!base->hres_active)
673 return;
674
675 raw_spin_lock(&base->lock);
676 hrtimer_update_base(base);
677 hrtimer_force_reprogram(base, 0);
678 raw_spin_unlock(&base->lock);
679}
680
681
682
683
684static void hrtimer_switch_to_hres(void)
685{
686 struct hrtimer_cpu_base *base = this_cpu_ptr(&hrtimer_bases);
687
688 if (tick_init_highres()) {
689 printk(KERN_WARNING "Could not switch to high resolution "
690 "mode on CPU %d\n", base->cpu);
691 return;
692 }
693 base->hres_active = 1;
694 hrtimer_resolution = HIGH_RES_NSEC;
695
696 tick_setup_sched_timer();
697
698 retrigger_next_event(NULL);
699}
700
701static void clock_was_set_work(struct work_struct *work)
702{
703 clock_was_set();
704}
705
706static DECLARE_WORK(hrtimer_work, clock_was_set_work);
707
708
709
710
711
712void clock_was_set_delayed(void)
713{
714 schedule_work(&hrtimer_work);
715}
716
717#else
718
719static inline int __hrtimer_hres_active(struct hrtimer_cpu_base *b) { return 0; }
720static inline int hrtimer_hres_active(void) { return 0; }
721static inline int hrtimer_is_hres_enabled(void) { return 0; }
722static inline void hrtimer_switch_to_hres(void) { }
723static inline void
724hrtimer_force_reprogram(struct hrtimer_cpu_base *base, int skip_equal) { }
725static inline int hrtimer_reprogram(struct hrtimer *timer,
726 struct hrtimer_clock_base *base)
727{
728 return 0;
729}
730static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) { }
731static inline void retrigger_next_event(void *arg) { }
732
733#endif
734
735
736
737
738
739
740
741
742
743
744
745
746void clock_was_set(void)
747{
748#ifdef CONFIG_HIGH_RES_TIMERS
749
750 on_each_cpu(retrigger_next_event, NULL, 1);
751#endif
752 timerfd_clock_was_set();
753}
754
755
756
757
758
759
760
761void hrtimers_resume(void)
762{
763 lockdep_assert_irqs_disabled();
764
765 retrigger_next_event(NULL);
766
767 clock_was_set_delayed();
768}
769
770
771
772
773static inline
774void unlock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
775{
776 raw_spin_unlock_irqrestore(&timer->base->cpu_base->lock, *flags);
777}
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796u64 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval)
797{
798 u64 orun = 1;
799 ktime_t delta;
800
801 delta = ktime_sub(now, hrtimer_get_expires(timer));
802
803 if (delta < 0)
804 return 0;
805
806 if (WARN_ON(timer->state & HRTIMER_STATE_ENQUEUED))
807 return 0;
808
809 if (interval < hrtimer_resolution)
810 interval = hrtimer_resolution;
811
812 if (unlikely(delta >= interval)) {
813 s64 incr = ktime_to_ns(interval);
814
815 orun = ktime_divns(delta, incr);
816 hrtimer_add_expires_ns(timer, incr * orun);
817 if (hrtimer_get_expires_tv64(timer) > now)
818 return orun;
819
820
821
822
823 orun++;
824 }
825 hrtimer_add_expires(timer, interval);
826
827 return orun;
828}
829EXPORT_SYMBOL_GPL(hrtimer_forward);
830
831
832
833
834
835
836
837
838
839static int enqueue_hrtimer(struct hrtimer *timer,
840 struct hrtimer_clock_base *base)
841{
842 debug_activate(timer);
843
844 base->cpu_base->active_bases |= 1 << base->index;
845
846 timer->state = HRTIMER_STATE_ENQUEUED;
847
848 return timerqueue_add(&base->active, &timer->node);
849}
850
851
852
853
854
855
856
857
858
859
860
861static void __remove_hrtimer(struct hrtimer *timer,
862 struct hrtimer_clock_base *base,
863 u8 newstate, int reprogram)
864{
865 struct hrtimer_cpu_base *cpu_base = base->cpu_base;
866 u8 state = timer->state;
867
868 timer->state = newstate;
869 if (!(state & HRTIMER_STATE_ENQUEUED))
870 return;
871
872 if (!timerqueue_del(&base->active, &timer->node))
873 cpu_base->active_bases &= ~(1 << base->index);
874
875#ifdef CONFIG_HIGH_RES_TIMERS
876
877
878
879
880
881
882
883
884 if (reprogram && timer == cpu_base->next_timer)
885 hrtimer_force_reprogram(cpu_base, 1);
886#endif
887}
888
889
890
891
892static inline int
893remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base, bool restart)
894{
895 if (hrtimer_is_queued(timer)) {
896 u8 state = timer->state;
897 int reprogram;
898
899
900
901
902
903
904
905
906
907 debug_deactivate(timer);
908 reprogram = base->cpu_base == this_cpu_ptr(&hrtimer_bases);
909
910 if (!restart)
911 state = HRTIMER_STATE_INACTIVE;
912
913 __remove_hrtimer(timer, base, state, reprogram);
914 return 1;
915 }
916 return 0;
917}
918
919static inline ktime_t hrtimer_update_lowres(struct hrtimer *timer, ktime_t tim,
920 const enum hrtimer_mode mode)
921{
922#ifdef CONFIG_TIME_LOW_RES
923
924
925
926
927
928 timer->is_rel = mode & HRTIMER_MODE_REL;
929 if (timer->is_rel)
930 tim = ktime_add_safe(tim, hrtimer_resolution);
931#endif
932 return tim;
933}
934
935
936
937
938
939
940
941
942
943void hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
944 u64 delta_ns, const enum hrtimer_mode mode)
945{
946 struct hrtimer_clock_base *base, *new_base;
947 unsigned long flags;
948 int leftmost;
949
950 base = lock_hrtimer_base(timer, &flags);
951
952
953 remove_hrtimer(timer, base, true);
954
955 if (mode & HRTIMER_MODE_REL)
956 tim = ktime_add_safe(tim, base->get_time());
957
958 tim = hrtimer_update_lowres(timer, tim, mode);
959
960 hrtimer_set_expires_range_ns(timer, tim, delta_ns);
961
962
963 new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED);
964
965 leftmost = enqueue_hrtimer(timer, new_base);
966 if (!leftmost)
967 goto unlock;
968
969 if (!hrtimer_is_hres_active(timer)) {
970
971
972
973
974 if (new_base->cpu_base->nohz_active)
975 wake_up_nohz_cpu(new_base->cpu_base->cpu);
976 } else {
977 hrtimer_reprogram(timer, new_base);
978 }
979unlock:
980 unlock_hrtimer_base(timer, &flags);
981}
982EXPORT_SYMBOL_GPL(hrtimer_start_range_ns);
983
984
985
986
987
988
989
990
991
992
993
994int hrtimer_try_to_cancel(struct hrtimer *timer)
995{
996 struct hrtimer_clock_base *base;
997 unsigned long flags;
998 int ret = -1;
999
1000
1001
1002
1003
1004
1005
1006 if (!hrtimer_active(timer))
1007 return 0;
1008
1009 base = lock_hrtimer_base(timer, &flags);
1010
1011 if (!hrtimer_callback_running(timer))
1012 ret = remove_hrtimer(timer, base, false);
1013
1014 unlock_hrtimer_base(timer, &flags);
1015
1016 return ret;
1017
1018}
1019EXPORT_SYMBOL_GPL(hrtimer_try_to_cancel);
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029int hrtimer_cancel(struct hrtimer *timer)
1030{
1031 for (;;) {
1032 int ret = hrtimer_try_to_cancel(timer);
1033
1034 if (ret >= 0)
1035 return ret;
1036 cpu_relax();
1037 }
1038}
1039EXPORT_SYMBOL_GPL(hrtimer_cancel);
1040
1041
1042
1043
1044
1045
1046ktime_t __hrtimer_get_remaining(const struct hrtimer *timer, bool adjust)
1047{
1048 unsigned long flags;
1049 ktime_t rem;
1050
1051 lock_hrtimer_base(timer, &flags);
1052 if (IS_ENABLED(CONFIG_TIME_LOW_RES) && adjust)
1053 rem = hrtimer_expires_remaining_adjusted(timer);
1054 else
1055 rem = hrtimer_expires_remaining(timer);
1056 unlock_hrtimer_base(timer, &flags);
1057
1058 return rem;
1059}
1060EXPORT_SYMBOL_GPL(__hrtimer_get_remaining);
1061
1062#ifdef CONFIG_NO_HZ_COMMON
1063
1064
1065
1066
1067
1068u64 hrtimer_get_next_event(void)
1069{
1070 struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
1071 u64 expires = KTIME_MAX;
1072 unsigned long flags;
1073
1074 raw_spin_lock_irqsave(&cpu_base->lock, flags);
1075
1076 if (!__hrtimer_hres_active(cpu_base))
1077 expires = __hrtimer_get_next_event(cpu_base);
1078
1079 raw_spin_unlock_irqrestore(&cpu_base->lock, flags);
1080
1081 return expires;
1082}
1083#endif
1084
1085static inline int hrtimer_clockid_to_base(clockid_t clock_id)
1086{
1087 if (likely(clock_id < MAX_CLOCKS)) {
1088 int base = hrtimer_clock_to_base_table[clock_id];
1089
1090 if (likely(base != HRTIMER_MAX_CLOCK_BASES))
1091 return base;
1092 }
1093 WARN(1, "Invalid clockid %d. Using MONOTONIC\n", clock_id);
1094 return HRTIMER_BASE_MONOTONIC;
1095}
1096
1097static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
1098 enum hrtimer_mode mode)
1099{
1100 struct hrtimer_cpu_base *cpu_base;
1101 int base;
1102
1103 memset(timer, 0, sizeof(struct hrtimer));
1104
1105 cpu_base = raw_cpu_ptr(&hrtimer_bases);
1106
1107 if (clock_id == CLOCK_REALTIME && mode != HRTIMER_MODE_ABS)
1108 clock_id = CLOCK_MONOTONIC;
1109
1110 base = hrtimer_clockid_to_base(clock_id);
1111 timer->base = &cpu_base->clock_base[base];
1112 timerqueue_init(&timer->node);
1113}
1114
1115
1116
1117
1118
1119
1120
1121void hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
1122 enum hrtimer_mode mode)
1123{
1124 debug_init(timer, clock_id, mode);
1125 __hrtimer_init(timer, clock_id, mode);
1126}
1127EXPORT_SYMBOL_GPL(hrtimer_init);
1128
1129
1130
1131
1132
1133
1134
1135
1136bool hrtimer_active(const struct hrtimer *timer)
1137{
1138 struct hrtimer_cpu_base *cpu_base;
1139 unsigned int seq;
1140
1141 do {
1142 cpu_base = READ_ONCE(timer->base->cpu_base);
1143 seq = raw_read_seqcount_begin(&cpu_base->seq);
1144
1145 if (timer->state != HRTIMER_STATE_INACTIVE ||
1146 cpu_base->running == timer)
1147 return true;
1148
1149 } while (read_seqcount_retry(&cpu_base->seq, seq) ||
1150 cpu_base != READ_ONCE(timer->base->cpu_base));
1151
1152 return false;
1153}
1154EXPORT_SYMBOL_GPL(hrtimer_active);
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174static void __run_hrtimer(struct hrtimer_cpu_base *cpu_base,
1175 struct hrtimer_clock_base *base,
1176 struct hrtimer *timer, ktime_t *now)
1177{
1178 enum hrtimer_restart (*fn)(struct hrtimer *);
1179 int restart;
1180
1181 lockdep_assert_held(&cpu_base->lock);
1182
1183 debug_deactivate(timer);
1184 cpu_base->running = timer;
1185
1186
1187
1188
1189
1190
1191
1192
1193 raw_write_seqcount_barrier(&cpu_base->seq);
1194
1195 __remove_hrtimer(timer, base, HRTIMER_STATE_INACTIVE, 0);
1196 fn = timer->function;
1197
1198
1199
1200
1201
1202
1203 if (IS_ENABLED(CONFIG_TIME_LOW_RES))
1204 timer->is_rel = false;
1205
1206
1207
1208
1209
1210
1211 raw_spin_unlock(&cpu_base->lock);
1212 trace_hrtimer_expire_entry(timer, now);
1213 restart = fn(timer);
1214 trace_hrtimer_expire_exit(timer);
1215 raw_spin_lock(&cpu_base->lock);
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226 if (restart != HRTIMER_NORESTART &&
1227 !(timer->state & HRTIMER_STATE_ENQUEUED))
1228 enqueue_hrtimer(timer, base);
1229
1230
1231
1232
1233
1234
1235
1236
1237 raw_write_seqcount_barrier(&cpu_base->seq);
1238
1239 WARN_ON_ONCE(cpu_base->running != timer);
1240 cpu_base->running = NULL;
1241}
1242
1243static void __hrtimer_run_queues(struct hrtimer_cpu_base *cpu_base, ktime_t now)
1244{
1245 struct hrtimer_clock_base *base = cpu_base->clock_base;
1246 unsigned int active = cpu_base->active_bases;
1247
1248 for (; active; base++, active >>= 1) {
1249 struct timerqueue_node *node;
1250 ktime_t basenow;
1251
1252 if (!(active & 0x01))
1253 continue;
1254
1255 basenow = ktime_add(now, base->offset);
1256
1257 while ((node = timerqueue_getnext(&base->active))) {
1258 struct hrtimer *timer;
1259
1260 timer = container_of(node, struct hrtimer, node);
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274 if (basenow < hrtimer_get_softexpires_tv64(timer))
1275 break;
1276
1277 __run_hrtimer(cpu_base, base, timer, &basenow);
1278 }
1279 }
1280}
1281
1282#ifdef CONFIG_HIGH_RES_TIMERS
1283
1284
1285
1286
1287
1288void hrtimer_interrupt(struct clock_event_device *dev)
1289{
1290 struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
1291 ktime_t expires_next, now, entry_time, delta;
1292 int retries = 0;
1293
1294 BUG_ON(!cpu_base->hres_active);
1295 cpu_base->nr_events++;
1296 dev->next_event = KTIME_MAX;
1297
1298 raw_spin_lock(&cpu_base->lock);
1299 entry_time = now = hrtimer_update_base(cpu_base);
1300retry:
1301 cpu_base->in_hrtirq = 1;
1302
1303
1304
1305
1306
1307
1308
1309 cpu_base->expires_next = KTIME_MAX;
1310
1311 __hrtimer_run_queues(cpu_base, now);
1312
1313
1314 expires_next = __hrtimer_get_next_event(cpu_base);
1315
1316
1317
1318
1319 cpu_base->expires_next = expires_next;
1320 cpu_base->in_hrtirq = 0;
1321 raw_spin_unlock(&cpu_base->lock);
1322
1323
1324 if (!tick_program_event(expires_next, 0)) {
1325 cpu_base->hang_detected = 0;
1326 return;
1327 }
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342 raw_spin_lock(&cpu_base->lock);
1343 now = hrtimer_update_base(cpu_base);
1344 cpu_base->nr_retries++;
1345 if (++retries < 3)
1346 goto retry;
1347
1348
1349
1350
1351
1352
1353 cpu_base->nr_hangs++;
1354 cpu_base->hang_detected = 1;
1355 raw_spin_unlock(&cpu_base->lock);
1356 delta = ktime_sub(now, entry_time);
1357 if ((unsigned int)delta > cpu_base->max_hang_time)
1358 cpu_base->max_hang_time = (unsigned int) delta;
1359
1360
1361
1362
1363 if (delta > 100 * NSEC_PER_MSEC)
1364 expires_next = ktime_add_ns(now, 100 * NSEC_PER_MSEC);
1365 else
1366 expires_next = ktime_add(now, delta);
1367 tick_program_event(expires_next, 1);
1368 printk_once(KERN_WARNING "hrtimer: interrupt took %llu ns\n",
1369 ktime_to_ns(delta));
1370}
1371
1372
1373static inline void __hrtimer_peek_ahead_timers(void)
1374{
1375 struct tick_device *td;
1376
1377 if (!hrtimer_hres_active())
1378 return;
1379
1380 td = this_cpu_ptr(&tick_cpu_device);
1381 if (td && td->evtdev)
1382 hrtimer_interrupt(td->evtdev);
1383}
1384
1385#else
1386
1387static inline void __hrtimer_peek_ahead_timers(void) { }
1388
1389#endif
1390
1391
1392
1393
1394void hrtimer_run_queues(void)
1395{
1396 struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
1397 ktime_t now;
1398
1399 if (__hrtimer_hres_active(cpu_base))
1400 return;
1401
1402
1403
1404
1405
1406
1407
1408
1409 if (tick_check_oneshot_change(!hrtimer_is_hres_enabled())) {
1410 hrtimer_switch_to_hres();
1411 return;
1412 }
1413
1414 raw_spin_lock(&cpu_base->lock);
1415 now = hrtimer_update_base(cpu_base);
1416 __hrtimer_run_queues(cpu_base, now);
1417 raw_spin_unlock(&cpu_base->lock);
1418}
1419
1420
1421
1422
1423static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer)
1424{
1425 struct hrtimer_sleeper *t =
1426 container_of(timer, struct hrtimer_sleeper, timer);
1427 struct task_struct *task = t->task;
1428
1429 t->task = NULL;
1430 if (task)
1431 wake_up_process(task);
1432
1433 return HRTIMER_NORESTART;
1434}
1435
1436void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task)
1437{
1438 sl->timer.function = hrtimer_wakeup;
1439 sl->task = task;
1440}
1441EXPORT_SYMBOL_GPL(hrtimer_init_sleeper);
1442
1443int nanosleep_copyout(struct restart_block *restart, struct timespec64 *ts)
1444{
1445 switch(restart->nanosleep.type) {
1446#ifdef CONFIG_COMPAT
1447 case TT_COMPAT:
1448 if (compat_put_timespec64(ts, restart->nanosleep.compat_rmtp))
1449 return -EFAULT;
1450 break;
1451#endif
1452 case TT_NATIVE:
1453 if (put_timespec64(ts, restart->nanosleep.rmtp))
1454 return -EFAULT;
1455 break;
1456 default:
1457 BUG();
1458 }
1459 return -ERESTART_RESTARTBLOCK;
1460}
1461
1462static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode)
1463{
1464 struct restart_block *restart;
1465
1466 hrtimer_init_sleeper(t, current);
1467
1468 do {
1469 set_current_state(TASK_INTERRUPTIBLE);
1470 hrtimer_start_expires(&t->timer, mode);
1471
1472 if (likely(t->task))
1473 freezable_schedule();
1474
1475 hrtimer_cancel(&t->timer);
1476 mode = HRTIMER_MODE_ABS;
1477
1478 } while (t->task && !signal_pending(current));
1479
1480 __set_current_state(TASK_RUNNING);
1481
1482 if (!t->task)
1483 return 0;
1484
1485 restart = ¤t->restart_block;
1486 if (restart->nanosleep.type != TT_NONE) {
1487 ktime_t rem = hrtimer_expires_remaining(&t->timer);
1488 struct timespec64 rmt;
1489
1490 if (rem <= 0)
1491 return 0;
1492 rmt = ktime_to_timespec64(rem);
1493
1494 return nanosleep_copyout(restart, &rmt);
1495 }
1496 return -ERESTART_RESTARTBLOCK;
1497}
1498
1499static long __sched hrtimer_nanosleep_restart(struct restart_block *restart)
1500{
1501 struct hrtimer_sleeper t;
1502 int ret;
1503
1504 hrtimer_init_on_stack(&t.timer, restart->nanosleep.clockid,
1505 HRTIMER_MODE_ABS);
1506 hrtimer_set_expires_tv64(&t.timer, restart->nanosleep.expires);
1507
1508 ret = do_nanosleep(&t, HRTIMER_MODE_ABS);
1509 destroy_hrtimer_on_stack(&t.timer);
1510 return ret;
1511}
1512
1513long hrtimer_nanosleep(const struct timespec64 *rqtp,
1514 const enum hrtimer_mode mode, const clockid_t clockid)
1515{
1516 struct restart_block *restart;
1517 struct hrtimer_sleeper t;
1518 int ret = 0;
1519 u64 slack;
1520
1521 slack = current->timer_slack_ns;
1522 if (dl_task(current) || rt_task(current))
1523 slack = 0;
1524
1525 hrtimer_init_on_stack(&t.timer, clockid, mode);
1526 hrtimer_set_expires_range_ns(&t.timer, timespec64_to_ktime(*rqtp), slack);
1527 ret = do_nanosleep(&t, mode);
1528 if (ret != -ERESTART_RESTARTBLOCK)
1529 goto out;
1530
1531
1532 if (mode == HRTIMER_MODE_ABS) {
1533 ret = -ERESTARTNOHAND;
1534 goto out;
1535 }
1536
1537 restart = ¤t->restart_block;
1538 restart->fn = hrtimer_nanosleep_restart;
1539 restart->nanosleep.clockid = t.timer.base->clockid;
1540 restart->nanosleep.expires = hrtimer_get_expires_tv64(&t.timer);
1541out:
1542 destroy_hrtimer_on_stack(&t.timer);
1543 return ret;
1544}
1545
1546SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
1547 struct timespec __user *, rmtp)
1548{
1549 struct timespec64 tu;
1550
1551 if (get_timespec64(&tu, rqtp))
1552 return -EFAULT;
1553
1554 if (!timespec64_valid(&tu))
1555 return -EINVAL;
1556
1557 current->restart_block.nanosleep.type = rmtp ? TT_NATIVE : TT_NONE;
1558 current->restart_block.nanosleep.rmtp = rmtp;
1559 return hrtimer_nanosleep(&tu, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
1560}
1561
1562#ifdef CONFIG_COMPAT
1563
1564COMPAT_SYSCALL_DEFINE2(nanosleep, struct compat_timespec __user *, rqtp,
1565 struct compat_timespec __user *, rmtp)
1566{
1567 struct timespec64 tu;
1568
1569 if (compat_get_timespec64(&tu, rqtp))
1570 return -EFAULT;
1571
1572 if (!timespec64_valid(&tu))
1573 return -EINVAL;
1574
1575 current->restart_block.nanosleep.type = rmtp ? TT_COMPAT : TT_NONE;
1576 current->restart_block.nanosleep.compat_rmtp = rmtp;
1577 return hrtimer_nanosleep(&tu, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
1578}
1579#endif
1580
1581
1582
1583
1584int hrtimers_prepare_cpu(unsigned int cpu)
1585{
1586 struct hrtimer_cpu_base *cpu_base = &per_cpu(hrtimer_bases, cpu);
1587 int i;
1588
1589 for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
1590 cpu_base->clock_base[i].cpu_base = cpu_base;
1591 timerqueue_init_head(&cpu_base->clock_base[i].active);
1592 }
1593
1594 cpu_base->active_bases = 0;
1595 cpu_base->cpu = cpu;
1596 hrtimer_init_hres(cpu_base);
1597 return 0;
1598}
1599
1600#ifdef CONFIG_HOTPLUG_CPU
1601
1602static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
1603 struct hrtimer_clock_base *new_base)
1604{
1605 struct hrtimer *timer;
1606 struct timerqueue_node *node;
1607
1608 while ((node = timerqueue_getnext(&old_base->active))) {
1609 timer = container_of(node, struct hrtimer, node);
1610 BUG_ON(hrtimer_callback_running(timer));
1611 debug_deactivate(timer);
1612
1613
1614
1615
1616
1617
1618 __remove_hrtimer(timer, old_base, HRTIMER_STATE_ENQUEUED, 0);
1619 timer->base = new_base;
1620
1621
1622
1623
1624
1625
1626
1627
1628 enqueue_hrtimer(timer, new_base);
1629 }
1630}
1631
1632int hrtimers_dead_cpu(unsigned int scpu)
1633{
1634 struct hrtimer_cpu_base *old_base, *new_base;
1635 int i;
1636
1637 BUG_ON(cpu_online(scpu));
1638 tick_cancel_sched_timer(scpu);
1639
1640 local_irq_disable();
1641 old_base = &per_cpu(hrtimer_bases, scpu);
1642 new_base = this_cpu_ptr(&hrtimer_bases);
1643
1644
1645
1646
1647 raw_spin_lock(&new_base->lock);
1648 raw_spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
1649
1650 for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
1651 migrate_hrtimer_list(&old_base->clock_base[i],
1652 &new_base->clock_base[i]);
1653 }
1654
1655 raw_spin_unlock(&old_base->lock);
1656 raw_spin_unlock(&new_base->lock);
1657
1658
1659 __hrtimer_peek_ahead_timers();
1660 local_irq_enable();
1661 return 0;
1662}
1663
1664#endif
1665
1666void __init hrtimers_init(void)
1667{
1668 hrtimers_prepare_cpu(smp_processor_id());
1669}
1670
1671
1672
1673
1674
1675
1676
1677
1678int __sched
1679schedule_hrtimeout_range_clock(ktime_t *expires, u64 delta,
1680 const enum hrtimer_mode mode, int clock)
1681{
1682 struct hrtimer_sleeper t;
1683
1684
1685
1686
1687
1688 if (expires && *expires == 0) {
1689 __set_current_state(TASK_RUNNING);
1690 return 0;
1691 }
1692
1693
1694
1695
1696 if (!expires) {
1697 schedule();
1698 return -EINTR;
1699 }
1700
1701 hrtimer_init_on_stack(&t.timer, clock, mode);
1702 hrtimer_set_expires_range_ns(&t.timer, *expires, delta);
1703
1704 hrtimer_init_sleeper(&t, current);
1705
1706 hrtimer_start_expires(&t.timer, mode);
1707
1708 if (likely(t.task))
1709 schedule();
1710
1711 hrtimer_cancel(&t.timer);
1712 destroy_hrtimer_on_stack(&t.timer);
1713
1714 __set_current_state(TASK_RUNNING);
1715
1716 return !t.task ? 0 : -EINTR;
1717}
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751int __sched schedule_hrtimeout_range(ktime_t *expires, u64 delta,
1752 const enum hrtimer_mode mode)
1753{
1754 return schedule_hrtimeout_range_clock(expires, delta, mode,
1755 CLOCK_MONOTONIC);
1756}
1757EXPORT_SYMBOL_GPL(schedule_hrtimeout_range);
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785int __sched schedule_hrtimeout(ktime_t *expires,
1786 const enum hrtimer_mode mode)
1787{
1788 return schedule_hrtimeout_range(expires, 0, mode);
1789}
1790EXPORT_SYMBOL_GPL(schedule_hrtimeout);
1791