Linux内核计时器init_timer。如果多次打电话怎么办?

时间:2014-04-30 22:24:09

标签: linux timer linux-kernel linux-device-driver embedded-linux

我正在尝试在get_next_timer_interrupt()代码周围捕获一个导致PC间歇性崩溃的错误,有时在run_timer_softirq()

我发现一个驱动程序可能通常使用传递给它的相同静态参数调用init_timer()。 (timer_list)

这会引起问题吗?

init_timer究竟做了什么,是否有一个反向破坏它的函数?

由于

1 个答案:

答案 0 :(得分:2)

多次调用init_timer()不应该导致任何问题。最终调用的代码is

621 static void do_init_timer(struct timer_list *timer, unsigned int flags,
622                           const char *name, struct lock_class_key *key)
623 {
624         struct tvec_base *base = __raw_get_cpu_var(tvec_bases);
625 
626         timer->entry.next = NULL;
627         timer->base = (void *)((unsigned long)base | flags);
628         timer->slack = -1;
629 #ifdef CONFIG_TIMER_STATS
630         timer->start_site = NULL;
631         timer->start_pid = -1;
632         memset(timer->start_comm, 0, TASK_COMM_LEN);
633 #endif
634         lockdep_init_map(&timer->lockdep_map, name, key, 0);
635 }

由一些调用它的宏调用它。开始here以跟进流程。