On Mon, 2011-10-31 at 18:48 +0800, Chen Jie wrote: > Hi, > > 2011/10/31 Yong Zhang <yong.zhang0@xxxxxxxxx>: > > On Mon, Oct 31, 2011 at 5:00 PM, Chen Jie <chenj@xxxxxxxxxx> wrote: > >> Hi all, > >> > >> On MIPS, with maxsec=4, clocks_calc_mult_shift() may generate a very > >> big mult, which may easily cause timekeeper.mult overflow within > >> timekeeping jobs. > > > > Hmmm, why not use clocksource_register_hz()/clocksource_register_khz() > > instead? it's more convenient. > > Thanks for the suggestion. And sorry for I didn't notice the upstream > code has already hooked to clocksource_register_hz() in csrc-r4k.c > (We're using r4000 clock source) > > I'm afraid this still doesn't fix my case. Through > clocksource_register_hz()->__clocksource_register_scale()->__clocksource_updatefreq_scale, > I got a calculated maxsec = (0xffffffff - (0xffffffff>>5))/250000500 = > 16 # assume mips_hpt_frequency=250000500 > > With this maxsec, I got a mult of 0xffffde72, still too big. Hrmm. Yong Zang is right to suggest clocksource_register_hz(), as the intention of that code is to try to avoid these sorts of issues. What is the corresponding shift value you're getting for the value above? Could you annotate clocks_calc_mult_shift() a little bit to see where things might be going wrong? thanks -john