Messages in this thread | | | Subject | Re: [MIPS]clocks_calc_mult_shift() may gen a too big mult value | From | John Stultz <> | Date | Mon, 31 Oct 2011 09:03:17 -0400 |
| |
On Mon, 2011-10-31 at 18:48 +0800, Chen Jie wrote: > Hi, > > 2011/10/31 Yong Zhang <yong.zhang0@gmail.com>: > > On Mon, Oct 31, 2011 at 5:00 PM, Chen Jie <chenj@lemote.com> 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
| |