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