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 new_base = __get_cpu_var(tvec_bases);
660
661 cpu = smp_processor_id();
662
663#if defined(CONFIG_NO_HZ) && defined(CONFIG_SMP)
664 if (!pinned && get_sysctl_timer_migration() && idle_cpu(cpu)) {
665 int preferred_cpu = get_nohz_load_balancer();
666
667 if (preferred_cpu >= 0)
668 cpu = preferred_cpu;
669 }
670#endif
671 new_base = per_cpu(tvec_bases, cpu);
672
673 if (base != new_base) {
674
675
676
677
678
679
680
681 if (likely(base->running_timer != timer)) {
682
683 timer_set_base(timer, NULL);
684 spin_unlock(&base->lock);
685 base = new_base;
686 spin_lock(&base->lock);
687 timer_set_base(timer, base);
688 }
689 }
690
691 timer->expires = expires;
692 if (time_before(timer->expires, base->next_timer) &&
693 !tbase_get_deferrable(timer->base))
694 base->next_timer = timer->expires;
695 internal_add_timer(base, timer);
696
697out_unlock:
698 spin_unlock_irqrestore(&base->lock, flags);
699
700 return ret;
701}
702
703
704
705
706
707
708
709
710
711
712
713int mod_timer_pending(struct timer_list *timer, unsigned long expires)
714{
715 return __mod_timer(timer, expires, true, TIMER_NOT_PINNED);
716}
717EXPORT_SYMBOL(mod_timer_pending);
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739int mod_timer(struct timer_list *timer, unsigned long expires)
740{
741
742
743
744
745
746 if (timer_pending(timer) && timer->expires == expires)
747 return 1;
748
749 return __mod_timer(timer, expires, false, TIMER_NOT_PINNED);
750}
751EXPORT_SYMBOL(mod_timer);
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766int mod_timer_pinned(struct timer_list *timer, unsigned long expires)
767{
768 if (timer->expires == expires && timer_pending(timer))
769 return 1;
770
771 return __mod_timer(timer, expires, false, TIMER_PINNED);
772}
773EXPORT_SYMBOL(mod_timer_pinned);
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789void add_timer(struct timer_list *timer)
790{
791 BUG_ON(timer_pending(timer));
792 mod_timer(timer, timer->expires);
793}
794EXPORT_SYMBOL(add_timer);
795
796
797
798
799
800
801
802
803void add_timer_on(struct timer_list *timer, int cpu)
804{
805 struct tvec_base *base = per_cpu(tvec_bases, cpu);
806 unsigned long flags;
807
808 timer_stats_timer_set_start_info(timer);
809 BUG_ON(timer_pending(timer) || !timer->function);
810 spin_lock_irqsave(&base->lock, flags);
811 timer_set_base(timer, base);
812 debug_activate(timer, timer->expires);
813 if (time_before(timer->expires, base->next_timer) &&
814 !tbase_get_deferrable(timer->base))
815 base->next_timer = timer->expires;
816 internal_add_timer(base, timer);
817
818
819
820
821
822
823
824
825 wake_up_idle_cpu(cpu);
826 spin_unlock_irqrestore(&base->lock, flags);
827}
828EXPORT_SYMBOL_GPL(add_timer_on);
829
830
831
832
833
834
835
836
837
838
839
840
841int del_timer(struct timer_list *timer)
842{
843 struct tvec_base *base;
844 unsigned long flags;
845 int ret = 0;
846
847 timer_stats_timer_clear_start_info(timer);
848 if (timer_pending(timer)) {
849 base = lock_timer_base(timer, &flags);
850 if (timer_pending(timer)) {
851 detach_timer(timer, 1);
852 if (timer->expires == base->next_timer &&
853 !tbase_get_deferrable(timer->base))
854 base->next_timer = base->timer_jiffies;
855 ret = 1;
856 }
857 spin_unlock_irqrestore(&base->lock, flags);
858 }
859
860 return ret;
861}
862EXPORT_SYMBOL(del_timer);
863
864#ifdef CONFIG_SMP
865
866
867
868
869
870
871
872
873
874int try_to_del_timer_sync(struct timer_list *timer)
875{
876 struct tvec_base *base;
877 unsigned long flags;
878 int ret = -1;
879
880 base = lock_timer_base(timer, &flags);
881
882 if (base->running_timer == timer)
883 goto out;
884
885 ret = 0;
886 if (timer_pending(timer)) {
887 detach_timer(timer, 1);
888 if (timer->expires == base->next_timer &&
889 !tbase_get_deferrable(timer->base))
890 base->next_timer = base->timer_jiffies;
891 ret = 1;
892 }
893out:
894 spin_unlock_irqrestore(&base->lock, flags);
895
896 return ret;
897}
898EXPORT_SYMBOL(try_to_del_timer_sync);
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917int del_timer_sync(struct timer_list *timer)
918{
919#ifdef CONFIG_LOCKDEP
920 unsigned long flags;
921
922 local_irq_save(flags);
923 lock_map_acquire(&timer->lockdep_map);
924 lock_map_release(&timer->lockdep_map);
925 local_irq_restore(flags);
926#endif
927
928 for (;;) {
929 int ret = try_to_del_timer_sync(timer);
930 if (ret >= 0)
931 return ret;
932 cpu_relax();
933 }
934}
935EXPORT_SYMBOL(del_timer_sync);
936#endif
937
938static int cascade(struct tvec_base *base, struct tvec *tv, int index)
939{
940
941 struct timer_list *timer, *tmp;
942 struct list_head tv_list;
943
944 list_replace_init(tv->vec + index, &tv_list);
945
946
947
948
949
950 list_for_each_entry_safe(timer, tmp, &tv_list, entry) {
951 BUG_ON(tbase_get_base(timer->base) != base);
952 internal_add_timer(base, timer);
953 }
954
955 return index;
956}
957
958#define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK)
959
960
961
962
963
964
965
966
967static inline void __run_timers(struct tvec_base *base)
968{
969 struct timer_list *timer;
970
971 spin_lock_irq(&base->lock);
972 while (time_after_eq(jiffies, base->timer_jiffies)) {
973 struct list_head work_list;
974 struct list_head *head = &work_list;
975 int index = base->timer_jiffies & TVR_MASK;
976
977
978
979
980 if (!index &&
981 (!cascade(base, &base->tv2, INDEX(0))) &&
982 (!cascade(base, &base->tv3, INDEX(1))) &&
983 !cascade(base, &base->tv4, INDEX(2)))
984 cascade(base, &base->tv5, INDEX(3));
985 ++base->timer_jiffies;
986 list_replace_init(base->tv1.vec + index, &work_list);
987 while (!list_empty(head)) {
988 void (*fn)(unsigned long);
989 unsigned long data;
990
991 timer = list_first_entry(head, struct timer_list,entry);
992 fn = timer->function;
993 data = timer->data;
994
995 timer_stats_account_timer(timer);
996
997 set_running_timer(base, timer);
998 detach_timer(timer, 1);
999
1000 spin_unlock_irq(&base->lock);
1001 {
1002 int preempt_count = preempt_count();
1003
1004#ifdef CONFIG_LOCKDEP
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014 struct lockdep_map lockdep_map =
1015 timer->lockdep_map;
1016#endif
1017
1018
1019
1020
1021
1022
1023 lock_map_acquire(&lockdep_map);
1024
1025 trace_timer_expire_entry(timer);
1026 fn(data);
1027 trace_timer_expire_exit(timer);
1028
1029 lock_map_release(&lockdep_map);
1030
1031 if (preempt_count != preempt_count()) {
1032 printk(KERN_ERR "huh, entered %p "
1033 "with preempt_count %08x, exited"
1034 " with %08x?\n",
1035 fn, preempt_count,
1036 preempt_count());
1037 BUG();
1038 }
1039 }
1040 spin_lock_irq(&base->lock);
1041 }
1042 }
1043 set_running_timer(base, NULL);
1044 spin_unlock_irq(&base->lock);
1045}
1046
1047#ifdef CONFIG_NO_HZ
1048
1049
1050
1051
1052
1053static unsigned long __next_timer_interrupt(struct tvec_base *base)
1054{
1055 unsigned long timer_jiffies = base->timer_jiffies;
1056 unsigned long expires = timer_jiffies + NEXT_TIMER_MAX_DELTA;
1057 int index, slot, array, found = 0;
1058 struct timer_list *nte;
1059 struct tvec *varray[4];
1060
1061
1062 index = slot = timer_jiffies & TVR_MASK;
1063 do {
1064 list_for_each_entry(nte, base->tv1.vec + slot, entry) {
1065 if (tbase_get_deferrable(nte->base))
1066 continue;
1067
1068 found = 1;
1069 expires = nte->expires;
1070
1071 if (!index || slot < index)
1072 goto cascade;
1073 return expires;
1074 }
1075 slot = (slot + 1) & TVR_MASK;
1076 } while (slot != index);
1077
1078cascade:
1079
1080 if (index)
1081 timer_jiffies += TVR_SIZE - index;
1082 timer_jiffies >>= TVR_BITS;
1083
1084
1085 varray[0] = &base->tv2;
1086 varray[1] = &base->tv3;
1087 varray[2] = &base->tv4;
1088 varray[3] = &base->tv5;
1089
1090 for (array = 0; array < 4; array++) {
1091 struct tvec *varp = varray[array];
1092
1093 index = slot = timer_jiffies & TVN_MASK;
1094 do {
1095 list_for_each_entry(nte, varp->vec + slot, entry) {
1096 if (tbase_get_deferrable(nte->base))
1097 continue;
1098
1099 found = 1;
1100 if (time_before(nte->expires, expires))
1101 expires = nte->expires;
1102 }
1103
1104
1105
1106
1107 if (found) {
1108
1109 if (!index || slot < index)
1110 break;
1111 return expires;
1112 }
1113 slot = (slot + 1) & TVN_MASK;
1114 } while (slot != index);
1115
1116 if (index)
1117 timer_jiffies += TVN_SIZE - index;
1118 timer_jiffies >>= TVN_BITS;
1119 }
1120 return expires;
1121}
1122
1123
1124
1125
1126
1127static unsigned long cmp_next_hrtimer_event(unsigned long now,
1128 unsigned long expires)
1129{
1130 ktime_t hr_delta = hrtimer_get_next_event();
1131 struct timespec tsdelta;
1132 unsigned long delta;
1133
1134 if (hr_delta.tv64 == KTIME_MAX)
1135 return expires;
1136
1137
1138
1139
1140 if (hr_delta.tv64 <= 0)
1141 return now + 1;
1142
1143 tsdelta = ktime_to_timespec(hr_delta);
1144 delta = timespec_to_jiffies(&tsdelta);
1145
1146
1147
1148
1149
1150 if (delta > NEXT_TIMER_MAX_DELTA)
1151 delta = NEXT_TIMER_MAX_DELTA;
1152
1153
1154
1155
1156
1157
1158
1159 if (delta < 1)
1160 delta = 1;
1161 now += delta;
1162 if (time_before(now, expires))
1163 return now;
1164 return expires;
1165}
1166
1167
1168
1169
1170
1171unsigned long get_next_timer_interrupt(unsigned long now)
1172{
1173 struct tvec_base *base = __get_cpu_var(tvec_bases);
1174 unsigned long expires;
1175
1176 spin_lock(&base->lock);
1177 if (time_before_eq(base->next_timer, base->timer_jiffies))
1178 base->next_timer = __next_timer_interrupt(base);
1179 expires = base->next_timer;
1180 spin_unlock(&base->lock);
1181
1182 if (time_before_eq(expires, now))
1183 return now;
1184
1185 return cmp_next_hrtimer_event(now, expires);
1186}
1187#endif
1188
1189
1190
1191
1192
1193void update_process_times(int user_tick)
1194{
1195 struct task_struct *p = current;
1196 int cpu = smp_processor_id();
1197
1198
1199 account_process_tick(p, user_tick);
1200 run_local_timers();
1201 rcu_check_callbacks(cpu, user_tick);
1202 printk_tick();
1203 scheduler_tick();
1204 run_posix_cpu_timers(p);
1205}
1206
1207
1208
1209
1210static void run_timer_softirq(struct softirq_action *h)
1211{
1212 struct tvec_base *base = __get_cpu_var(tvec_bases);
1213
1214 perf_event_do_pending();
1215
1216 hrtimer_run_pending();
1217
1218 if (time_after_eq(jiffies, base->timer_jiffies))
1219 __run_timers(base);
1220}
1221
1222
1223
1224
1225void run_local_timers(void)
1226{
1227 hrtimer_run_queues();
1228 raise_softirq(TIMER_SOFTIRQ);
1229 softlockup_tick();
1230}
1231
1232
1233
1234
1235
1236
1237
1238void do_timer(unsigned long ticks)
1239{
1240 jiffies_64 += ticks;
1241 update_wall_time();
1242 calc_global_load();
1243}
1244
1245#ifdef __ARCH_WANT_SYS_ALARM
1246
1247
1248
1249
1250
1251SYSCALL_DEFINE1(alarm, unsigned int, seconds)
1252{
1253 return alarm_setitimer(seconds);
1254}
1255
1256#endif
1257
1258#ifndef __alpha__
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274SYSCALL_DEFINE0(getpid)
1275{
1276 return task_tgid_vnr(current);
1277}
1278
1279
1280
1281
1282
1283
1284
1285SYSCALL_DEFINE0(getppid)
1286{
1287 int pid;
1288
1289 rcu_read_lock();
1290 pid = task_tgid_vnr(current->real_parent);
1291 rcu_read_unlock();
1292
1293 return pid;
1294}
1295
1296SYSCALL_DEFINE0(getuid)
1297{
1298
1299 return current_uid();
1300}
1301
1302SYSCALL_DEFINE0(geteuid)
1303{
1304
1305 return current_euid();
1306}
1307
1308SYSCALL_DEFINE0(getgid)
1309{
1310
1311 return current_gid();
1312}
1313
1314SYSCALL_DEFINE0(getegid)
1315{
1316
1317 return current_egid();
1318}
1319
1320#endif
1321
1322static void process_timeout(unsigned long __data)
1323{
1324 wake_up_process((struct task_struct *)__data);
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
1350
1351
1352
1353signed long __sched schedule_timeout(signed long timeout)
1354{
1355 struct timer_list timer;
1356 unsigned long expire;
1357
1358 switch (timeout)
1359 {
1360 case MAX_SCHEDULE_TIMEOUT:
1361
1362
1363
1364
1365
1366
1367
1368 schedule();
1369 goto out;
1370 default:
1371
1372
1373
1374
1375
1376
1377
1378 if (timeout < 0) {
1379 printk(KERN_ERR "schedule_timeout: wrong timeout "
1380 "value %lx\n", timeout);
1381 dump_stack();
1382 current->state = TASK_RUNNING;
1383 goto out;
1384 }
1385 }
1386
1387 expire = timeout + jiffies;
1388
1389 setup_timer_on_stack(&timer, process_timeout, (unsigned long)current);
1390 __mod_timer(&timer, expire, false, TIMER_NOT_PINNED);
1391 schedule();
1392 del_singleshot_timer_sync(&timer);
1393
1394
1395 destroy_timer_on_stack(&timer);
1396
1397 timeout = expire - jiffies;
1398
1399 out:
1400 return timeout < 0 ? 0 : timeout;
1401}
1402EXPORT_SYMBOL(schedule_timeout);
1403
1404
1405
1406
1407
1408signed long __sched schedule_timeout_interruptible(signed long timeout)
1409{
1410 __set_current_state(TASK_INTERRUPTIBLE);
1411 return schedule_timeout(timeout);
1412}
1413EXPORT_SYMBOL(schedule_timeout_interruptible);
1414
1415signed long __sched schedule_timeout_killable(signed long timeout)
1416{
1417 __set_current_state(TASK_KILLABLE);
1418 return schedule_timeout(timeout);
1419}
1420EXPORT_SYMBOL(schedule_timeout_killable);
1421
1422signed long __sched schedule_timeout_uninterruptible(signed long timeout)
1423{
1424 __set_current_state(TASK_UNINTERRUPTIBLE);
1425 return schedule_timeout(timeout);
1426}
1427EXPORT_SYMBOL(schedule_timeout_uninterruptible);
1428
1429
1430SYSCALL_DEFINE0(gettid)
1431{
1432 return task_pid_vnr(current);
1433}
1434
1435
1436
1437
1438
1439int do_sysinfo(struct sysinfo *info)
1440{
1441 unsigned long mem_total, sav_total;
1442 unsigned int mem_unit, bitcount;
1443 struct timespec tp;
1444
1445 memset(info, 0, sizeof(struct sysinfo));
1446
1447 ktime_get_ts(&tp);
1448 monotonic_to_bootbased(&tp);
1449 info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);
1450
1451 get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);
1452
1453 info->procs = nr_threads;
1454
1455 si_meminfo(info);
1456 si_swapinfo(info);
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467 mem_total = info->totalram + info->totalswap;
1468 if (mem_total < info->totalram || mem_total < info->totalswap)
1469 goto out;
1470 bitcount = 0;
1471 mem_unit = info->mem_unit;
1472 while (mem_unit > 1) {
1473 bitcount++;
1474 mem_unit >>= 1;
1475 sav_total = mem_total;
1476 mem_total <<= 1;
1477 if (mem_total < sav_total)
1478 goto out;
1479 }
1480
1481
1482
1483
1484
1485
1486
1487
1488 info->mem_unit = 1;
1489 info->totalram <<= bitcount;
1490 info->freeram <<= bitcount;
1491 info->sharedram <<= bitcount;
1492 info->bufferram <<= bitcount;
1493 info->totalswap <<= bitcount;
1494 info->freeswap <<= bitcount;
1495 info->totalhigh <<= bitcount;
1496 info->freehigh <<= bitcount;
1497
1498out:
1499 return 0;
1500}
1501
1502SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info)
1503{
1504 struct sysinfo val;
1505
1506 do_sysinfo(&val);
1507
1508 if (copy_to_user(info, &val, sizeof(struct sysinfo)))
1509 return -EFAULT;
1510
1511 return 0;
1512}
1513
1514static int __cpuinit init_timers_cpu(int cpu)
1515{
1516 int j;
1517 struct tvec_base *base;
1518 static char __cpuinitdata tvec_base_done[NR_CPUS];
1519
1520 if (!tvec_base_done[cpu]) {
1521 static char boot_done;
1522
1523 if (boot_done) {
1524
1525
1526
1527 base = kmalloc_node(sizeof(*base),
1528 GFP_KERNEL | __GFP_ZERO,
1529 cpu_to_node(cpu));
1530 if (!base)
1531 return -ENOMEM;
1532
1533
1534 if (tbase_get_deferrable(base)) {
1535 WARN_ON(1);
1536 kfree(base);
1537 return -ENOMEM;
1538 }
1539 per_cpu(tvec_bases, cpu) = base;
1540 } else {
1541
1542
1543
1544
1545
1546
1547 boot_done = 1;
1548 base = &boot_tvec_bases;
1549 }
1550 tvec_base_done[cpu] = 1;
1551 } else {
1552 base = per_cpu(tvec_bases, cpu);
1553 }
1554
1555 spin_lock_init(&base->lock);
1556
1557 for (j = 0; j < TVN_SIZE; j++) {
1558 INIT_LIST_HEAD(base->tv5.vec + j);
1559 INIT_LIST_HEAD(base->tv4.vec + j);
1560 INIT_LIST_HEAD(base->tv3.vec + j);
1561 INIT_LIST_HEAD(base->tv2.vec + j);
1562 }
1563 for (j = 0; j < TVR_SIZE; j++)
1564 INIT_LIST_HEAD(base->tv1.vec + j);
1565
1566 base->timer_jiffies = jiffies;
1567 base->next_timer = base->timer_jiffies;
1568 return 0;
1569}
1570
1571#ifdef CONFIG_HOTPLUG_CPU
1572static void migrate_timer_list(struct tvec_base *new_base, struct list_head *head)
1573{
1574 struct timer_list *timer;
1575
1576 while (!list_empty(head)) {
1577 timer = list_first_entry(head, struct timer_list, entry);
1578 detach_timer(timer, 0);
1579 timer_set_base(timer, new_base);
1580 if (time_before(timer->expires, new_base->next_timer) &&
1581 !tbase_get_deferrable(timer->base))
1582 new_base->next_timer = timer->expires;
1583 internal_add_timer(new_base, timer);
1584 }
1585}
1586
1587static void __cpuinit migrate_timers(int cpu)
1588{
1589 struct tvec_base *old_base;
1590 struct tvec_base *new_base;
1591 int i;
1592
1593 BUG_ON(cpu_online(cpu));
1594 old_base = per_cpu(tvec_bases, cpu);
1595 new_base = get_cpu_var(tvec_bases);
1596
1597
1598
1599
1600 spin_lock_irq(&new_base->lock);
1601 spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
1602
1603 BUG_ON(old_base->running_timer);
1604
1605 for (i = 0; i < TVR_SIZE; i++)
1606 migrate_timer_list(new_base, old_base->tv1.vec + i);
1607 for (i = 0; i < TVN_SIZE; i++) {
1608 migrate_timer_list(new_base, old_base->tv2.vec + i);
1609 migrate_timer_list(new_base, old_base->tv3.vec + i);
1610 migrate_timer_list(new_base, old_base->tv4.vec + i);
1611 migrate_timer_list(new_base, old_base->tv5.vec + i);
1612 }
1613
1614 spin_unlock(&old_base->lock);
1615 spin_unlock_irq(&new_base->lock);
1616 put_cpu_var(tvec_bases);
1617}
1618#endif
1619
1620static int __cpuinit timer_cpu_notify(struct notifier_block *self,
1621 unsigned long action, void *hcpu)
1622{
1623 long cpu = (long)hcpu;
1624 switch(action) {
1625 case CPU_UP_PREPARE:
1626 case CPU_UP_PREPARE_FROZEN:
1627 if (init_timers_cpu(cpu) < 0)
1628 return NOTIFY_BAD;
1629 break;
1630#ifdef CONFIG_HOTPLUG_CPU
1631 case CPU_DEAD:
1632 case CPU_DEAD_FROZEN:
1633 migrate_timers(cpu);
1634 break;
1635#endif
1636 default:
1637 break;
1638 }
1639 return NOTIFY_OK;
1640}
1641
1642static struct notifier_block __cpuinitdata timers_nb = {
1643 .notifier_call = timer_cpu_notify,
1644};
1645
1646
1647void __init init_timers(void)
1648{
1649 int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE,
1650 (void *)(long)smp_processor_id());
1651
1652 init_timer_stats();
1653
1654 BUG_ON(err == NOTIFY_BAD);
1655 register_cpu_notifier(&timers_nb);
1656 open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
1657}
1658
1659
1660
1661
1662
1663void msleep(unsigned int msecs)
1664{
1665 unsigned long timeout = msecs_to_jiffies(msecs) + 1;
1666
1667 while (timeout)
1668 timeout = schedule_timeout_uninterruptible(timeout);
1669}
1670
1671EXPORT_SYMBOL(msleep);
1672
1673
1674
1675
1676
1677unsigned long msleep_interruptible(unsigned int msecs)
1678{
1679 unsigned long timeout = msecs_to_jiffies(msecs) + 1;
1680
1681 while (timeout && !signal_pending(current))
1682 timeout = schedule_timeout_interruptible(timeout);
1683 return jiffies_to_msecs(timeout);
1684}
1685
1686EXPORT_SYMBOL(msleep_interruptible);
1687