1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <linux/kernel_stat.h>
23#include <linux/export.h>
24#include <linux/interrupt.h>
25#include <linux/percpu.h>
26#include <linux/init.h>
27#include <linux/mm.h>
28#include <linux/swap.h>
29#include <linux/pid_namespace.h>
30#include <linux/notifier.h>
31#include <linux/thread_info.h>
32#include <linux/time.h>
33#include <linux/jiffies.h>
34#include <linux/posix-timers.h>
35#include <linux/cpu.h>
36#include <linux/syscalls.h>
37#include <linux/delay.h>
38#include <linux/tick.h>
39#include <linux/kallsyms.h>
40#include <linux/irq_work.h>
41#include <linux/sched.h>
42#include <linux/slab.h>
43
44#include <asm/uaccess.h>
45#include <asm/unistd.h>
46#include <asm/div64.h>
47#include <asm/timex.h>
48#include <asm/io.h>
49
50#define CREATE_TRACE_POINTS
51#include <trace/events/timer.h>
52
53u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;
54
55EXPORT_SYMBOL(jiffies_64);
56
57
58
59
60#define TVN_BITS (CONFIG_BASE_SMALL ? 4 : 6)
61#define TVR_BITS (CONFIG_BASE_SMALL ? 6 : 8)
62#define TVN_SIZE (1 << TVN_BITS)
63#define TVR_SIZE (1 << TVR_BITS)
64#define TVN_MASK (TVN_SIZE - 1)
65#define TVR_MASK (TVR_SIZE - 1)
66#define MAX_TVAL ((unsigned long)((1ULL << (TVR_BITS + 4*TVN_BITS)) - 1))
67
68struct tvec {
69 struct list_head vec[TVN_SIZE];
70};
71
72struct tvec_root {
73 struct list_head vec[TVR_SIZE];
74};
75
76struct tvec_base {
77 spinlock_t lock;
78 struct timer_list *running_timer;
79 unsigned long timer_jiffies;
80 unsigned long next_timer;
81 unsigned long active_timers;
82 struct tvec_root tv1;
83 struct tvec tv2;
84 struct tvec tv3;
85 struct tvec tv4;
86 struct tvec tv5;
87} ____cacheline_aligned;
88
89struct tvec_base boot_tvec_bases;
90EXPORT_SYMBOL(boot_tvec_bases);
91static DEFINE_PER_CPU(struct tvec_base *, tvec_bases) = &boot_tvec_bases;
92
93
94static inline unsigned int tbase_get_deferrable(struct tvec_base *base)
95{
96 return ((unsigned int)(unsigned long)base & TBASE_DEFERRABLE_FLAG);
97}
98
99static inline struct tvec_base *tbase_get_base(struct tvec_base *base)
100{
101 return ((struct tvec_base *)((unsigned long)base & ~TBASE_DEFERRABLE_FLAG));
102}
103
104static inline void timer_set_deferrable(struct timer_list *timer)
105{
106 timer->base = TBASE_MAKE_DEFERRED(timer->base);
107}
108
109static inline void
110timer_set_base(struct timer_list *timer, struct tvec_base *new_base)
111{
112 timer->base = (struct tvec_base *)((unsigned long)(new_base) |
113 tbase_get_deferrable(timer->base));
114}
115
116static unsigned long round_jiffies_common(unsigned long j, int cpu,
117 bool force_up)
118{
119 int rem;
120 unsigned long original = j;
121
122
123
124
125
126
127
128
129
130 j += cpu * 3;
131
132 rem = j % HZ;
133
134
135
136
137
138
139
140
141 if (rem < HZ/4 && !force_up)
142 j = j - rem;
143 else
144 j = j - rem + HZ;
145
146
147 j -= cpu * 3;
148
149 if (j <= jiffies)
150 return original;
151 return j;
152}
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174unsigned long __round_jiffies(unsigned long j, int cpu)
175{
176 return round_jiffies_common(j, cpu, false);
177}
178EXPORT_SYMBOL_GPL(__round_jiffies);
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200unsigned long __round_jiffies_relative(unsigned long j, int cpu)
201{
202 unsigned long j0 = jiffies;
203
204
205 return round_jiffies_common(j + j0, cpu, false) - j0;
206}
207EXPORT_SYMBOL_GPL(__round_jiffies_relative);
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224unsigned long round_jiffies(unsigned long j)
225{
226 return round_jiffies_common(j, raw_smp_processor_id(), false);
227}
228EXPORT_SYMBOL_GPL(round_jiffies);
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245unsigned long round_jiffies_relative(unsigned long j)
246{
247 return __round_jiffies_relative(j, raw_smp_processor_id());
248}
249EXPORT_SYMBOL_GPL(round_jiffies_relative);
250
251
252
253
254
255
256
257
258
259
260
261unsigned long __round_jiffies_up(unsigned long j, int cpu)
262{
263 return round_jiffies_common(j, cpu, true);
264}
265EXPORT_SYMBOL_GPL(__round_jiffies_up);
266
267
268
269
270
271
272
273
274
275
276
277unsigned long __round_jiffies_up_relative(unsigned long j, int cpu)
278{
279 unsigned long j0 = jiffies;
280
281
282 return round_jiffies_common(j + j0, cpu, true) - j0;
283}
284EXPORT_SYMBOL_GPL(__round_jiffies_up_relative);
285
286
287
288
289
290
291
292
293
294
295unsigned long round_jiffies_up(unsigned long j)
296{
297 return round_jiffies_common(j, raw_smp_processor_id(), true);
298}
299EXPORT_SYMBOL_GPL(round_jiffies_up);
300
301
302
303
304
305
306
307
308
309
310unsigned long round_jiffies_up_relative(unsigned long j)
311{
312 return __round_jiffies_up_relative(j, raw_smp_processor_id());
313}
314EXPORT_SYMBOL_GPL(round_jiffies_up_relative);
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329void set_timer_slack(struct timer_list *timer, int slack_hz)
330{
331 timer->slack = slack_hz;
332}
333EXPORT_SYMBOL_GPL(set_timer_slack);
334
335static void
336__internal_add_timer(struct tvec_base *base, struct timer_list *timer)
337{
338 unsigned long expires = timer->expires;
339 unsigned long idx = expires - base->timer_jiffies;
340 struct list_head *vec;
341
342 if (idx < TVR_SIZE) {
343 int i = expires & TVR_MASK;
344 vec = base->tv1.vec + i;
345 } else if (idx < 1 << (TVR_BITS + TVN_BITS)) {
346 int i = (expires >> TVR_BITS) & TVN_MASK;
347 vec = base->tv2.vec + i;
348 } else if (idx < 1 << (TVR_BITS + 2 * TVN_BITS)) {
349 int i = (expires >> (TVR_BITS + TVN_BITS)) & TVN_MASK;
350 vec = base->tv3.vec + i;
351 } else if (idx < 1 << (TVR_BITS + 3 * TVN_BITS)) {
352 int i = (expires >> (TVR_BITS + 2 * TVN_BITS)) & TVN_MASK;
353 vec = base->tv4.vec + i;
354 } else if ((signed long) idx < 0) {
355
356
357
358
359 vec = base->tv1.vec + (base->timer_jiffies & TVR_MASK);
360 } else {
361 int i;
362
363
364
365
366 if (idx > MAX_TVAL) {
367 idx = MAX_TVAL;
368 expires = idx + base->timer_jiffies;
369 }
370 i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK;
371 vec = base->tv5.vec + i;
372 }
373
374
375
376 list_add_tail(&timer->entry, vec);
377}
378
379static void internal_add_timer(struct tvec_base *base, struct timer_list *timer)
380{
381 __internal_add_timer(base, timer);
382
383
384
385 if (!tbase_get_deferrable(timer->base)) {
386 if (time_before(timer->expires, base->next_timer))
387 base->next_timer = timer->expires;
388 base->active_timers++;
389 }
390}
391
392#ifdef CONFIG_TIMER_STATS
393void __timer_stats_timer_set_start_info(struct timer_list *timer, void *addr)
394{
395 if (timer->start_site)
396 return;
397
398 timer->start_site = addr;
399 memcpy(timer->start_comm, current->comm, TASK_COMM_LEN);
400 timer->start_pid = current->pid;
401}
402
403static void timer_stats_account_timer(struct timer_list *timer)
404{
405 unsigned int flag = 0;
406
407 if (likely(!timer->start_site))
408 return;
409 if (unlikely(tbase_get_deferrable(timer->base)))
410 flag |= TIMER_STATS_FLAG_DEFERRABLE;
411
412 timer_stats_update_stats(timer, timer->start_pid, timer->start_site,
413 timer->function, timer->start_comm, flag);
414}
415
416#else
417static void timer_stats_account_timer(struct timer_list *timer) {}
418#endif
419
420#ifdef CONFIG_DEBUG_OBJECTS_TIMERS
421
422static struct debug_obj_descr timer_debug_descr;
423
424static void *timer_debug_hint(void *addr)
425{
426 return ((struct timer_list *) addr)->function;
427}
428
429
430
431
432
433static int timer_fixup_init(void *addr, enum debug_obj_state state)
434{
435 struct timer_list *timer = addr;
436
437 switch (state) {
438 case ODEBUG_STATE_ACTIVE:
439 del_timer_sync(timer);
440 debug_object_init(timer, &timer_debug_descr);
441 return 1;
442 default:
443 return 0;
444 }
445}
446
447
448static void stub_timer(unsigned long data)
449{
450 WARN_ON(1);
451}
452
453
454
455
456
457
458static int timer_fixup_activate(void *addr, enum debug_obj_state state)
459{
460 struct timer_list *timer = addr;
461
462 switch (state) {
463
464 case ODEBUG_STATE_NOTAVAILABLE:
465
466
467
468
469
470 if (timer->entry.next == NULL &&
471 timer->entry.prev == TIMER_ENTRY_STATIC) {
472 debug_object_init(timer, &timer_debug_descr);
473 debug_object_activate(timer, &timer_debug_descr);
474 return 0;
475 } else {
476 setup_timer(timer, stub_timer, 0);
477 return 1;
478 }
479 return 0;
480
481 case ODEBUG_STATE_ACTIVE:
482 WARN_ON(1);
483
484 default:
485 return 0;
486 }
487}
488
489
490
491
492
493static int timer_fixup_free(void *addr, enum debug_obj_state state)
494{
495 struct timer_list *timer = addr;
496
497 switch (state) {
498 case ODEBUG_STATE_ACTIVE:
499 del_timer_sync(timer);
500 debug_object_free(timer, &timer_debug_descr);
501 return 1;
502 default:
503 return 0;
504 }
505}
506
507
508
509
510
511static int timer_fixup_assert_init(void *addr, enum debug_obj_state state)
512{
513 struct timer_list *timer = addr;
514
515 switch (state) {
516 case ODEBUG_STATE_NOTAVAILABLE:
517 if (timer->entry.prev == TIMER_ENTRY_STATIC) {
518
519
520
521
522
523 debug_object_init(timer, &timer_debug_descr);
524 return 0;
525 } else {
526 setup_timer(timer, stub_timer, 0);
527 return 1;
528 }
529 default:
530 return 0;
531 }
532}
533
534static struct debug_obj_descr timer_debug_descr = {
535 .name = "timer_list",
536 .debug_hint = timer_debug_hint,
537 .fixup_init = timer_fixup_init,
538 .fixup_activate = timer_fixup_activate,
539 .fixup_free = timer_fixup_free,
540 .fixup_assert_init = timer_fixup_assert_init,
541};
542
543static inline void debug_timer_init(struct timer_list *timer)
544{
545 debug_object_init(timer, &timer_debug_descr);
546}
547
548static inline void debug_timer_activate(struct timer_list *timer)
549{
550 debug_object_activate(timer, &timer_debug_descr);
551}
552
553static inline void debug_timer_deactivate(struct timer_list *timer)
554{
555 debug_object_deactivate(timer, &timer_debug_descr);
556}
557
558static inline void debug_timer_free(struct timer_list *timer)
559{
560 debug_object_free(timer, &timer_debug_descr);
561}
562
563static inline void debug_timer_assert_init(struct timer_list *timer)
564{
565 debug_object_assert_init(timer, &timer_debug_descr);
566}
567
568static void __init_timer(struct timer_list *timer,
569 const char *name,
570 struct lock_class_key *key);
571
572void init_timer_on_stack_key(struct timer_list *timer,
573 const char *name,
574 struct lock_class_key *key)
575{
576 debug_object_init_on_stack(timer, &timer_debug_descr);
577 __init_timer(timer, name, key);
578}
579EXPORT_SYMBOL_GPL(init_timer_on_stack_key);
580
581void destroy_timer_on_stack(struct timer_list *timer)
582{
583 debug_object_free(timer, &timer_debug_descr);
584}
585EXPORT_SYMBOL_GPL(destroy_timer_on_stack);
586
587#else
588static inline void debug_timer_init(struct timer_list *timer) { }
589static inline void debug_timer_activate(struct timer_list *timer) { }
590static inline void debug_timer_deactivate(struct timer_list *timer) { }
591static inline void debug_timer_assert_init(struct timer_list *timer) { }
592#endif
593
594static inline void debug_init(struct timer_list *timer)
595{
596 debug_timer_init(timer);
597 trace_timer_init(timer);
598}
599
600static inline void
601debug_activate(struct timer_list *timer, unsigned long expires)
602{
603 debug_timer_activate(timer);
604 trace_timer_start(timer, expires);
605}
606
607static inline void debug_deactivate(struct timer_list *timer)
608{
609 debug_timer_deactivate(timer);
610 trace_timer_cancel(timer);
611}
612
613static inline void debug_assert_init(struct timer_list *timer)
614{
615 debug_timer_assert_init(timer);
616}
617
618static void __init_timer(struct timer_list *timer,
619 const char *name,
620 struct lock_class_key *key)
621{
622 timer->entry.next = NULL;
623 timer->base = __raw_get_cpu_var(tvec_bases);
624 timer->slack = -1;
625#ifdef CONFIG_TIMER_STATS
626 timer->start_site = NULL;
627 timer->start_pid = -1;
628 memset(timer->start_comm, 0, TASK_COMM_LEN);
629#endif
630 lockdep_init_map(&timer->lockdep_map, name, key, 0);
631}
632
633void setup_deferrable_timer_on_stack_key(struct timer_list *timer,
634 const char *name,
635 struct lock_class_key *key,
636 void (*function)(unsigned long),
637 unsigned long data)
638{
639 timer->function = function;
640 timer->data = data;
641 init_timer_on_stack_key(timer, name, key);
642 timer_set_deferrable(timer);
643}
644EXPORT_SYMBOL_GPL(setup_deferrable_timer_on_stack_key);
645
646
647
648
649
650
651
652
653
654
655
656void init_timer_key(struct timer_list *timer,
657 const char *name,
658 struct lock_class_key *key)
659{
660 debug_init(timer);
661 __init_timer(timer, name, key);
662}
663EXPORT_SYMBOL(init_timer_key);
664
665void init_timer_deferrable_key(struct timer_list *timer,
666 const char *name,
667 struct lock_class_key *key)
668{
669 init_timer_key(timer, name, key);
670 timer_set_deferrable(timer);
671}
672EXPORT_SYMBOL(init_timer_deferrable_key);
673
674static inline void detach_timer(struct timer_list *timer, bool clear_pending)
675{
676 struct list_head *entry = &timer->entry;
677
678 debug_deactivate(timer);
679
680 __list_del(entry->prev, entry->next);
681 if (clear_pending)
682 entry->next = NULL;
683 entry->prev = LIST_POISON2;
684}
685
686static inline void
687detach_expired_timer(struct timer_list *timer, struct tvec_base *base)
688{
689 detach_timer(timer, true);
690 if (!tbase_get_deferrable(timer->base))
691 timer->base->active_timers--;
692}
693
694static int detach_if_pending(struct timer_list *timer, struct tvec_base *base,
695 bool clear_pending)
696{
697 if (!timer_pending(timer))
698 return 0;
699
700 detach_timer(timer, clear_pending);
701 if (!tbase_get_deferrable(timer->base)) {
702 timer->base->active_timers--;
703 if (timer->expires == base->next_timer)
704 base->next_timer = base->timer_jiffies;
705 }
706 return 1;
707}
708
709
710
711
712
713
714
715
716
717
718
719
720
721static struct tvec_base *lock_timer_base(struct timer_list *timer,
722 unsigned long *flags)
723 __acquires(timer->base->lock)
724{
725 struct tvec_base *base;
726
727 for (;;) {
728 struct tvec_base *prelock_base = timer->base;
729 base = tbase_get_base(prelock_base);
730 if (likely(base != NULL)) {
731 spin_lock_irqsave(&base->lock, *flags);
732 if (likely(prelock_base == timer->base))
733 return base;
734
735 spin_unlock_irqrestore(&base->lock, *flags);
736 }
737 cpu_relax();
738 }
739}
740
741static inline int
742__mod_timer(struct timer_list *timer, unsigned long expires,
743 bool pending_only, int pinned)
744{
745 struct tvec_base *base, *new_base;
746 unsigned long flags;
747 int ret = 0 , cpu;
748
749 timer_stats_timer_set_start_info(timer);
750 BUG_ON(!timer->function);
751
752 base = lock_timer_base(timer, &flags);
753
754 ret = detach_if_pending(timer, base, false);
755 if (!ret && pending_only)
756 goto out_unlock;
757
758 debug_activate(timer, expires);
759
760 cpu = smp_processor_id();
761
762#if defined(CONFIG_NO_HZ) && defined(CONFIG_SMP)
763 if (!pinned && get_sysctl_timer_migration() && idle_cpu(cpu))
764 cpu = get_nohz_timer_target();
765#endif
766 new_base = per_cpu(tvec_bases, cpu);
767
768 if (base != new_base) {
769
770
771
772
773
774
775
776 if (likely(base->running_timer != timer)) {
777
778 timer_set_base(timer, NULL);
779 spin_unlock(&base->lock);
780 base = new_base;
781 spin_lock(&base->lock);
782 timer_set_base(timer, base);
783 }
784 }
785
786 timer->expires = expires;
787 internal_add_timer(base, timer);
788
789out_unlock:
790 spin_unlock_irqrestore(&base->lock, flags);
791
792 return ret;
793}
794
795
796
797
798
799
800
801
802
803
804
805int mod_timer_pending(struct timer_list *timer, unsigned long expires)
806{
807 return __mod_timer(timer, expires, true, TIMER_NOT_PINNED);
808}
809EXPORT_SYMBOL(mod_timer_pending);
810
811
812
813
814
815
816
817
818
819
820
821static inline
822unsigned long apply_slack(struct timer_list *timer, unsigned long expires)
823{
824 unsigned long expires_limit, mask;
825 int bit;
826
827 if (timer->slack >= 0) {
828 expires_limit = expires + timer->slack;
829 } else {
830 long delta = expires - jiffies;
831
832 if (delta < 256)
833 return expires;
834
835 expires_limit = expires + delta / 256;
836 }
837 mask = expires ^ expires_limit;
838 if (mask == 0)
839 return expires;
840
841 bit = find_last_bit(&mask, BITS_PER_LONG);
842
843 mask = (1 << bit) - 1;
844
845 expires_limit = expires_limit & ~(mask);
846
847 return expires_limit;
848}
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870int mod_timer(struct timer_list *timer, unsigned long expires)
871{
872 expires = apply_slack(timer, expires);
873
874
875
876
877
878
879 if (timer_pending(timer) && timer->expires == expires)
880 return 1;
881
882 return __mod_timer(timer, expires, false, TIMER_NOT_PINNED);
883}
884EXPORT_SYMBOL(mod_timer);
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905int mod_timer_pinned(struct timer_list *timer, unsigned long expires)
906{
907 if (timer->expires == expires && timer_pending(timer))
908 return 1;
909
910 return __mod_timer(timer, expires, false, TIMER_PINNED);
911}
912EXPORT_SYMBOL(mod_timer_pinned);
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928void add_timer(struct timer_list *timer)
929{
930 BUG_ON(timer_pending(timer));
931 mod_timer(timer, timer->expires);
932}
933EXPORT_SYMBOL(add_timer);
934
935
936
937
938
939
940
941
942void add_timer_on(struct timer_list *timer, int cpu)
943{
944 struct tvec_base *base = per_cpu(tvec_bases, cpu);
945 unsigned long flags;
946
947 timer_stats_timer_set_start_info(timer);
948 BUG_ON(timer_pending(timer) || !timer->function);
949 spin_lock_irqsave(&base->lock, flags);
950 timer_set_base(timer, base);
951 debug_activate(timer, timer->expires);
952 internal_add_timer(base, timer);
953
954
955
956
957
958
959
960
961 wake_up_idle_cpu(cpu);
962 spin_unlock_irqrestore(&base->lock, flags);
963}
964EXPORT_SYMBOL_GPL(add_timer_on);
965
966
967
968
969
970
971
972
973
974
975
976
977int del_timer(struct timer_list *timer)
978{
979 struct tvec_base *base;
980 unsigned long flags;
981 int ret = 0;
982
983 debug_assert_init(timer);
984
985 timer_stats_timer_clear_start_info(timer);
986 if (timer_pending(timer)) {
987 base = lock_timer_base(timer, &flags);
988 ret = detach_if_pending(timer, base, true);
989 spin_unlock_irqrestore(&base->lock, flags);
990 }
991
992 return ret;
993}
994EXPORT_SYMBOL(del_timer);
995
996
997
998
999
1000
1001
1002
1003int try_to_del_timer_sync(struct timer_list *timer)
1004{
1005 struct tvec_base *base;
1006 unsigned long flags;
1007 int ret = -1;
1008
1009 debug_assert_init(timer);
1010
1011 base = lock_timer_base(timer, &flags);
1012
1013 if (base->running_timer != timer) {
1014 timer_stats_timer_clear_start_info(timer);
1015 ret = detach_if_pending(timer, base, true);
1016 }
1017 spin_unlock_irqrestore(&base->lock, flags);
1018
1019 return ret;
1020}
1021EXPORT_SYMBOL(try_to_del_timer_sync);
1022
1023#ifdef CONFIG_SMP
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060int del_timer_sync(struct timer_list *timer)
1061{
1062#ifdef CONFIG_LOCKDEP
1063 unsigned long flags;
1064
1065
1066
1067
1068
1069 local_irq_save(flags);
1070 lock_map_acquire(&timer->lockdep_map);
1071 lock_map_release(&timer->lockdep_map);
1072 local_irq_restore(flags);
1073#endif
1074
1075
1076
1077
1078 WARN_ON(in_irq());
1079 for (;;) {
1080 int ret = try_to_del_timer_sync(timer);
1081 if (ret >= 0)
1082 return ret;
1083 cpu_relax();
1084 }
1085}
1086EXPORT_SYMBOL(del_timer_sync);
1087#endif
1088
1089static int cascade(struct tvec_base *base, struct tvec *tv, int index)
1090{
1091
1092 struct timer_list *timer, *tmp;
1093 struct list_head tv_list;
1094
1095 list_replace_init(tv->vec + index, &tv_list);
1096
1097
1098
1099
1100
1101 list_for_each_entry_safe(timer, tmp, &tv_list, entry) {
1102 BUG_ON(tbase_get_base(timer->base) != base);
1103
1104 __internal_add_timer(base, timer);
1105 }
1106
1107 return index;
1108}
1109
1110static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long),
1111 unsigned long data)
1112{
1113 int preempt_count = preempt_count();
1114
1115#ifdef CONFIG_LOCKDEP
1116
1117
1118
1119
1120
1121
1122
1123 struct lockdep_map lockdep_map;
1124
1125 lockdep_copy_map(&lockdep_map, &timer->lockdep_map);
1126#endif
1127
1128
1129
1130
1131
1132 lock_map_acquire(&lockdep_map);
1133
1134 trace_timer_expire_entry(timer);
1135 fn(data);
1136 trace_timer_expire_exit(timer);
1137
1138 lock_map_release(&lockdep_map);
1139
1140 if (preempt_count != preempt_count()) {
1141 WARN_ONCE(1, "timer: %pF preempt leak: %08x -> %08x\n",
1142 fn, preempt_count, preempt_count());
1143
1144
1145
1146
1147
1148
1149 preempt_count() = preempt_count;
1150 }
1151}
1152
1153#define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK)
1154
1155
1156
1157
1158
1159
1160
1161
1162static inline void __run_timers(struct tvec_base *base)
1163{
1164 struct timer_list *timer;
1165
1166 spin_lock_irq(&base->lock);
1167 while (time_after_eq(jiffies, base->timer_jiffies)) {
1168 struct list_head work_list;
1169 struct list_head *head = &work_list;
1170 int index = base->timer_jiffies & TVR_MASK;
1171
1172
1173
1174
1175 if (!index &&
1176 (!cascade(base, &base->tv2, INDEX(0))) &&
1177 (!cascade(base, &base->tv3, INDEX(1))) &&
1178 !cascade(base, &base->tv4, INDEX(2)))
1179 cascade(base, &base->tv5, INDEX(3));
1180 ++base->timer_jiffies;
1181 list_replace_init(base->tv1.vec + index, &work_list);
1182 while (!list_empty(head)) {
1183 void (*fn)(unsigned long);
1184 unsigned long data;
1185
1186 timer = list_first_entry(head, struct timer_list,entry);
1187 fn = timer->function;
1188 data = timer->data;
1189
1190 timer_stats_account_timer(timer);
1191
1192 base->running_timer = timer;
1193 detach_expired_timer(timer, base);
1194
1195 spin_unlock_irq(&base->lock);
1196 call_timer_fn(timer, fn, data);
1197 spin_lock_irq(&base->lock);
1198 }
1199 }
1200 base->running_timer = NULL;
1201 spin_unlock_irq(&base->lock);
1202}
1203
1204#ifdef CONFIG_NO_HZ
1205
1206
1207
1208
1209
1210static unsigned long __next_timer_interrupt(struct tvec_base *base)
1211{
1212 unsigned long timer_jiffies = base->timer_jiffies;
1213 unsigned long expires = timer_jiffies + NEXT_TIMER_MAX_DELTA;
1214 int index, slot, array, found = 0;
1215 struct timer_list *nte;
1216 struct tvec *varray[4];
1217
1218
1219 index = slot = timer_jiffies & TVR_MASK;
1220 do {
1221 list_for_each_entry(nte, base->tv1.vec + slot, entry) {
1222 if (tbase_get_deferrable(nte->base))
1223 continue;
1224
1225 found = 1;
1226 expires = nte->expires;
1227
1228 if (!index || slot < index)
1229 goto cascade;
1230 return expires;
1231 }
1232 slot = (slot + 1) & TVR_MASK;
1233 } while (slot != index);
1234
1235cascade:
1236
1237 if (index)
1238 timer_jiffies += TVR_SIZE - index;
1239 timer_jiffies >>= TVR_BITS;
1240
1241
1242 varray[0] = &base->tv2;
1243 varray[1] = &base->tv3;
1244 varray[2] = &base->tv4;
1245 varray[3] = &base->tv5;
1246
1247 for (array = 0; array < 4; array++) {
1248 struct tvec *varp = varray[array];
1249
1250 index = slot = timer_jiffies & TVN_MASK;
1251 do {
1252 list_for_each_entry(nte, varp->vec + slot, entry) {
1253 if (tbase_get_deferrable(nte->base))
1254 continue;
1255
1256 found = 1;
1257 if (time_before(nte->expires, expires))
1258 expires = nte->expires;
1259 }
1260
1261
1262
1263
1264 if (found) {
1265
1266 if (!index || slot < index)
1267 break;
1268 return expires;
1269 }
1270 slot = (slot + 1) & TVN_MASK;
1271 } while (slot != index);
1272
1273 if (index)
1274 timer_jiffies += TVN_SIZE - index;
1275 timer_jiffies >>= TVN_BITS;
1276 }
1277 return expires;
1278}
1279
1280
1281
1282
1283
1284static unsigned long cmp_next_hrtimer_event(unsigned long now,
1285 unsigned long expires)
1286{
1287 ktime_t hr_delta = hrtimer_get_next_event();
1288 struct timespec tsdelta;
1289 unsigned long delta;
1290
1291 if (hr_delta.tv64 == KTIME_MAX)
1292 return expires;
1293
1294
1295
1296
1297 if (hr_delta.tv64 <= 0)
1298 return now + 1;
1299
1300 tsdelta = ktime_to_timespec(hr_delta);
1301 delta = timespec_to_jiffies(&tsdelta);
1302
1303
1304
1305
1306
1307 if (delta > NEXT_TIMER_MAX_DELTA)
1308 delta = NEXT_TIMER_MAX_DELTA;
1309
1310
1311
1312
1313
1314
1315
1316 if (delta < 1)
1317 delta = 1;
1318 now += delta;
1319 if (time_before(now, expires))
1320 return now;
1321 return expires;
1322}
1323
1324
1325
1326
1327
1328unsigned long get_next_timer_interrupt(unsigned long now)
1329{
1330 struct tvec_base *base = __this_cpu_read(tvec_bases);
1331 unsigned long expires = now + NEXT_TIMER_MAX_DELTA;
1332
1333
1334
1335
1336
1337 if (cpu_is_offline(smp_processor_id()))
1338 return expires;
1339
1340 spin_lock(&base->lock);
1341 if (base->active_timers) {
1342 if (time_before_eq(base->next_timer, base->timer_jiffies))
1343 base->next_timer = __next_timer_interrupt(base);
1344 expires = base->next_timer;
1345 }
1346 spin_unlock(&base->lock);
1347
1348 if (time_before_eq(expires, now))
1349 return now;
1350
1351 return cmp_next_hrtimer_event(now, expires);
1352}
1353#endif
1354
1355
1356
1357
1358
1359void update_process_times(int user_tick)
1360{
1361 struct task_struct *p = current;
1362 int cpu = smp_processor_id();
1363
1364
1365 account_process_tick(p, user_tick);
1366 run_local_timers();
1367 rcu_check_callbacks(cpu, user_tick);
1368 printk_tick();
1369#ifdef CONFIG_IRQ_WORK
1370 if (in_irq())
1371 irq_work_run();
1372#endif
1373 scheduler_tick();
1374 run_posix_cpu_timers(p);
1375}
1376
1377
1378
1379
1380static void run_timer_softirq(struct softirq_action *h)
1381{
1382 struct tvec_base *base = __this_cpu_read(tvec_bases);
1383
1384 hrtimer_run_pending();
1385
1386 if (time_after_eq(jiffies, base->timer_jiffies))
1387 __run_timers(base);
1388}
1389
1390
1391
1392
1393void run_local_timers(void)
1394{
1395 hrtimer_run_queues();
1396 raise_softirq(TIMER_SOFTIRQ);
1397}
1398
1399#ifdef __ARCH_WANT_SYS_ALARM
1400
1401
1402
1403
1404
1405SYSCALL_DEFINE1(alarm, unsigned int, seconds)
1406{
1407 return alarm_setitimer(seconds);
1408}
1409
1410#endif
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421SYSCALL_DEFINE0(getpid)
1422{
1423 return task_tgid_vnr(current);
1424}
1425
1426
1427
1428
1429
1430
1431
1432SYSCALL_DEFINE0(getppid)
1433{
1434 int pid;
1435
1436 rcu_read_lock();
1437 pid = task_tgid_vnr(rcu_dereference(current->real_parent));
1438 rcu_read_unlock();
1439
1440 return pid;
1441}
1442
1443SYSCALL_DEFINE0(getuid)
1444{
1445
1446 return from_kuid_munged(current_user_ns(), current_uid());
1447}
1448
1449SYSCALL_DEFINE0(geteuid)
1450{
1451
1452 return from_kuid_munged(current_user_ns(), current_euid());
1453}
1454
1455SYSCALL_DEFINE0(getgid)
1456{
1457
1458 return from_kgid_munged(current_user_ns(), current_gid());
1459}
1460
1461SYSCALL_DEFINE0(getegid)
1462{
1463
1464 return from_kgid_munged(current_user_ns(), current_egid());
1465}
1466
1467static void process_timeout(unsigned long __data)
1468{
1469 wake_up_process((struct task_struct *)__data);
1470}
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498signed long __sched schedule_timeout(signed long timeout)
1499{
1500 struct timer_list timer;
1501 unsigned long expire;
1502
1503 switch (timeout)
1504 {
1505 case MAX_SCHEDULE_TIMEOUT:
1506
1507
1508
1509
1510
1511
1512
1513 schedule();
1514 goto out;
1515 default:
1516
1517
1518
1519
1520
1521
1522
1523 if (timeout < 0) {
1524 printk(KERN_ERR "schedule_timeout: wrong timeout "
1525 "value %lx\n", timeout);
1526 dump_stack();
1527 current->state = TASK_RUNNING;
1528 goto out;
1529 }
1530 }
1531
1532 expire = timeout + jiffies;
1533
1534 setup_timer_on_stack(&timer, process_timeout, (unsigned long)current);
1535 __mod_timer(&timer, expire, false, TIMER_NOT_PINNED);
1536 schedule();
1537 del_singleshot_timer_sync(&timer);
1538
1539
1540 destroy_timer_on_stack(&timer);
1541
1542 timeout = expire - jiffies;
1543
1544 out:
1545 return timeout < 0 ? 0 : timeout;
1546}
1547EXPORT_SYMBOL(schedule_timeout);
1548
1549
1550
1551
1552
1553signed long __sched schedule_timeout_interruptible(signed long timeout)
1554{
1555 __set_current_state(TASK_INTERRUPTIBLE);
1556 return schedule_timeout(timeout);
1557}
1558EXPORT_SYMBOL(schedule_timeout_interruptible);
1559
1560signed long __sched schedule_timeout_killable(signed long timeout)
1561{
1562 __set_current_state(TASK_KILLABLE);
1563 return schedule_timeout(timeout);
1564}
1565EXPORT_SYMBOL(schedule_timeout_killable);
1566
1567signed long __sched schedule_timeout_uninterruptible(signed long timeout)
1568{
1569 __set_current_state(TASK_UNINTERRUPTIBLE);
1570 return schedule_timeout(timeout);
1571}
1572EXPORT_SYMBOL(schedule_timeout_uninterruptible);
1573
1574
1575SYSCALL_DEFINE0(gettid)
1576{
1577 return task_pid_vnr(current);
1578}
1579
1580
1581
1582
1583
1584int do_sysinfo(struct sysinfo *info)
1585{
1586 unsigned long mem_total, sav_total;
1587 unsigned int mem_unit, bitcount;
1588 struct timespec tp;
1589
1590 memset(info, 0, sizeof(struct sysinfo));
1591
1592 ktime_get_ts(&tp);
1593 monotonic_to_bootbased(&tp);
1594 info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);
1595
1596 get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);
1597
1598 info->procs = nr_threads;
1599
1600 si_meminfo(info);
1601 si_swapinfo(info);
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612 mem_total = info->totalram + info->totalswap;
1613 if (mem_total < info->totalram || mem_total < info->totalswap)
1614 goto out;
1615 bitcount = 0;
1616 mem_unit = info->mem_unit;
1617 while (mem_unit > 1) {
1618 bitcount++;
1619 mem_unit >>= 1;
1620 sav_total = mem_total;
1621 mem_total <<= 1;
1622 if (mem_total < sav_total)
1623 goto out;
1624 }
1625
1626
1627
1628
1629
1630
1631
1632
1633 info->mem_unit = 1;
1634 info->totalram <<= bitcount;
1635 info->freeram <<= bitcount;
1636 info->sharedram <<= bitcount;
1637 info->bufferram <<= bitcount;
1638 info->totalswap <<= bitcount;
1639 info->freeswap <<= bitcount;
1640 info->totalhigh <<= bitcount;
1641 info->freehigh <<= bitcount;
1642
1643out:
1644 return 0;
1645}
1646
1647SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info)
1648{
1649 struct sysinfo val;
1650
1651 do_sysinfo(&val);
1652
1653 if (copy_to_user(info, &val, sizeof(struct sysinfo)))
1654 return -EFAULT;
1655
1656 return 0;
1657}
1658
1659static int __cpuinit init_timers_cpu(int cpu)
1660{
1661 int j;
1662 struct tvec_base *base;
1663 static char __cpuinitdata tvec_base_done[NR_CPUS];
1664
1665 if (!tvec_base_done[cpu]) {
1666 static char boot_done;
1667
1668 if (boot_done) {
1669
1670
1671
1672 base = kmalloc_node(sizeof(*base),
1673 GFP_KERNEL | __GFP_ZERO,
1674 cpu_to_node(cpu));
1675 if (!base)
1676 return -ENOMEM;
1677
1678
1679 if (tbase_get_deferrable(base)) {
1680 WARN_ON(1);
1681 kfree(base);
1682 return -ENOMEM;
1683 }
1684 per_cpu(tvec_bases, cpu) = base;
1685 } else {
1686
1687
1688
1689
1690
1691
1692 boot_done = 1;
1693 base = &boot_tvec_bases;
1694 }
1695 tvec_base_done[cpu] = 1;
1696 } else {
1697 base = per_cpu(tvec_bases, cpu);
1698 }
1699
1700 spin_lock_init(&base->lock);
1701
1702 for (j = 0; j < TVN_SIZE; j++) {
1703 INIT_LIST_HEAD(base->tv5.vec + j);
1704 INIT_LIST_HEAD(base->tv4.vec + j);
1705 INIT_LIST_HEAD(base->tv3.vec + j);
1706 INIT_LIST_HEAD(base->tv2.vec + j);
1707 }
1708 for (j = 0; j < TVR_SIZE; j++)
1709 INIT_LIST_HEAD(base->tv1.vec + j);
1710
1711 base->timer_jiffies = jiffies;
1712 base->next_timer = base->timer_jiffies;
1713 base->active_timers = 0;
1714 return 0;
1715}
1716
1717#ifdef CONFIG_HOTPLUG_CPU
1718static void migrate_timer_list(struct tvec_base *new_base, struct list_head *head)
1719{
1720 struct timer_list *timer;
1721
1722 while (!list_empty(head)) {
1723 timer = list_first_entry(head, struct timer_list, entry);
1724
1725 detach_timer(timer, false);
1726 timer_set_base(timer, new_base);
1727 internal_add_timer(new_base, timer);
1728 }
1729}
1730
1731static void __cpuinit migrate_timers(int cpu)
1732{
1733 struct tvec_base *old_base;
1734 struct tvec_base *new_base;
1735 int i;
1736
1737 BUG_ON(cpu_online(cpu));
1738 old_base = per_cpu(tvec_bases, cpu);
1739 new_base = get_cpu_var(tvec_bases);
1740
1741
1742
1743
1744 spin_lock_irq(&new_base->lock);
1745 spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
1746
1747 BUG_ON(old_base->running_timer);
1748
1749 for (i = 0; i < TVR_SIZE; i++)
1750 migrate_timer_list(new_base, old_base->tv1.vec + i);
1751 for (i = 0; i < TVN_SIZE; i++) {
1752 migrate_timer_list(new_base, old_base->tv2.vec + i);
1753 migrate_timer_list(new_base, old_base->tv3.vec + i);
1754 migrate_timer_list(new_base, old_base->tv4.vec + i);
1755 migrate_timer_list(new_base, old_base->tv5.vec + i);
1756 }
1757
1758 spin_unlock(&old_base->lock);
1759 spin_unlock_irq(&new_base->lock);
1760 put_cpu_var(tvec_bases);
1761}
1762#endif
1763
1764static int __cpuinit timer_cpu_notify(struct notifier_block *self,
1765 unsigned long action, void *hcpu)
1766{
1767 long cpu = (long)hcpu;
1768 int err;
1769
1770 switch(action) {
1771 case CPU_UP_PREPARE:
1772 case CPU_UP_PREPARE_FROZEN:
1773 err = init_timers_cpu(cpu);
1774 if (err < 0)
1775 return notifier_from_errno(err);
1776 break;
1777#ifdef CONFIG_HOTPLUG_CPU
1778 case CPU_DEAD:
1779 case CPU_DEAD_FROZEN:
1780 migrate_timers(cpu);
1781 break;
1782#endif
1783 default:
1784 break;
1785 }
1786 return NOTIFY_OK;
1787}
1788
1789static struct notifier_block __cpuinitdata timers_nb = {
1790 .notifier_call = timer_cpu_notify,
1791};
1792
1793
1794void __init init_timers(void)
1795{
1796 int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE,
1797 (void *)(long)smp_processor_id());
1798
1799 init_timer_stats();
1800
1801 BUG_ON(err != NOTIFY_OK);
1802 register_cpu_notifier(&timers_nb);
1803 open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
1804}
1805
1806
1807
1808
1809
1810void msleep(unsigned int msecs)
1811{
1812 unsigned long timeout = msecs_to_jiffies(msecs) + 1;
1813
1814 while (timeout)
1815 timeout = schedule_timeout_uninterruptible(timeout);
1816}
1817
1818EXPORT_SYMBOL(msleep);
1819
1820
1821
1822
1823
1824unsigned long msleep_interruptible(unsigned int msecs)
1825{
1826 unsigned long timeout = msecs_to_jiffies(msecs) + 1;
1827
1828 while (timeout && !signal_pending(current))
1829 timeout = schedule_timeout_interruptible(timeout);
1830 return jiffies_to_msecs(timeout);
1831}
1832
1833EXPORT_SYMBOL(msleep_interruptible);
1834
1835static int __sched do_usleep_range(unsigned long min, unsigned long max)
1836{
1837 ktime_t kmin;
1838 unsigned long delta;
1839
1840 kmin = ktime_set(0, min * NSEC_PER_USEC);
1841 delta = (max - min) * NSEC_PER_USEC;
1842 return schedule_hrtimeout_range(&kmin, delta, HRTIMER_MODE_REL);
1843}
1844
1845
1846
1847
1848
1849
1850void usleep_range(unsigned long min, unsigned long max)
1851{
1852 __set_current_state(TASK_UNINTERRUPTIBLE);
1853 do_usleep_range(min, max);
1854}
1855EXPORT_SYMBOL(usleep_range);
1856