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