首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核计时器函数中的add_timer不需要调度吗?

内核计时器函数中的add_timer不需要调度吗?
EN

Stack Overflow用户
提问于 2016-05-25 00:47:53
回答 2查看 684关注 0票数 0

当我们使用内核定时器时,内核定时器在软件中断中运行,所以内核定时器函数在定时器中断上下文中运行。

代码语言:javascript
复制
void timer_func(unsigned long arg)
{
    my_timer.expires = jiffies + HZ;
    add_timer(&my_timer);
}

那么add_timer()内核中的定时器函数不需要调度吗?因为在中断上下文中调度被禁用。

EN

回答 2

Stack Overflow用户

发布于 2016-05-25 03:28:33

可以,add_timer函数可以在中断上下文中使用。在计时器回调函数中调用它是重复做某些事情的标准方式。

票数 1
EN

Stack Overflow用户

发布于 2016-05-25 10:36:34

我认为OP的意思是“为什么它在中断ctx中工作?”因此,add_timer()本身并不直接调用schedule();它调用mod_timer():

代码语言:javascript
复制
void add_timer(struct timer_list *timer)
{
    BUG_ON(timer_pending(timer));
    mod_timer(timer, timer->expires);
}
EXPORT_SYMBOL(add_timer);

正如上面的代码注释所说的,这个函数清楚地表明:

代码语言:javascript
复制
"...
 * The kernel will do a ->function(->data) callback from the
 * timer interrupt at the ->expires point in the future. The
 * current time is 'jiffies'.
..."

因此,它不会直接调用schedule();它将在到期时调用计时器函数。请注意,计时器功能在(软)中断上下文中运行,因此不要执行任何将直接或间接调用schedule()的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37419510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档