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