On Tue, 31 Jul 2018, Xu YiPing wrote: > On 2018/7/30 19:03, Thomas Gleixner wrote: > > > > __internal_add_timer(base, timer) > > { > > idx = calc_wheel_index(1, 1) > > { > > delta = 1 - 1; <- 0 > > > > if (0 < LVL_START(1)) > > idx = calc_index(1, 0) > > { > > expires = (1 + LVL_GRAN(0) - 1) >> LVL_SHIFT(0); > > ----> expires = 0 > > LVL_GRAN(0) = 1 and LVL_SHIFT(0) = 0 > > after the calculation, expires = 1 ?
Indeed. You're right. Math is hard... So the index would be 1 and still not fulfil the below: > > mod_timer(timer, jiffies + 1) > > > > will not fire before aty least one jiffy has elapsed. Let's look at the > > time line: > > > > |-------------------|-------------------|----------------| > > tick tick tick > > jiffies jiffies + 1 jiffies + 2 > > > > | | > > | Any timer armed | ^ > > | here must be | | > > | queued here -------------------------| > > > > in order to guarantee that. Timer wheel timers are not accurate and never > > can be. Thanks, tglx