当我们使用内核定时器时,内核定时器在软件中断中运行,因此内核定时器功能在定时器中断上下文中运行。
void timer_func(unsigned long arg)
{
my_timer.expires = jiffies + HZ;
add_timer(&my_timer);
}
那么内核定时器函数内的add_timer()
不需要调度吗?
因为在中断上下文调度被禁用。
答案 0 :(得分:1)
是的,Route::get ('password/email', 'Auth\PasswordController@getEmail');
Route::post('password/email', 'Auth\PasswordController@postEmail');
// Password reset routes...
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController');
函数可用于中断上下文。在计时器回调函数中调用它是重复执行某些操作的标准方法。
答案 1 :(得分:0)
我认为OP意味着“它如何在中断ctx中运行?”。 因此,add_timer()本身不会直接调用schedule();它调用mod_timer():
void add_timer(struct timer_list *timer)
{
BUG_ON(timer_pending(timer));
mod_timer(timer, timer->expires);
}
EXPORT_SYMBOL(add_timer);
并且正如上面的代码注释所显示的那样:
"...
* 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()的事情。