【问题标题】:Linux kernel timer init_timer. What happens if called many times?Linux 内核定时器 init_timer。如果多次调用会发生什么?
【发布时间】:2026-01-06 23:10:01
【问题描述】:
我正在尝试寻找一个错误,该错误会导致 PC 在 get_next_timer_interrupt() 代码周围以及有时在 run_timer_softirq() 出现间歇性崩溃
我发现一个驱动程序可能调用 init_timer() 并且经常使用相同的静态参数传递给它。 (timer_list)
这会导致问题吗?
init_timer 究竟做了什么,是否有一个函数可以反过来破坏它?
谢谢
【问题讨论】:
标签:
linux
timer
linux-kernel
linux-device-driver
embedded-linux
【解决方案1】:
多次调用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 跟随流程。