对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。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值