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