Lines Matching refs:timer

124 timer_set_base(struct timer_list *timer, struct tvec_base *new_base)  in timer_set_base()  argument
126 unsigned long flags = (unsigned long)timer->base & TIMER_FLAG_MASK; in timer_set_base()
128 timer->base = (struct tvec_base *)((unsigned long)(new_base) | flags); in timer_set_base()
346 void set_timer_slack(struct timer_list *timer, int slack_hz) in set_timer_slack() argument
348 timer->slack = slack_hz; in set_timer_slack()
367 __internal_add_timer(struct tvec_base *base, struct timer_list *timer) in __internal_add_timer() argument
369 unsigned long expires = timer->expires; in __internal_add_timer()
407 list_add_tail(&timer->entry, vec); in __internal_add_timer()
410 static void internal_add_timer(struct tvec_base *base, struct timer_list *timer) in internal_add_timer() argument
413 __internal_add_timer(base, timer); in internal_add_timer()
417 if (!tbase_get_deferrable(timer->base)) { in internal_add_timer()
419 time_before(timer->expires, base->next_timer)) in internal_add_timer()
420 base->next_timer = timer->expires; in internal_add_timer()
442 void __timer_stats_timer_set_start_info(struct timer_list *timer, void *addr) in __timer_stats_timer_set_start_info() argument
444 if (timer->start_site) in __timer_stats_timer_set_start_info()
447 timer->start_site = addr; in __timer_stats_timer_set_start_info()
448 memcpy(timer->start_comm, current->comm, TASK_COMM_LEN); in __timer_stats_timer_set_start_info()
449 timer->start_pid = current->pid; in __timer_stats_timer_set_start_info()
452 static void timer_stats_account_timer(struct timer_list *timer) in timer_stats_account_timer() argument
456 if (likely(!timer->start_site)) in timer_stats_account_timer()
458 if (unlikely(tbase_get_deferrable(timer->base))) in timer_stats_account_timer()
461 timer_stats_update_stats(timer, timer->start_pid, timer->start_site, in timer_stats_account_timer()
462 timer->function, timer->start_comm, flag); in timer_stats_account_timer()
466 static void timer_stats_account_timer(struct timer_list *timer) {} in timer_stats_account_timer() argument
484 struct timer_list *timer = addr; in timer_fixup_init() local
488 del_timer_sync(timer); in timer_fixup_init()
489 debug_object_init(timer, &timer_debug_descr); in timer_fixup_init()
509 struct timer_list *timer = addr; in timer_fixup_activate() local
519 if (timer->entry.next == NULL && in timer_fixup_activate()
520 timer->entry.prev == TIMER_ENTRY_STATIC) { in timer_fixup_activate()
521 debug_object_init(timer, &timer_debug_descr); in timer_fixup_activate()
522 debug_object_activate(timer, &timer_debug_descr); in timer_fixup_activate()
525 setup_timer(timer, stub_timer, 0); in timer_fixup_activate()
544 struct timer_list *timer = addr; in timer_fixup_free() local
548 del_timer_sync(timer); in timer_fixup_free()
549 debug_object_free(timer, &timer_debug_descr); in timer_fixup_free()
562 struct timer_list *timer = addr; in timer_fixup_assert_init() local
566 if (timer->entry.prev == TIMER_ENTRY_STATIC) { in timer_fixup_assert_init()
572 debug_object_init(timer, &timer_debug_descr); in timer_fixup_assert_init()
575 setup_timer(timer, stub_timer, 0); in timer_fixup_assert_init()
592 static inline void debug_timer_init(struct timer_list *timer) in debug_timer_init() argument
594 debug_object_init(timer, &timer_debug_descr); in debug_timer_init()
597 static inline void debug_timer_activate(struct timer_list *timer) in debug_timer_activate() argument
599 debug_object_activate(timer, &timer_debug_descr); in debug_timer_activate()
602 static inline void debug_timer_deactivate(struct timer_list *timer) in debug_timer_deactivate() argument
604 debug_object_deactivate(timer, &timer_debug_descr); in debug_timer_deactivate()
607 static inline void debug_timer_free(struct timer_list *timer) in debug_timer_free() argument
609 debug_object_free(timer, &timer_debug_descr); in debug_timer_free()
612 static inline void debug_timer_assert_init(struct timer_list *timer) in debug_timer_assert_init() argument
614 debug_object_assert_init(timer, &timer_debug_descr); in debug_timer_assert_init()
617 static void do_init_timer(struct timer_list *timer, unsigned int flags,
620 void init_timer_on_stack_key(struct timer_list *timer, unsigned int flags, in init_timer_on_stack_key() argument
623 debug_object_init_on_stack(timer, &timer_debug_descr); in init_timer_on_stack_key()
624 do_init_timer(timer, flags, name, key); in init_timer_on_stack_key()
628 void destroy_timer_on_stack(struct timer_list *timer) in destroy_timer_on_stack() argument
630 debug_object_free(timer, &timer_debug_descr); in destroy_timer_on_stack()
635 static inline void debug_timer_init(struct timer_list *timer) { } in debug_timer_init() argument
636 static inline void debug_timer_activate(struct timer_list *timer) { } in debug_timer_activate() argument
637 static inline void debug_timer_deactivate(struct timer_list *timer) { } in debug_timer_deactivate() argument
638 static inline void debug_timer_assert_init(struct timer_list *timer) { } in debug_timer_assert_init() argument
641 static inline void debug_init(struct timer_list *timer) in debug_init() argument
643 debug_timer_init(timer); in debug_init()
644 trace_timer_init(timer); in debug_init()
648 debug_activate(struct timer_list *timer, unsigned long expires) in debug_activate() argument
650 debug_timer_activate(timer); in debug_activate()
651 trace_timer_start(timer, expires); in debug_activate()
654 static inline void debug_deactivate(struct timer_list *timer) in debug_deactivate() argument
656 debug_timer_deactivate(timer); in debug_deactivate()
657 trace_timer_cancel(timer); in debug_deactivate()
660 static inline void debug_assert_init(struct timer_list *timer) in debug_assert_init() argument
662 debug_timer_assert_init(timer); in debug_assert_init()
665 static void do_init_timer(struct timer_list *timer, unsigned int flags, in do_init_timer() argument
670 timer->entry.next = NULL; in do_init_timer()
671 timer->base = (void *)((unsigned long)base | flags); in do_init_timer()
672 timer->slack = -1; in do_init_timer()
674 timer->start_site = NULL; in do_init_timer()
675 timer->start_pid = -1; in do_init_timer()
676 memset(timer->start_comm, 0, TASK_COMM_LEN); in do_init_timer()
678 lockdep_init_map(&timer->lockdep_map, name, key, 0); in do_init_timer()
692 void init_timer_key(struct timer_list *timer, unsigned int flags, in init_timer_key() argument
695 debug_init(timer); in init_timer_key()
696 do_init_timer(timer, flags, name, key); in init_timer_key()
700 static inline void detach_timer(struct timer_list *timer, bool clear_pending) in detach_timer() argument
702 struct list_head *entry = &timer->entry; in detach_timer()
704 debug_deactivate(timer); in detach_timer()
713 detach_expired_timer(struct timer_list *timer, struct tvec_base *base) in detach_expired_timer() argument
715 detach_timer(timer, true); in detach_expired_timer()
716 if (!tbase_get_deferrable(timer->base)) in detach_expired_timer()
722 static int detach_if_pending(struct timer_list *timer, struct tvec_base *base, in detach_if_pending() argument
725 if (!timer_pending(timer)) in detach_if_pending()
728 detach_timer(timer, clear_pending); in detach_if_pending()
729 if (!tbase_get_deferrable(timer->base)) { in detach_if_pending()
731 if (timer->expires == base->next_timer) in detach_if_pending()
751 static struct tvec_base *lock_timer_base(struct timer_list *timer, in lock_timer_base() argument
753 __acquires(timer->base->lock) in lock_timer_base()
758 struct tvec_base *prelock_base = timer->base; in lock_timer_base()
762 if (likely(prelock_base == timer->base)) in lock_timer_base()
772 __mod_timer(struct timer_list *timer, unsigned long expires, in __mod_timer() argument
779 timer_stats_timer_set_start_info(timer); in __mod_timer()
780 BUG_ON(!timer->function); in __mod_timer()
782 base = lock_timer_base(timer, &flags); in __mod_timer()
784 ret = detach_if_pending(timer, base, false); in __mod_timer()
788 debug_activate(timer, expires); in __mod_timer()
801 if (likely(base->running_timer != timer)) { in __mod_timer()
803 timer_set_base(timer, NULL); in __mod_timer()
807 timer_set_base(timer, base); in __mod_timer()
811 timer->expires = expires; in __mod_timer()
812 internal_add_timer(base, timer); in __mod_timer()
830 int mod_timer_pending(struct timer_list *timer, unsigned long expires) in mod_timer_pending() argument
832 return __mod_timer(timer, expires, true, TIMER_NOT_PINNED); in mod_timer_pending()
847 unsigned long apply_slack(struct timer_list *timer, unsigned long expires) in apply_slack() argument
852 if (timer->slack >= 0) { in apply_slack()
853 expires_limit = expires + timer->slack; in apply_slack()
895 int mod_timer(struct timer_list *timer, unsigned long expires) in mod_timer() argument
897 expires = apply_slack(timer, expires); in mod_timer()
904 if (timer_pending(timer) && timer->expires == expires) in mod_timer()
907 return __mod_timer(timer, expires, false, TIMER_NOT_PINNED); in mod_timer()
930 int mod_timer_pinned(struct timer_list *timer, unsigned long expires) in mod_timer_pinned() argument
932 if (timer->expires == expires && timer_pending(timer)) in mod_timer_pinned()
935 return __mod_timer(timer, expires, false, TIMER_PINNED); in mod_timer_pinned()
953 void add_timer(struct timer_list *timer) in add_timer() argument
955 BUG_ON(timer_pending(timer)); in add_timer()
956 mod_timer(timer, timer->expires); in add_timer()
967 void add_timer_on(struct timer_list *timer, int cpu) in add_timer_on() argument
972 timer_stats_timer_set_start_info(timer); in add_timer_on()
973 BUG_ON(timer_pending(timer) || !timer->function); in add_timer_on()
975 timer_set_base(timer, base); in add_timer_on()
976 debug_activate(timer, timer->expires); in add_timer_on()
977 internal_add_timer(base, timer); in add_timer_on()
993 int del_timer(struct timer_list *timer) in del_timer() argument
999 debug_assert_init(timer); in del_timer()
1001 timer_stats_timer_clear_start_info(timer); in del_timer()
1002 if (timer_pending(timer)) { in del_timer()
1003 base = lock_timer_base(timer, &flags); in del_timer()
1004 ret = detach_if_pending(timer, base, true); in del_timer()
1019 int try_to_del_timer_sync(struct timer_list *timer) in try_to_del_timer_sync() argument
1025 debug_assert_init(timer); in try_to_del_timer_sync()
1027 base = lock_timer_base(timer, &flags); in try_to_del_timer_sync()
1029 if (base->running_timer != timer) { in try_to_del_timer_sync()
1030 timer_stats_timer_clear_start_info(timer); in try_to_del_timer_sync()
1031 ret = detach_if_pending(timer, base, true); in try_to_del_timer_sync()
1078 int del_timer_sync(struct timer_list *timer) in del_timer_sync() argument
1088 lock_map_acquire(&timer->lockdep_map); in del_timer_sync()
1089 lock_map_release(&timer->lockdep_map); in del_timer_sync()
1096 WARN_ON(in_irq() && !tbase_get_irqsafe(timer->base)); in del_timer_sync()
1098 int ret = try_to_del_timer_sync(timer); in del_timer_sync()
1110 struct timer_list *timer, *tmp; in cascade() local
1119 list_for_each_entry_safe(timer, tmp, &tv_list, entry) { in cascade()
1120 BUG_ON(tbase_get_base(timer->base) != base); in cascade()
1122 __internal_add_timer(base, timer); in cascade()
1128 static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long), in call_timer_fn() argument
1143 lockdep_copy_map(&lockdep_map, &timer->lockdep_map); in call_timer_fn()
1152 trace_timer_expire_entry(timer); in call_timer_fn()
1154 trace_timer_expire_exit(timer); in call_timer_fn()
1182 struct timer_list *timer; in __run_timers() local
1209 timer = list_first_entry(head, struct timer_list,entry); in __run_timers()
1210 fn = timer->function; in __run_timers()
1211 data = timer->data; in __run_timers()
1212 irqsafe = tbase_get_irqsafe(timer->base); in __run_timers()
1214 timer_stats_account_timer(timer); in __run_timers()
1216 base->running_timer = timer; in __run_timers()
1217 detach_expired_timer(timer, base); in __run_timers()
1221 call_timer_fn(timer, fn, data); in __run_timers()
1225 call_timer_fn(timer, fn, data); in __run_timers()
1473 struct timer_list timer; in schedule_timeout() local
1507 setup_timer_on_stack(&timer, process_timeout, (unsigned long)current); in schedule_timeout()
1508 __mod_timer(&timer, expire, false, TIMER_NOT_PINNED); in schedule_timeout()
1510 del_singleshot_timer_sync(&timer); in schedule_timeout()
1513 destroy_timer_on_stack(&timer); in schedule_timeout()
1550 struct timer_list *timer; in migrate_timer_list() local
1553 timer = list_first_entry(head, struct timer_list, entry); in migrate_timer_list()
1555 detach_timer(timer, false); in migrate_timer_list()
1556 timer_set_base(timer, new_base); in migrate_timer_list()
1557 internal_add_timer(new_base, timer); in migrate_timer_list()