我是靠谱客的博主 聪慧花卷,这篇文章主要介绍对internal_add_timer 的疑惑,现在分享给大家,希望可以做个参考。

static inline void internal_add_timer(struct timer_list *timer)
{
 /*
 * must be cli-ed when calling this
 */
 unsigned long expires = timer->expires;
 unsigned long idx = expires - timer_jiffies;

 if (idx < TVR_SIZE) {
 int i = expires & TVR_MASK;
 insert_timer(timer, tv1.vec, i);
 } else if (idx < 1 << (TVR_BITS + TVN_BITS)) {
 int i = (expires >> TVR_BITS) & TVN_MASK;
 insert_timer(timer, tv2.vec, i);
 } else if (idx < 1 << (TVR_BITS + 2 * TVN_BITS)) {
 int i = (expires >> (TVR_BITS + TVN_BITS)) & TVN_MASK;
 insert_timer(timer, tv3.vec, i);
 } else if (idx < 1 << (TVR_BITS + 3 * TVN_BITS)) {
 int i = (expires >> (TVR_BITS + 2 * TVN_BITS)) & TVN_MASK;
 insert_timer(timer, tv4.vec, i);
 } else if (expires < timer_jiffies) {
 /* can happen if you add a timer with expires == jiffies,
 * or you set a timer to go off in the past
 */
 insert_timer(timer, tv1.vec, tv1.index);
 } else if (idx < 0xffffffffUL) {
 int i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK;
 insert_timer(timer, tv5.vec, i);
 } else {
 /* Can only get here on architectures with 64-bit jiffies */
 timer->next = timer->prev = timer;
 }
}

在动态定时器部分的函数internal_add_timer把一个timer插入到tvecs的某一个成员中,我对他插入数组的位置有些疑惑。
假定插入的timer在256个ticks之内到时,这样就会插入到tv1中,插入的数组位置索引是 idx = timer->expires - timer_jiffies。 但我的理解是idx应该是未来多少个ticks后这个timer到时,插入的位置应该是(tv1.index+idx)&255。

 

最后

以上就是聪慧花卷最近收集整理的关于对internal_add_timer 的疑惑的全部内容,更多相关对internal_add_timer内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(151)

评论列表共有 0 条评论

立即
投稿
返回
顶部